For i = 0 To rec.RecordCount - 1
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Text3.Text = gcmc
exit Sub
End If
Next i
rec.Close
Text2.Text = ""
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Text3.Text = gcmc
exit Sub
End If
Next i
rec.Close
Text2.Text = ""
do while not rec.eof
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Text3.Text = gcmc
exit Sub
End If
rec.movenext
loop
rec.Close
Text2.Text = ""
'如果有记录rec.recordcount <>0,则存入Text3
If rec.recordcount Then
Text3.Text= rec.Fields("gcmc").Value
Else if
Text2.Text = ""
End If
rec.Close
因为如果你的字段长度大于实际值的长度时,会有空格的。
---------
你的思想有问题,建议这样
rec.Open "select gcmc from zdgc where gcdm='" &gcbh &"'", serverconnect, adOpenKeyset, adLockOptimistic
直接查找你所需要的字段,这样提高了效率。
另外,如果不是需要所有的字段,建议不要用"*"号,而应该指定字段;
每次查找最好带上"WHERE"了句。
Dim gcbh As String
Dim gcmc As String
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc where gcdm='"& trim(texte2.text&"'", serverconnect, adOpenKeyset, adLockOptimistic,adcmdtext
If not rec.bof Then
gcmc = rec.Fields("gcmc").Value&""
Else
Text2.Text = ""
End If
rec.Close
if gcbh<>"" then Text3.Text = gcmc
End Sub
试试看,换一个事件!
rec.Open "select * from zdgc ", serverconnect, adOpenStatic, adLockOptimistic
Private Sub Text2_LostFocus()
Dim gcbh As String
Dim gcmc As String
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
rec.MoveFirst
Do Until rec.EOF
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Else: Text2.Text = ""
End If
rec.MoveNext
Loop
rec.Close
Text3.Text = gcmc
End Sub
如果第5条 rec.Fields("gcdm").Value = gcbh 则 gcmc = rec.Fields("gcmc").Value
接下来第6条就执行: Text2.Text = ""
接下来第7条就执行: Text2.Text = ""所以说
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value 执行后就退出循环
exit do
Else: Text2.Text = ""
End If
你好,我用你说的方法试了,TEXT2还是清空了,怎么会事???
Dim gcbh As String
Dim gcmc As String
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc where gcdm='"& trim(texte2.text&"'", serverconnect, adOpenKeyset, adLockOptimistic,adcmdtext
If not rec.bof Then
gcmc = rec.Fields("gcmc").Value&""
Else
Text2.Text = ""
End If
rec.Close
if gcbh<>"" then Text3.Text = gcmc
End Sub
因为,你找到匹配的以后又执行下去,下面一个可能不匹配,
那么就执行Else: Text2.Text = ""
你可以单步执行看看,它是怎么走的!
用我的看看,不建议用lostfoucs事件作这种数据验证
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.CursorLocation = adUseClient
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
If rec.RecordCount > 0 Then
rec.moveFirst
do While not rec.Eof
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Else
Text2.Text = ""
End If
rec.movenext
loop
Text3.Text = gcmc
End If
Text2.Text = ""
rec.Close
End Sub
用你的方法可以避免
“你找到匹配的以后又执行下去,下面一个可能不匹配,
那么就执行Else: Text2.Text = ""”吗?
Private Sub Text2_LostFocus()
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.CursorLocation = adUseClient
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
If rec.RecordCount > 0 Then
rec.moveFirst
do While not rec.Eof
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Else
Text2.Text = ""
End If
rec.movenext
loop
Text3.Text = gcmc
Else
Text2.Text = ""
End If
rec.Close
End Sub
rec.Find "gcdm = '" & gcbh & "'"
if not rec.eof then
Text3.Text = rec("gcdm")
else
text2.text=""
end if
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
For i = 0 To rec.RecordCount - 1
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
Else Text2.Text = ""
End If
Next i
rec.Close
Text3.Text = gcmc & ""
End Sub
1.界面现实,也就是类似于查询窗体,这个查询条件是用前面的数据作为条件拉查询
比如,公司编号、部门编号、员工编号
在公司编号确定的情况下,那你查询的数据就是
select * from tb where 公司编号=
2.第二种,quick查询,那种查询方式的实现是不可见的。
但返回有两种方式,一种,就是指返回匹配的第一条
第二种,全部返回供用户选择(下拉式控件实现)。比如,公司编号、部门编号、员工编号
当用户填入公司编号的时候,如果有匹配数据,那么按照上面的返回方式返回
如果没有匹配的数据,那么要报错给用户像wlcking(顿悟的鱼) 的查询方式不是很赞同,
查询的时候尽量用足条件,用好条件。
减少客户端/服务端的数据交互量
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.CursorLocation =adUseClient
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
REC.Find "gcdm=" & gcbh, , adSearchForward,adBookFirst
if rec.eof then
text2.text=""
else
rec.movefirst
text3.text=rec.fields("gcmc").value
end if
rec.close
End Sub
解决方法上面有很多种了,find的用法:如果是字符型:
rec.find "gcdm = '" & gcbh & "'"如果是数字型
rec.find "gcdm = " & gcbh
参数:criteria:字符串。设定一个字段和一个值。可用 =、<、>、>=、<=、like.没有满足条件,则Recordset指向BOF或EOF.
Skiprecords:长整型数据。设置开始搜索之前跳过的纪录条数。可选。
Searchdirection:控制搜索方向。可选
Start:接受变量数据类型。可接受一个书签。可选。
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
For i = 0 To rec.RecordCount - 1
If rec.Fields("gcdm").Value = gcbh Then
gcmc = rec.Fields("gcmc").Value
exit for
Else: Text2.Text = ""
End If
Next i
rec.Close
Text3.Text = gcmc
End Sub
Dim gcbh As String
Dim gcmc As String
Dim i As Integer
gcbh = Trim(Text2.Text)
rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
For i = 0 To rec.RecordCount - 1
If rec.Fields("gcdm").Value = gcbh Then
gcmc = Trim(rec.Fields("gcmc").Value)
Text3.Text = gcmc
Else: Text2.Text = ""
End If
Next i
rec.Close
End Sub
好使的!