Public Sub textcg(tx As TextBox, mshgd As MSHFlexGrid, adoc As Adodc, tx2 As TextBox)On Error Resume Next
For i = 1 To mshgd.Cols - 1
   slfied = slfied & mshgd.TextMatrix(0, i) & ","
Next i
slfied = Mid(slfied, 1, Len(slfied) - 2)
lent = Len(tx.Text)
If lent >= 2 Then '设置数据输入个数。。   'cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & mdbpath & ";Jet.OLEDB:"
   
If Asc(Mid$(tx.Text, 1, 1)) < 0 Or Asc(Mid$(tx, 1, 1)) > 255 Then
       sqlfd = "select " & slfied & " from 基础信息 WHERE 物料名称 like '%" & tx.Text & "%'"
  Else
      sqlfd = "select " & slfied & " from  基础信息 where 物料名称拼音 like '%" & UCase(tx.Text) & "%' "
End If
'************************************
adoc.RecordSource = sqlfd
Set mshgd.DataSource = adoc
End If
adoc.Refresh
Call mshgalig(mshgd)
End Sub意思是录入文本框的数字,如果大于2,就提取数据库中数据,但是当提取到第三次的时候,就出现错误。
至少有一个参数没有被指定,奇怪了,咋的呢?

解决方案 »

  1.   

    With Adodc1
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\cdtest.mdb;Persist Security Info=False"
    .CommandType = adCmdText
    .RecordSource = "select * from 材料信息"
    .Refresh
    End With办法倒是有,重新绑定一次。但是这样视乎效率很低,速度大大降低了
      

  2.   

    Public Sub textcg(tx As TextBox, mshgd As MSHFlexGrid, adoc As Adodc, tx2 As TextBox)
    slfied=""
    On Error Resume Next
    For i = 1 To mshgd.Cols - 1
      slfied = slfied & mshgd.TextMatrix(0, i) & ","
      

  3.   

    dbcontrols
    ,确实要改,但是不是这里。
      

  4.   

    Public Sub textcg(tx As TextBox, mshgd As MSHFlexGrid, adoc As Adodc, tx2 As TextBox)    On Error Resume Next
        
        For i = 1 To mshgd.Cols - 1
            slfied = slfied & mshgd.TextMatrix(0, i) & ","
        Next i
        
        slfied = Mid(slfied, 1, Len(slfied) - 2)   '@@@@@  这里应该减 1 吧?slfied = Mid(slfied, 1, Len(slfied) - 1)  @@@@
        lent = Len(tx.Text)
        
        If lent >= 2 Then '设置数据输入个数。。
            
              'cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & mdbpath & ";Jet.OLEDB:"
                
            If Asc(Mid$(tx.Text, 1, 1)) < 0 Or Asc(Mid$(tx, 1, 1)) > 255 Then
                sqlfd = "select " & slfied & " from 基础信息 WHERE 物料名称 like '%" & tx.Text & "%'"
            Else
                sqlfd = "select " & slfied & " from 基础信息 where 物料名称拼音 like '%" & UCase(tx.Text) & "%' "
            End If
            '************************************
            
            Debug.Print sqlfd   '@@@@@@  看一下你的sql  @@@@@@@
            adoc.RecordSource = sqlfd
            Set mshgd.DataSource = adoc
        End If
        
        adoc.Refresh
        Call mshgalig(mshgd)
    End Sub
      

  5.   

    select 物料编码,规格型号,物料名称,, from  基础信息 where 物料名称拼音 like '%NJ%' 
    这个是slfied 的原代码,slfied = Mid(slfied, 1, Len(slfied) - 2)后是:
    select 物料编码,规格型号,物料名 from  基础信息 where 物料名称拼音 like '%NJ%' 
    咋个去除了三个呢。
      

  6.   

    Len(slfied) - 2,Len(slfied) - 1,Len(slfied)
    这三个都用在mid之外
      

  7.   


    改了,还是报错。select 物料编码,规格型号,物料名 from  基础信息 where 物料名称拼音 like '%NJB%' 
      

  8.   


    方便嘛,不是adodc引起的,就是那个SQL语言,搞不懂了。
      

  9.   

    select 物料编码,规格型号,物料名,物料名称拼音 from 基础信息 where 物料名称拼音 like '%NJ%'  
    where后面有的字段名称前面必须有
      

  10.   

    你的字段名包含错误。Access提示至少一个参数未指定时,就说明SQL语句中有不可识别的部分,多数时候是列名。看你的代码像是“物料名称”被你写成了“物料名”。
      

  11.   

     Select Case Len(tx)
     
     Case 2
       slfied = Mid(slfied, 1, Len(slfied) - 2)
    Case Else
       slfied = Mid(slfied, 1, Len(slfied) - 1)
     End Select
    这么约束下就OK了,嘿嘿,大清早的,麻烦了。。