关于recordset.find方法

lesonly 2006-06-01 09:45:34
Dim pn As String
pn = Form1.TreeView1.SelectedItem.Text
rec.Open "pinfo", con, adOpenKeyset, adLockOptimistic 'rec为recordset对象
rec.MoveFirst
rec.Find "pname = 'pn'", , , 1
If Not rec.EOF Then
Text1.Text = rec("pname")
Text1.SetFocus
End If
请高手帮我看一下为什么找不到该记录呢 我确定该记录一定存在数据库中!
每次调试的时候都是不走if 真是郁闷死了 我错在哪了呢?
...全文
292 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyun0112 2007-01-22
  • 打赏
  • 举报
回复
rec.Filter "pname = 'pn'"

*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
上官云峰 2007-01-22
  • 打赏
  • 举报
回复
为什么要用到rec.Find 呢
Dim pn As String
pn = Form1.TreeView1.SelectedItem.Text
strsql="select * from pinfo where pname = 'pn'"
rec.Open strsql, con, adOpenKeyset, adLockOptimistic 'rec为recordset对象
if rec.recordcount>0 ‘有记录
Text1.Text = rec("pname")
Text1.SetFocus
end if


NewQger 2007-01-22
  • 打赏
  • 举报
回复
既然前边还有代码,从前边研究一下.很奔的方法,find前边作个循环 第一条到最后一条,然后跟踪 你要取的字段的值只否在记录集了啊.
kssys 2006-06-01
  • 打赏
  • 举报
回复
rec.Find "pname = 'pn'", , , 1

->
rec.Find "pname = 'pn'"
lesonly 2006-06-01
  • 打赏
  • 举报
回复
就是那个地方设的断点 我现在就是不明白为什么找不到该记录
kssys 2006-06-01
  • 打赏
  • 举报
回复
楼主在rec.Open "pinfo"设个断点。

然后按F8,看它的运行顺序。
lesonly 2006-06-01
  • 打赏
  • 举报
回复
谢谢了
1 "pinfo"是表的名称
2 rec.movefirst我确定必有记录,这个过程是前一个过程后续(前一过程向数据库里添加记录)
kssys 2006-06-01
  • 打赏
  • 举报
