Office中国论坛/Access中国论坛

标题: 问一个关于查找记录的菜问题 [打印本页]

作者: guom33    时间: 2006-3-9 23:17
标题: 问一个关于查找记录的菜问题
偶要查找一个记录,代码如下:

Dim string1 As String
Dim dbs As Database
Dim rst1, rst2, rst3 As dao.Recordset

Set dbs = OpenDatabase("D:\work\数据处理.mdb")

Set rst1 = dbs.OpenRecordset('oldfile', dbOpenDynaset)

string1 = "0001"

rst1.MoveFirst
rst1.FindFirst "客户号 like " & string1   '在oldfile表中查找一条记录,客户号=变量string1对应的字符,这句语句该怎么写??
If not rst1.nomatch Then
      
      MsgBox (rst1.Fields(6))  '显示客户号对应的合同号

endif

问题是记录指针一直停留在表oldfile 的第一条记录,无法实现查找定位记录的目的.请各位DX指教! BTW, 有什么比较好的入门书籍推荐吗? 谢谢!

[此贴子已经被作者于2006-3-10 10:35:01编辑过]


作者: sgrshh29    时间: 2006-3-10 00:06
把这句

rst1.findnext

改为

rst1.findnext "客户号 like " & string2

试试看

作者: guom33    时间: 2006-3-10 00:16
在findfirst后的第一句 msgbox 指针就没有正确定位了(在表的第一条记录而不是符合条件的第一条记录),所以应该不关findnext的事...
作者: sgrshh29    时间: 2006-3-10 00:39
不是很清楚您的目的,如有可能,能不能描述的详细一些?您是不是想找出该客户的所有合同号?

这里  strings = "0001" ,会不会是string2  ?



rst1.MoveFirst
rst1.FindFirst "客户号 like " & string2(或者这里是不是strings  ?)


[此贴子已经被作者于2006-3-9 16:42:12编辑过]


作者: guom33    时间: 2006-3-10 00:56
不好意思,改过来了,都是string1,刚才写错了

确实是想找出该客户的所有合同号.
作者: tcrct    时间: 2006-3-10 05:52
rst1.findnext ??

改为rst1.movenext

试试
作者: guom33    时间: 2006-3-10 16:18
在findfirst后的第一句 msgbox 指针就没有正确定位了(它定位在表的第一条记录而不是符合条件的第一条记录)
作者: skylark    时间: 2006-3-10 17:27



Using the Find Method


The following examples listings demonstrate how to locate a record using fFind and seek.


DAO


Sub DAOFindRecord()





        Dim db            As DAO.Database


        Dim rst          As DAO.Recordset


                        


        ' Open the database


        Set db = DBEngine.OpenDatabase("C:\nwind.mdb")


        


        ' Open the Recordset


        Set rst = db.OpenRecordset("Customers", dbOpenDynaset)


        


        ' Find the first customer who's country is USA


        rst.FindFirst "Country = 'USA'"


        


        ' Print the customer id's of all customers in the USA


        While Not rst.NoMatch


                Debug.Print rst.Fields("CustomerId").Value


                rst.FindNext "Country = 'USA'"


        Wend


        


        ' Close the recordset


        rst.Close


        End Su
作者: guom33    时间: 2006-3-10 18:02
当偶写:rst1.FindFirst "客户号 like " & string1 时,rst1.nomatch 是true,也就是说找不到对应记录(其实此记录是存在的)

当偶写:rst1.FindFirst "客户号 like " string1

rst1.FindFirst "客户号 = string1"

时都是报错,偶到底应该怎么写呢?
作者: skylark    时间: 2006-3-10 18:17
你的Do .....Loop语句没有,FindNext是不动的,最好上传你的示例文件,这样可能大家都方便.
作者: sgrshh29    时间: 2006-3-10 18:36
以下是引用guom33在2006-3-10 10:02:00的发言:


当偶写:rst1.FindFirst "客户号 like " & string1 时,rst1.nomatch 是true,也就是说找不到对应记录(其实此记录是存在的)

当偶写:rst1.FindFirst "客户号 like " string1

rst1.FindFirst "客户号 = string1"

时都是报错,偶到底应该怎么写呢?

rst1.FindFirst "客户号 like '" & string1 & "'"
Do While Not rst1.EOF
Debug.Print rs(6)
rst1.FindNext "客户号 like '" & string1 & "'"
If rst1.NoMatch Then Exit Do
Loop
作者: guom33    时间: 2006-3-10 18:40
偶改了下1楼的例子,现在偶们就只需要找到一条记录就好了,偶认为是findfirst写得不对,该怎么写呢?  如果写成

rst1.FindFirst "客户号 like = '0001'" 是可以查找成功的,但是想把string1的变量名写进去就错了...
作者: guom33    时间: 2006-3-10 18:57
非常谢谢sgrshh29, 按你的方法,程序通过了,

再次谢谢大家!
作者: zweidii    时间: 2006-3-11 03:52
nomatch是什么意思




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3