代码如下:Function Change(ByVal material As String)
  Dim MyCon As New ADODB.Connection
  Dim MyRs As New ADODB.Recordset
  Dim ConStr As String
  ConStr = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;PassWord=zhangzs;DataBase=Mytest"
  On Error GoTo Error:
  MyCon.ConnectionString = ConStr
  MyCon.CommandTimeout = 0
  MyCon.Open
  MyRs.CursorLocation = adUseClient
  MyRs.ActiveConnection = MyCon
  Dim MySqlStr As String
  MySqlStr = "select mat from matdz where material='" + material + "'"
  MyRs.Open MySqlStr
 ' MyRs.MoveFirst    '保证只有一条记录
  Change = Trim(MyRs("mat").Value) --获取对照表中的Mat字段值
  Exit Function
Error:
  MsgBox Err.Description, vbOKOnly, "error"
End Function
Sub MatTotal()
  Dim MyCon As New ADODB.Connection
  Dim MyRs As New ADODB.Recordset
  Dim ConStr As String
  ConStr = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;PassWord=zhangzs;DataBase=mytest"
  On Error GoTo Error:
  MyCon.ConnectionString = ConStr
  MyCon.CommandTimeout = 0
  MyCon.Open
  MyRs.CursorLocation = adUseClient
  MyRs.ActiveConnection = MyCon  MyRs.LockType = adLockBatchOptimistic
  MyRs.CursorType = adOpenDynamic  Dim MySqlStr As String
  MySqlStr = "select * from mat"
  MyRs.Open MySqlStr
  
  MyRs.MoveFirst
  Do While Not MyRs.EOF
   MyRs("Material") = Change(trim(MyRs("Material").Value))  ----这个地方报的错误
   '错误:多步操作产生错误,请检查每步的状态值!但是如果mat字段为<10位就正确。
   '这个字段是 varchar(50)啊
   MyRs.MoveNext
  Loop请问各位,谁遇到过这个问题,应该怎么解决?
  Set DataGrid1.DataSource = MyRs
  DataGrid1.Refresh
  DataGrid1.Columns(2).Width = 700
  Exit Sub
Error:
  MsgBox Err.Description, vbOKOnly, "error"
End Sub

解决方案 »

  1.   

    你用一个数据连接变量不行么?怎么子程序中又创建一个Connection
      

  2.   

    而且子程序中的CONNECTION在连接后没有及时关闭就又想打开。这肯定会报错。
      

  3.   

    我现在只能在sql上测试,其实第一段代码是sql里的一个对照表,而第二段应该属于oracle上的,我机器连不上oracle,暂时用也用sqlserver上同结构的表代替的。
      

  4.   

    MyRs.Close
      MyCon.Close
    我关闭也是如此,因为是,只要我的mat字段的值小于等于10位,就不会有错误,而只要大于10位就报上面的错误。这是怎么回事啊。我这个字段的值,应该是6--18位的都有。
      

  5.   


    你那报错的地方,程序进入CHANG子程序了么?是在进入前就报错了?
      

  6.   

    你把MyRs("Material")的長度加長就沒有問題了,是因為trim(MyRs("Material").Value的長度太長了,field存不下.
      

  7.   

    进入了子程序,是遇到mat字段值长度大于10时报的错误
    请楼上大侠帮忙看看哪的事,该怎么写?
      

  8.   

    这个怎么加长呢?
    MyRs("material").DefinedSize = 20 ?好象不行
      

  9.   

    我改成了500了,还是那样。
    因为我最长的也过不了20的,真是奇怪了。
     lxjlz(事在人為) 所说,是不是MyRs中的各字段都有一个默认的长度呢?
    那么这个长度应该怎么去更改呢?
      

  10.   

    在查詢分析器里執行下面的腳本.
    use Mytest
    go
    alter table mat alter column material varchar(200)
    go
      

  11.   

    把這句Function Change(ByVal material As String)改成
    Public Function Change(ByVal material As String) as string
    試試
      

  12.   

    晕,是有一个地方设置成varchar(10)了,只注意到一个。那么为什么我对recordset或者Connection关闭与否都不影响呢?