错误:多步操作产生错误,请检查每步的状态值
'主
Sub MatTotal()
Dim MyCon As New ADODB.Connection
Dim MyRs As New ADODB.Recordset
Dim ConStr As String
'由于本机没连到Oracle,暂用同结构的Sql Server中的表替代
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 mo,material,weight, opn from mat" '其中字段opn为char(1)
MyRs.Open MySqlStr
MyRs.MoveFirst
Do While Not MyRs.EOF
MyRs("opn") = Opn(Trim(MyRs("Opn").Value)) '报错的地方
MyRs.MoveNext
Loop
Set DataGrid1.DataSource = MyRs
DataGrid1.Refresh
DataGrid1.Columns(2).Width = 700 Exit Sub
Error:
MsgBox Err.Description, vbOKOnly, "error"
End Sub’转换函数
Function Opn(ByVal a As String)
Select Case a
Case "E"
Opn = "0020"
End Select
Case "L"
Opn = "0030"
Case "V"
Opn = "0040"
End Select
End Function'如果把字段opn更改为char(4)则程序顺利执行。
是不是代码写的有毛病呢?恳请大家帮忙解决,谢谢!
'主
Sub MatTotal()
Dim MyCon As New ADODB.Connection
Dim MyRs As New ADODB.Recordset
Dim ConStr As String
'由于本机没连到Oracle,暂用同结构的Sql Server中的表替代
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 mo,material,weight, opn from mat" '其中字段opn为char(1)
MyRs.Open MySqlStr
MyRs.MoveFirst
Do While Not MyRs.EOF
MyRs("opn") = Opn(Trim(MyRs("Opn").Value)) '报错的地方
MyRs.MoveNext
Loop
Set DataGrid1.DataSource = MyRs
DataGrid1.Refresh
DataGrid1.Columns(2).Width = 700 Exit Sub
Error:
MsgBox Err.Description, vbOKOnly, "error"
End Sub’转换函数
Function Opn(ByVal a As String)
Select Case a
Case "E"
Opn = "0020"
End Select
Case "L"
Opn = "0030"
Case "V"
Opn = "0040"
End Select
End Function'如果把字段opn更改为char(4)则程序顺利执行。
是不是代码写的有毛病呢?恳请大家帮忙解决,谢谢!
OPN字段的长度为CHAR(1)
当然会出错。
你的函数Function Opn(ByVal a As String) 返回值未指定,因此是String类型,当然是占用4位了.我不知道你想返回什么,如果是16位的话应该这样写
MyRs("opn") = hex(val(Opn(Trim(MyRs("Opn").Value)) ))
OPN字段的长度为CHAR(1)
前提是OPN字段的长度由于特殊不可以更改
直接这样肯定不对的,但是如何解决这个问题呢?
比方说:
如果不使用MyRs("opn") = Opn(Trim(MyRs("Opn").Value))
取得的数据集是:
mo material weight opn
1001 Y002100 1.5 E
1001 Y005100 0.5 L而实际应该得到的是:
mo material weight opn
1001 Y002100 1.5 0020
1001 Y005100 0.5 0030
这句是赋值语句啊是说把“0020” 赋值到 数据集中。当然会出错。但楼主的用意不是存储4个字符而是使用4个字符
那可以在要应用的时候函数转啊
WHEN ' E' THEN '0020'
WHEN ' L' THEN '0030'
......
END AS opn ,
mo,material,weight from mat"查出的结果集就是你所需要的。
这一句的意思,明明OPN中存贮的是一个字符,重新存入4个字符的数据进去?
Function Opn(ByVal a As String)
Select Case a
Case "E"
Opn = "0020"
End Select
Case "L"
Opn = "0030"
Case "V"
Opn = "0040"
End Select
End Function
这个函数应该是读取的时候用,写入的时候用’转换函数
Function Opn(ByVal a As String)
Select Case a
Case "0020"
Opn = "E"
End Select
Case "0030"
Opn = "L"
Case "0040"
Opn = "V"
End Select
End Function
select mo,material, weight ,(case opn when 'E' then '0020' when 'L' then '0030' when 'V' then '0040' end) as opn from 表
说实话,我现在还不明白你说的什么,
可能表达有问题,呵呵。
我不能用这个sql的,因为这里只是我的一个简化,
实际上应该是material使用对照表对照完毕后,也要做opn的一个参数。
我现在想用两个数据集去实现它了。
同样希望得到你的帮助。