请问:多步操作产生错误,请检查每步的状态值!是什么错误?内有代码
代码如下:
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
问题点数:20、回复次数:15Top
1 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 15:54:50 得分 12
你用一个数据连接变量不行么?怎么子程序中又创建一个ConnectionTop
2 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 15:56:12 得分 0
而且子程序中的CONNECTION在连接后没有及时关闭就又想打开。这肯定会报错。Top
3 楼zhangzs8896(小二)回复于 2005-02-22 15:58:35 得分 0
我现在只能在sql上测试,其实第一段代码是sql里的一个对照表,而第二段应该属于oracle上的,我机器连不上oracle,暂时用也用sqlserver上同结构的表代替的。
Top
4 楼zhangzs8896(小二)回复于 2005-02-22 16:03:35 得分 0
MyRs.Close
MyCon.Close
我关闭也是如此,因为是,只要我的mat字段的值小于等于10位,就不会有错误,而只要大于10位就报上面的错误。这是怎么回事啊。我这个字段的值,应该是6--18位的都有。Top
5 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 16:16:01 得分 0
你那报错的地方,程序进入CHANG子程序了么?是在进入前就报错了?Top
6 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 16:20:03 得分 0
是循环了几遍以后报的错,是吧?Top
7 楼lxjlz()回复于 2005-02-22 16:26:06 得分 8
你把MyRs("Material")的長度加長就沒有問題了,是因為trim(MyRs("Material").Value的長度太長了,field存不下.Top
8 楼zhangzs8896(小二)回复于 2005-02-22 16:27:05 得分 0
进入了子程序,是遇到mat字段值长度大于10时报的错误
请楼上大侠帮忙看看哪的事,该怎么写?Top
9 楼zhangzs8896(小二)回复于 2005-02-22 16:31:32 得分 0
这个怎么加长呢?
MyRs("material").DefinedSize = 20 ?好象不行Top
10 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 16:37:44 得分 0
改varchar(50)为大些Top
11 楼zhangzs8896(小二)回复于 2005-02-22 16:45:44 得分 0
我改成了500了,还是那样。
因为我最长的也过不了20的,真是奇怪了。
lxjlz(事在人為) 所说,是不是MyRs中的各字段都有一个默认的长度呢?
那么这个长度应该怎么去更改呢?Top
12 楼lxjlz()回复于 2005-02-22 16:45:57 得分 0
在查詢分析器里執行下面的腳本.
use Mytest
go
alter table mat alter column material varchar(200)
go
Top
13 楼lxjlz()回复于 2005-02-22 16:52:52 得分 0
把這句Function Change(ByVal material As String)改成
Public Function Change(ByVal material As String) as string
試試Top
14 楼zhangzs8896(小二)回复于 2005-02-22 16:53:58 得分 0
晕,是有一个地方设置成varchar(10)了,只注意到一个。
那么为什么我对recordset或者Connection关闭与否都不影响呢?
Top
15 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2005-02-22 17:01:50 得分 0
On Error GoTo Error:Top
相关问题
- 错误 : "多步操作产生错误,请检查每一步的状态值"
- 多步操作产生错误。请检查每一步的状态值。
- “多步 OLE DB 操作产生错误。请检查每个 OLE DB 状态值。没有工作被完成。”——??
- 多步 OLE DB 操作产生错误。请检查每个 OLE DB 状态值。没有工作被完成。
- “多步操作产生错误,请检查每一步的状态值”是如何引起的???
- 如何侦错? ---- 实时错误 '-2147217887(80040e21)多步OLE DB操作产生错误。请检查每个OLE DB状态值,没有工作被完成。
- 多步OLE DB 操作产生错误。请检查每个OLE DB的状态值。没有工作完成 实时错误‘-2147217887’
- 错误提示:多步 OLE DB操作产生错误.请检查每个ole db状态值.没有工作被完成???如何解决???
- “多步操作产生错误。请检查每一步的状态值”,请问这是什么错误啊???谢谢!!!
- 请问此问题如何解决:“多步OLE DB操作产生错误。请检查每个OLE DB状态值。没有工作被完成。"




