【发布时间】:2015-12-02 00:34:59
【问题描述】:
我正在尝试创建一个用户表单 - 它将具有不同年份的复选框和不同查询的命令按钮。因此,例如,如果用户选择了三个复选框 -1990、1993、1995,然后用户单击特定查询。然后该查询必须在该年执行,进入“该查询的where部分” 这是我的代码:-
*
Private Sub CommandButton1_Click()
Dim connection As New ADODB.connection
Dim rst As New Recordset
Dim strConnectionStr As String
Dim Qry As String
strConnectionStr = "Provider=SQLOLEDB;" & "DATA SOURCE=" & _
"INITIAL CATALOG=;" & _
"UID=; PWD="
Qry = " SELECT d.Year,d.[University name],d.[School name], COUNT(distinct d.Title) 'Number of paper published'from [dbo].[Ashish$] d where [Business/Non-business]='1'group by d.Year,d.[University name],d.[School name] order by d.[Year], [Number of paper published] desc;"
ActiveSheet.Cells.ClearContents
connection.Open strConnectionStr
rst.Open Qry, connection
For iCols = 0 To rst.Fields.Count - 1
Sheets("Query1").Cells(1, iCols + 1).Value = rst.Fields(iCols).Name
Next
Sheets("Query1").Range("A2").CopyFromRecordset rst*`
rst.Close
connection.Close
End Sub
Above is the code for normal command buttons without check box . Below is the code for taking user inputs by checkboxes ...
Private Sub CommandButton1_Click()
Dim connection As New ADODB.connection
Dim rst As New Recordset
Dim strConnectionStr As String
Dim Qry As String
Dim ctl As Control
Dim i As Integer
i = 0
strConnectionStr = "Provider=SQLOLEDB;" & "DATA SOURCE=;" & _
"INITIAL CATALOG=;" & _
"UID=; PWD="
If CheckBox6.Value = True Then
year1 = CheckBox6.Caption
i = i + 1
End If
If CheckBox5.Value = True Then
year2 = CheckBox5.Caption
i = i + 1
End If
Qry = " SELECT d.Year,d.[University name],d.[School name], COUNT(distinct d.Title) 'Number of paper published'from [dbo].[Ashish$] d where [Business/Non-business]='1' and d.Year=CheckBox6.Caption group by d.Year,d.[University name],d.[School name] order by d.[Year], [Number of paper published] desc;"
ActiveSheet.Cells.ClearContents
connection.Open strConnectionStr
rst.Open Qry, connection
For iCols = 0 To rst.Fields.Count - 1
Sheets("Query1").Cells(1, iCols + 1).Value = rst.Fields(iCols).Name
Next
Sheets("Query1").Range("A2").CopyFromRecordset rst
rst.Close
connection.Close
End Sub
ub
基本上我无法从复选框中获取值并在查询语句中使用它们。
我需要帮助。有人可以指导我吗?
编辑:以下最初是作为答案发布的:
If CheckBox1.Value = True Then
y1 = CheckBox1.Caption
i = i + 1
End If
If CheckBox2.Value = True Then
y2 = CheckBox2.Caption
i = i + 1
End If
If CheckBox3.Value = True Then
x1 = CheckBox3.Caption
j = j + 1
End If
If CheckBox4.Value = True Then
x2 = CheckBox4.Caption
j = j + 1
End If
If CheckBox5.Value = True Then
x3 = CheckBox5.Caption
j = j + 1
End If
If i = 0 Then
MsgBox "Select at least one year "
End If
If j = 0 Then
MsgBox "Select at least one journal "
End If
strConnectionStr = "Provider=SQLOLEDB;" & "DATA SOURCE=;" & _
"INITIAL CATALOG=;" & _
"UID=; PWD="
Qry = " SELECT d.Year,d.[University name],d.[School name], COUNT(distinct d.Title) 'Number of paper published'from [dbo].[Ashish$] d where [Business/Non-business]='1' and "
Qry = Qry & "[Year] IN (" & y1 & "," & y2 & ") and [Name] IN (" & x3 & "," & x4 & ") & vbCrLf"
Qry = Qry & "group by d.Year,d.[University name],d.[School name] order by d.[Year], [Number of paper published] desc;"
ActiveSheet.Cells.ClearContents
connection.Open strConnectionStr
rst.Open Qry, connection
For iCols = 0 To rst.Fields.Count - 1
Sheets("Query1").Cells(1, iCols + 1).Value = rst.Fields(iCols).Name
Next
Sheets("Query1").Range("A2").CopyFromRecordset rst
rst.Close
connection.Close
End Sub
以上是我的代码,问题发表在我的最后一条评论中
【问题讨论】:
-
感谢“barrowc”的回复。现在,我可以在查询中使用变量。我还有几个问题:- 1. 如果我单击所有年份,则以下代码有效,但如果我选择其中任何一个,则不会 2. 如果 [name] 是“Academy of Science”。在执行查询时,它会在 'of' 3 附近显示语法错误。我希望它适用于任何选中的复选框
-
我已经用更多代码更新了我的答案,并将您答案中的代码编辑到问题中
标签: sql vba checkbox input using