1.我试图建立一个基于MySQL服务器上存储过程的记录集的表单。当我使用命令对象和Set Me.Recordset = cmd.execute
时,它的工作原理就像一个魅力,但我需要能够更新绑定到表单上的复选框和文本框的两个字段(tinyint和varchar)。当然,这是行不通的。
1.由于这在设计上不起作用,我尝试用.Open方法和“CALL procName
('value 1','value 2');“语法,然后创建一个新的断开连接的记录集,从.Open方法填充架构,然后循环遍历记录并追加到新的rs。最后,将其设置为窗体的记录集,如下所示:
1.
Dim OriginalRecordset As ADODB.Recordset
Dim Field As ADODB.Field
Set NewRecordset = New ADODB.Recordset
Set OriginalRecordset = New ADODB.Recordset
OriginalRecordset.Open "CALL `DosarClient_Functie` ('14575','2234');", SQL_ADE.Conn, adOpenDynamic, adLockPessimistic, adCmdText
For Each Field In OriginalRecordset.Fields
NewRecordset.Fields.Append Field.Name, Field.Type, Field.DefinedSize, adFldIsNullable Or adFldUpdatable
Next Field
NewRecordset.CursorType = adOpenDynamic
NewRecordset.CursorLocation = adUseClient
NewRecordset.LockType = adLockOptimistic
NewRecordset.Open
OriginalRecordset.MoveFirst
Do Until OriginalRecordset.EOF
NewRecordset.AddNew
For Each Field In OriginalRecordset.Fields
If Not IsNull(Field.value) Then
NewRecordset.Fields(Field.Name).value = Field.value
Else
End If
Next Field
NewRecordset.Update
OriginalRecordset.MoveNext
Loop
Set Me.Recordset = NewRecordset
1.额外:New变量在表单级别被声明为私有。我也知道像我这样调用过程是不好的做法,但我想不出其他方法来完成这项任务。
1.重要提示:我不能也不想使用本地表。这是一种简单的解决方法,但它也会与代码的其余部分不一致。Thanks:)
问题:如果我像我解释的那样继续,我在绑定字段上得到#Name错误,或者它们被设置为记录集,我可以更改它们的值,但我看不到初始值。
1条答案
按热度按时间m1m5dgzv1#
据我所知,您已经尝试了各种方法,例如创建新的记录集和从原始记录集复制模式,但您仍然无法更新绑定到表单上复选框的字段。
以这种方式使用存储过程可能具有挑战性,我建议您正在调用的存储过程允许通过独立测试进行更新。
1.请尝试使用.Clone方法创建原始记录集的副本,而不要手动复制架构。
1.验证窗体上的checkbox控件是否正确绑定到记录集字段并允许更新。
1.请考虑使用不同的游标类型(如adOpenKeyset),以便为更新数据提供更大的灵活性。
希望会有帮助!