我在做VB搜索框进行数据库查询时,遇到一个奇怪的问题:一个Text框,一个Combo1,一个按钮command1,单击查找Access数据库内容。 当我直接输入一个字符串进行搜索的时候,可以正常的搜索出结果。然而当我直接从Excel复制这个字符串时,却搜索不到结果(Excel内的字符串没有比输入的多任何一个字符,比如空格之类); 下面是我的代码,请大侠们帮忙看看:
Private Sub Command1_Click()
    Dim strConn     As String
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\list.mdb;" & ";Persist Security  Info=False;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:database password='123456'"
    Conn.CursorLocation = adUseClient
    If Conn.State <> adStateClosed Then Conn.Close
    Conn.Open strConn
    If rs.State <> adStateClosed Then rs.Close
    rs.Open "Select   *   from   ID where " & Combo1.Text & " like '%" & Trim(Text1.Text) & "%'", Conn, adOpenKeyset, adLockPessimistic
    Set DataGrid1.DataSource = rs
End Sub

解决方案 »

  1.   

    如果是有空格,你可以用trim()来去掉,你看看是不是你复制的最后有一个回车
      

  2.   

    我的代码里有trim()函数, Trim(Text1.Text),Excel单元格里面没有回车,直接复制单元格粘贴到text1内,搜索不出结果,但双击单元格,然后复制里面的东西可以搜索出结果。这说明直接复制到text1框内没有转化成春文本,不知道有没有什么办法解决这个问题。
      

  3.   

    还是有东西的,你可以用len(text1.text)看看长度是不是显示的那样。
    很有可能后面有回车或者chr(0)之类的不能显示的东西。
      

  4.   

    大概是EXCEL中这列有什么特殊的格式吧,可以把文本框中复制后的内容DEBUG出来看看
      

  5.   

    我直接在一个Excel输入一个字符串,然后复制整个单元格,粘贴到Text内,结果还是搜索不出来。但我在文本框内直接输入,,可以搜索得到结果。我复制的这个单元格只有5个字符,但len(text1.text)后等于7,不知道这是为什么?
      

  6.   

    经试验,Excel复制过来的确实有个强制换行符(向下箭头),如何限定这个Text.text,使得Excel复制过来的单元格数据也能查找?
      

  7.   

    replace(str, chr(10),"")
    replace (str, char(13),"")
      

  8.   

    首先你先用ASC函数查一查多出来的东西的ASCII码,然后替换成空串就行了
      

  9.   

    在粘贴时就进行过滤
    Private Sub Text1_Change()
        Static bSelfChange As Boolean
        Dim s As String
        
        If bSelfChange Then Exit Sub
        bSelfChange = True
        
        s = Replace(Text1.Text, vbCr, vbNullString)
        s = Replace(s, vbLf, vbNullString)
        If Len(s) <> Len(Text1.Text) Then
            Text1.Text = s
        End If
        
        bSelfChange = False
    End Sub
      

  10.   


    Private Sub Command1_Click() '复制EXCEL中的ABC(不双击的复制)到文本框里,单击它
     Dim iH As String For i = 1 To Len(Text1)
         iH = iH & Format(Asc(Mid(Text1, i, 1)))
     Next
     Debug.Print iH '这样可以看出多的13和10,也就是回车换行
     '----------------------------------------------------
     iH = Replace(Text1, vbCrLf, "") '这样处理一下就可以了.
     Debug.Print iH; Format(Len(iH))
     
    End Sub
      

  11.   

    多谢几位大侠,答案是正解。replace掉就行