主要是查询 我用的方法是1.几个find包括(FindFirst(查找第一个), FindLast(查找最后一个),findNext (查找下一个) ,FindPrevious(查找上一个) 方法2是用move内边也是分上边几种MOVEFirst(指针移到开始), MOVELast(移到最后),findNext (下一个) ,FindPrevious(上一个)就是浏览的意思 然后加上判断就是查询的意思了. 一、查找单个记录 Sub 查找记录() Dim db1 As Database '声明数据库变量 Dim rs1 As Recordset '声明指针 Set db1 = OpenDatabase(ThisWorkbook.Path & "\数据库.mdb") Set rs1 = db1.OpenRecordset(Name:="表1", Type:=dbOpenDynaset) rs1.FindFirst "姓名='A3'" '找到A4 If rs1.NoMatch = False Then '通过这个函数返回真就是没找打 返回假就是找到了 MsgBox rs1.Fields("成绩") '弹出成绩 End If rs1.Close db1.Close End Sub 用MOVE也行 就是复杂一点 Sub 查找记录MOVE() Dim db1 As Database '声明数据库变量 Dim rs1 As Recordset '声明指针 Set db1 = OpenDatabase(ThisWorkbook.Path & "\数据库.mdb") Set rs1 = db1.OpenRecordset(Name:="表1", Type:=dbOpenDynaset) Do '按个浏览 If rs1.Fields("姓名") = "A3" Then '判断 MsgBox rs1.Fields("成绩") Exit Do '跳出DO End If rs1.MoveNext Loop Until rs1.EOF 'EOF就是最后一条记录的时候返回真 rs1.Close db1.Close End Sub 二、查找带变量的 Sub 查找变量字段文本() '看姓名字段是文本 Dim db1 As Database '声明数据库变量 Dim rs1 As Recordset '声明指针 Dim a As String Set db1 = OpenDatabase(ThisWorkbook.Path & "\数据库.mdb") Set rs1 = db1.OpenRecordset(Name:="表1", Type:=dbOpenDynaset) a = "A3" rs1.FindFirst "姓名='" & a & "'" '找到A3 If rs1.NoMatch = False Then '通过这个函数返回真就是没找打 返回假就是找到了 MsgBox rs1.Fields("成绩") '弹出成绩 End If rs1.Close db1.Close End Sub Sub 查找变量字段数字() '看ID字段是数字 Dim db1 As Database '声明数据库变量 Dim rs1 As Recordset '声明指针 Dim x As Integer Set db1 = OpenDatabase(ThisWorkbook.Path & "\数据库.mdb") Set rs1 = db1.OpenRecordset(Name:="表1", Type:=dbOpenDynaset) x = 3 rs1.FindFirst "ID =" & x '找到A3 If rs1.NoMatch = False Then '通过这个函数返回真就是没找打 返回假就是找到了 MsgBox rs1.Fields("成绩") '弹出成绩 End If rs1.Close db1.Close End Sub 这里注意 文本变量和数字变量的写法不同 三、查找多个记录 这里我就不一条记录一条记录的放在单元格了 我直接N=N+1 从返回的N来看几条记录 Sub 查找多条记录() Dim n As Long Dim db1 As Database '声明数据库变量 Dim rs1 As Recordset '声明指针 Set db1 = OpenDatabase(ThisWorkbook.Path & "\数据库.mdb") Set rs1 = db1.OpenRecordset(Name:="表1", Type:=dbOpenDynaset) Do rs1.FindNext "姓名='A3'" '找到A3 If rs1.NoMatch = False Then n = n + 1 End If Loop Until rs1.NoMatch MsgBox n rs1.Close db1.Close End Sub 这里的MOVE就不再写了 其实就是循环+判断 上边的DO LOOP 有人喜欢用这个 有人喜欢用FOR 循环都一样的 如果计算的时候 ACCESS提取出来的是文本数字要加VAL() 还有如果是空的他会是NULL这时如果判断还有VAL会错误 要先用ISNULL判断 可以通过这个完成IIf(IsNull(rs1.Fields("成绩")), 0, val(rs1.Fields("成绩")&"")) 通过连接""来避免VAL(NULL)出现的错误(这还是篮板提醒的)
[此贴子已经被作者于2009-12-2 9:28:42编辑过] |