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 = ""

解决方案 »

  1.   

    rec.movefirst
      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 = ""
      

  2.   

    在SQL语句中加入“where”直接判断是否有记录,然后存入Text3中rec.Open "select * from zdgc Where gcdm=" & Trim(Text2.Text) , serverconnect, adOpenKeyset, adLockOptimistic
    '如果有记录rec.recordcount <>0,则存入Text3
    If rec.recordcount Then   
      Text3.Text= rec.Fields("gcmc").Value
    Else if
      Text2.Text = ""
    End If
    rec.Close
      

  3.   

    If Trim(rec.Fields("gcdm").Value) = gcbh Then
    因为如果你的字段长度大于实际值的长度时,会有空格的。
    ---------
    你的思想有问题,建议这样
    rec.Open "select gcmc from zdgc where gcdm='" &gcbh &"'", serverconnect, adOpenKeyset, adLockOptimistic
    直接查找你所需要的字段,这样提高了效率。
    另外,如果不是需要所有的字段,建议不要用"*"号,而应该指定字段;
    每次查找最好带上"WHERE"了句。
      

  4.   

    Private Sub Text2_Validate(Cancel As Boolean)
      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 
    试试看,换一个事件!
     
     
     
     
      

  5.   

    你先把记录集的数目用Msgbox打印出来看是否为"-1"(msgbox rec.recordcount),如果是说明你的打开方式不正确,那将打开语句改为:
      rec.Open "select * from zdgc ", serverconnect, adOpenStatic, adLockOptimistic
      

  6.   

    我现在找到了关联的项,TEXT2里面也清空了是怎么会事??????我的程序改成了下面:
    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
      

  7.   

    如果记录集中有10条记录
    如果第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
      

  8.   

    lihonggen0(用VB) 
    你好,我用你说的方法试了,TEXT2还是清空了,怎么会事???
      

  9.   

    试过吗?Private Sub Text2_Validate(Cancel As Boolean)
      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 
      

  10.   

    假设在最后一条找到匹配的就不会有这个问题
    因为,你找到匹配的以后又执行下去,下面一个可能不匹配,
    那么就执行Else: Text2.Text = ""
    你可以单步执行看看,它是怎么走的!
    用我的看看,不建议用lostfoucs事件作这种数据验证
      

  11.   

    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
    End If
      Text2.Text = ""
      rec.Close
    End Sub 
     
      

  12.   

    ferrytang(ferry) 
    用你的方法可以避免
    “你找到匹配的以后又执行下去,下面一个可能不匹配,
    那么就执行Else: Text2.Text = ""”吗?
      

  13.   

    理解错了。应该这样。
    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 
      

  14.   

    rec.Open "select * from zdgc ", serverconnect, adOpenKeyset, adLockOptimistic
    rec.Find "gcdm = '" & gcbh & "'"
    if not rec.eof then
       Text3.Text = rec("gcdm")
    else
       text2.text=""
    end if
      

  15.   

    Private Sub Text2_LostFocus()
      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 
      

  16.   

    数据查询有两种方法;
    1.界面现实,也就是类似于查询窗体,这个查询条件是用前面的数据作为条件拉查询
    比如,公司编号、部门编号、员工编号
    在公司编号确定的情况下,那你查询的数据就是
    select  * from tb where 公司编号=
    2.第二种,quick查询,那种查询方式的实现是不可见的。
    但返回有两种方式,一种,就是指返回匹配的第一条
    第二种,全部返回供用户选择(下拉式控件实现)。比如,公司编号、部门编号、员工编号
    当用户填入公司编号的时候,如果有匹配数据,那么按照上面的返回方式返回
    如果没有匹配的数据,那么要报错给用户像wlcking(顿悟的鱼) 的查询方式不是很赞同,
    查询的时候尽量用足条件,用好条件。
    减少客户端/服务端的数据交互量
      

  17.   

    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
      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 
      

  18.   

    你的程序没有移动纪录,一直在跟第一条记录判断是否相等,当然不行了
    解决方法上面有很多种了,find的用法:如果是字符型:
    rec.find "gcdm = '" & gcbh & "'"如果是数字型
    rec.find "gcdm = " & gcbh
      

  19.   

    Recordset 的Find 方法用来定位给予搜索字符串的纪录。
    参数:criteria:字符串。设定一个字段和一个值。可用 =、<、>、>=、<=、like.没有满足条件,则Recordset指向BOF或EOF.
          Skiprecords:长整型数据。设置开始搜索之前跳过的纪录条数。可选。
          Searchdirection:控制搜索方向。可选
          Start:接受变量数据类型。可接受一个书签。可选。
      

  20.   

    Private Sub Text2_LostFocus()
      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 
      

  21.   

    Private Sub Text2_LostFocus()
      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 
    好使的!