回复
分析了这段代码:
1)rec.Open "pinfo"..... 楼主的Pinfo是存储过程吗?
2)rec.MoveFirst 存在潜在的错误,如果没有记录将出错。应加上if rec.recordCount<>0 then
3)不走if 可能是之前的已出现错误,跳到错误处理了:)
Option Explicit Dim Bupdata As Boolean Dim i As Integer Private Sub Cmbdegree_Click() If Cmbdegree.Text = "定制" Then FrmTable.Show Cmbdegree.ListIndex = 0 End If End Sub Private Sub Cmbdepart_Click() If Cmbdepart.Text = "定制" Then FrmTable.Show Cmbdepart.ListIndex = 0 End If End Sub Private Sub CmdAddNew_Click() If CmdAddNew.Caption = "添加" Then CmdAddNew.Caption = "确认" CmdDel.Enabled = False CmdOK.Enabled = False DataA.ReadOnly = False For i = 1 To 12 If Txt(i).Text = "" Then Txt(i).Text = 0 'DataA.Recordset.Fields(i) = 0 Next i DataA.Recordset.AddNew Txt(0).Locked = False If FrmMain.cutable = "employee" Then DataA.Recordset.Fields(13) = frmLogin.EmploID DataA.Recordset.Fields(14) = Now If Opsex(0) Then DataA.Recordset.Fields(4) = "男" Else DataA.Recordset.Fields(4) = "女" End If DataA.Recordset.Fields(7) = Cmbdegree.Text DataA.Recordset.Fields(8) = Cmbdepart.Text ElseIf FrmMain.cutable = "leave" Then DataA.Recordset.Fields(8) = frmLogin.EmploID DataA.Recordset.Fields(9) = Now Else DataA.Recordset.Fields(13) = frmLogin.EmploID DataA.Recordset.Fields(14) = Now End If Txt(0).SetFocus Else 'OK If Txt(0).Text = "" Then MsgBox "不可以为空" Txt(0).SetFocus Exit Sub End If For i = 1 To 12 If Txt(i).Text = "" Then Txt(i).Text = 0 'DataA.Recordset.Fields(i) = 0 Next i If FrmMain.cutable = "employee" Then DataB.Recordset.FindFirst "职工编号=" + Txt(0).Text If Not DataB.Recordset.NoMatch Then MsgBox "职员编号重复" Txt(0).Text = "" Txt(0).SetFocus Exit Sub End If ElseIf FrmMain.cutable = "leave" Then DataB.Recordset.FindFirst "假条编号=" + Txt(0).Text If Not DataB.Recordset.NoMatch Then MsgBox "假条编号重复" Txt(0).Text = "" Txt(0).SetFocus Exit Sub End If Else For i = 4 To 10 If Not IsNumeric(Txt(i).Text) Then MsgBox "not a number" Txt(i).SetFocus Exit Sub End If Next i DataB.Recordset.FindFirst "工资编号=" + Txt(0).Text If Not DataB.Recordset.NoMatch Then MsgBox "工资编号重复" Txt(0).Text = "" Txt(0).SetFocus Exit Sub End If End If DataA.Recordset.Update DataA.Recordset.MoveLast FrmMain.DataA.Refresh FrmMain.DataB.Refresh DataB.Refresh CmdAddNew.Caption = "添加" CmdDel.Enabled = True CmdOK.Enabled = True End If End Sub Private Sub CmdCacel_Click() If CmdAddNew.Caption = "确认" Then DataA.Recordset.CancelUpdate End If FrmMain.Enabled = True FrmMain.SetFocus Unload Me FrmMain.DataA.Refresh If FrmMain.cutable = "employee" Then FrmMain.DBGA.Columns("性别").Button = True FrmMain.DBGA.Columns("学历").Button = True FrmMain.DBGA.Columns("部门").Button = True End If End Sub Private Sub CmdDel_Click() DataA.ReadOnly = False DataA.Recordset.Delete DataA.Recordset.MoveNext If DataA.Recordset.EOF Then DataA.Recordset.MoveLast End If FrmMain.DataA.Refresh End Sub Private Sub cmdOK_Click() If Txt(0).Text = "" Then MsgBox "不可以为空" Txt(0).SetFocus Exit Sub End If Bupdata = False DataA.Recordset.Edit If FrmMain.cutable = "leave" Then DataA.Recordset.Fields(8) = frmLogin.EmploID DataA.Recordset.Fields(9) = Now ElseIf FrmMain.cutable = "employee" Then DataA.Recordset.Fields(13) = frmLogin.EmploID DataA.Recordset.Fields(14) = Now If Opsex(0) Then DataA.Recordset.Fields(4) = "男" Else DataA.Recordset.Fields(4) = "女" End If DataA.Recordset.Fields(7) = Cmbdegree.Text DataA.Recordset.Fields(8) = Cmbdepart.Text DataA.Recordset.Fields(13) = frmLogin.EmploID DataA.Recordset.Fields(14) = Now Else For i = 4 To 10 If Not IsNumeric(Txt(i).Text) Then MsgBox "not a number" Txt(i).SetFocus Exit Sub End If Next i DataA.Recordset.Fields(13) = frmLogin.EmploID DataA.Recordset.Fields(14) = Now End If For i = 1 To 12 If Txt(i).Text = "" Then Txt(i).Text = 0 'DataA.Recordset.Fields(i) = 0 Next i DataA.Recordset.Update FrmMain.DataA.Refresh DataB.Refresh End Sub Private Sub DataA_Validate(Action As Integer, Save As Integer) If Action = 11 And Bupdata Then Save = 0 End If End Sub Private Sub Lab_Click(Index As Integer) End Sub Private Sub Txt_KeyPress(Index As Integer, KeyAscii As Integer) If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> vbKeyBack And Index = 0 Then KeyAscii = 0 Exit Sub End If If FrmMain.cutable = "leave" And Index = 1 Then If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> vbKeyBack Then KeyAscii = 0 Exit Sub End If End If If FrmMain.cutable = "salary" Then If Index <= 3 Then If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> vbKeyBack Then KeyAscii = 0 Exit Sub End If End If If Index = 13 Then Exit Sub If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> vbKeyBack And KeyAscii <> 46 Then KeyAscii = 0 Exit Sub End If End If End Sub Private Sub Txt_change(Index As Integer) If Bupdata = False Then Bupdata = True If FrmMain.cutable = "salary" Then If Txt(Index).Text = "" Then Exit Sub If Index >= 4 And Index <= 6 Then Txt(7).Text = Val(Txt(4).Text) + Val(Txt(5).Text) + Val(Txt(6).Text) Txt(12).Text = Val(Txt(7).Text) - Val(Txt(11).Text) End If If Index >= 8 And Index <= 10 Then Txt(11).Text = Val(Txt(8).Text) + Val(Txt(9).Text) + Val(Txt(10).Text) Txt(12).Text = Val(Txt(7).Text) - Val(Txt(11).Text) End If End If End Sub Private Sub Form_Load() DataA.DatabaseName = App.Path + "\sm.mdb" DataB.DatabaseName = App.Path + "\sm.mdb" DataA.Caption = FrmMain.cutable DataA.RecordSource = "select * from " + FrmMain.cutable DataB.RecordSource = "select * from " + FrmMain.cutable DataA.Refresh Txt(0).Locked = True 'If FrmMain.DBGA.Row = 0 Then Exit Sub If FrmMain.cutable = "employee" Then 'employee For i = 0 To 12 Lab(i).Caption = DataA.Recordset.Fields(i).Name Next i Txt(0).DataField = DataA.Recordset.Fields(0).Name Txt(1).DataField = DataA.Recordset.Fields(1).Name Txt(2).DataField = DataA.Recordset.Fields(2).Name Txt(3).DataField = DataA.Recordset.Fields(3).Name Txt(4).Visible = False Txt(5).DataField = DataA.Recordset.Fields(5).Name Txt(6).DataField = DataA.Recordset.Fields(6).Name Txt(7).Visible = False Txt(8).Visible = False Txt(9).DataField = DataA.Recordset.Fields(9).Name Txt(10).DataField = DataA.Recordset.Fields(10).Name Txt(11).DataField = DataA.Recordset.Fields(11).Name Txt(12).DataField = DataA.Recordset.Fields(12).Name Txt(13).DataField = DataA.Recordset.Fields(15).Name If FrmMain.cuAp > -1 Then DataA.Recordset.Move (FrmMain.cuAp) Else DataA.Recordset.MoveFirst End If If DataA.Recordset.Fields(4) = "男" Then Opsex(0).Value = True Else Opsex(1).Value = True End If '设置lsdegree的显示项 For i = 0 To FrmMain.LsDegree.ListCount - 2 Cmbdegree.AddItem FrmMain.LsDegree.List(i) If FrmMain.LsDegree.List(i) = DataA.Recordset.Fields(7) Then Cmbdegree.ListIndex = i End If Next i If Cmbdegree.ListIndex = -1 Then Cmbdegree.AddItem DataA.Recordset.Fields(7) Cmbdegree.ListIndex = Cmbdegree.ListCount - 1 End If Cmbdegree.AddItem "定制" '设置lsdepart的显示项 For i = 0 To FrmMain.LsDepart.ListCount - 2 Cmbdepart.AddItem FrmMain.LsDepart.List(i) If FrmMain.LsDepart.List(i) = DataA.Recordset.Fields(8) Then Cmbdepart.ListIndex = i End If Next i If Cmbdepart.ListIndex = -1 Then Cmbdepart.AddItem DataA.Recordset.Fields(8) Cmbdepart.ListIndex = Cmbdepart.ListCount - 1 End If Cmbdepart.AddItem "定制" '设置完毕 ElseIf FrmMain.cutable = "leave" Then 'leave Txt(7).Visible = True Cmbdegree.Visible = False Cmbdepart.Visible = False Frame1.Visible = False For i = 8 To 12 Lab(i).Visible = False Txt(i).Visible = False Next i For i = 0 To 7 Lab(i).Caption = DataA.Recordset.Fields(i).Name Txt(i).DataField = DataA.Recordset.Fields(i).Name Next i Txt(13).DataField = DataA.Recordset.Fields(10).Name If FrmMain.cuAp > -1 Then DataA.Recordset.Move (FrmMain.cuAp) Else DataA.Recordset.MoveFirst End If Else 'salary Frame1.Visible = False Cmbdegree.Visible = False Cmbdepart.Visible = False For i = 0 To 12 Lab(i).Caption = DataA.Recordset.Fields(i).Name Txt(i).DataField = DataA.Recordset.Fields(i).Name Next i Txt(13).DataField = DataA.Recordset.Fields(15).Name Txt(7).Locked = True Txt(11).Locked = True Txt(12).Locked = True If FrmMain.cuAp > -1 Then DataA.Recordset.Move (FrmMain.cuAp) Else DataA.Recordset.MoveFirst End If End If End Sub Private Sub Form_Unload(Cancel As Integer) FrmMain.Enabled = True FrmMain.SetFocus Unload Me FrmMain.DataB.Refresh End Sub Option Explicit Const MxUser = 100 Public EmploID As Integer Public CurUser As String Public CurId As String Public CurPsw As String Dim user(MxUser), pws(MxUser), state(MxUser), Emplo(MxUser) As String Private Sub Form_Load() Dim i As Integer If App.PrevInstance Then MsgBox ("程序已经运行,不能再次装载。"), vbExclamation Unload Me End If '本段代码用于判定本程序是否已经装载于内存中,以避免程序的多重启动 i = 0 Open App.Path + "\user.ini" For Input As #1 Do While Not EOF(1) Input #1, user(i), pws(i), state(i), Emplo(i) If state(i) = "A" Then Combo1.AddItem user(i) End If i = i + 1 Loop Close #1 Combo1.ListIndex = 1 '在窗口装载阶段读取用户设置文件获取用户信息 并装载于用户列表框中 End Sub Private Sub CmdCancel_Click() Unload Me End End Sub Private Sub cmdOK_Click() If txtPassword = pws(Combo1.ListIndex) Then CurId = Combo1.ListIndex EmploID = Emplo(CurId) CurUser = user(CurId) CurPsw = pws(CurId) Me.Hide 'Load FrmMain FrmMain.Show Else MsgBox "Invalid Password, try again!", , "Login" txtPassword.SetFocus SendKeys "{Home}+{End}" End If End Sub Private Sub Form_Unload(Cancel As Integer) Unload Me End

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