VBA-ADO-SQL-002单条件查询语句
【问题】有以下的数据源
输入“工号 姓名 性别 年龄 部门 工资 奖金”
其中的任一个,可以查询到数据,其中“工号\姓名\性别\部门”是文本格式
“年龄\工资\奖金“是数值格式,
【解决问题】
1.
Conn. Execute,这种方式比较适合无返回记录的语句,即DML语句。如果执行有返回记录的SQL语句,也可以取到记录,只是RecordCount总是反馈-1。这种情况下可以根据rst.eof判断有无查询结果,如果rst.eof= true就表示查询结果为空
2.
如果是文本的要加“‘’“如:
strSQL= "SELECT * FROM [数据源$] WHERE部门=‘技术部’“
如果是数值的不用”’” 如:
strSQL= "SELECT * FROM [数据源$] WHERE年龄=30“
【代码】
Sub myOneFindData()
Dim cnn As Object, rst As Object
Dim strPath As String, str_cnn As String ', 'strWhere As String
Dim i As Long, j As Long
Set cnn = CreateObject("adodb.connection")
With ActiveSheet
ActiveSheet.UsedRange.Offset(3).Clear
If Len(Range("a2")) = 0 Or Len(Range("b2")) = 0 ThenMsgBox "请输入查询条件": Exit Sub
Select Case .Cells(2, 1).Value
Case "工号", "姓名", "性别", "部门"
strWhere =Range("a2") & "='" & Range("b2") &"'"
'Case "工号", "姓名", "性别", "年龄", "部门", "工资", "奖金"
Case Else
strWhere =Range("a2") & "=" & Range("b2")
End Select
End With
strPath = ThisWorkbook.FullName
If Application.Version < 12 Then
str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;ExtendedProperties=Excel 8.0;Data Source=" & strPath
Else
str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel 12.0;Data Source=" & strPath
End If
cnn.Open str_cnn
strSQL = "SELECT * FROM [数据源$] WHERE "& strWhere
Set rst = cnn.Execute(strSQL)
'cnn.Execute()执行strSQL语句
If rst.EOF Then
MsgBox "没有找到数据"
Exit Sub
Else
Range("a4").CopyFromRecordset rst
ActiveSheet.UsedRange.Offset(2).HorizontalAlignment = xlCenter
ActiveSheet.UsedRange.Offset(2).Borders.LineStyle = xlContinuous
End If
cnn.Close '关闭链接
Set cnn = Nothing '释放内存
End Sub
【测试成功】
1.===============
2.============
3.============
=======今天学习到此=======