我正在尝试使用基于MySQL服务器上存储过程的记录集设置一个表单。当我使用命令对象然后Set Me.Recordset = cmd.execute
时,它工作得很好,但我需要能够更新绑定到复选框和文本框的两个字段(tinyint和varchar)在我的表单上。当然,这样不起作用。
鉴于这种设计上的问题,我尝试使用.Open方法和"CALL procName
('value1', 'value2');"语法打开记录集,然后创建一个新的断开的记录集,从.Open方法中填充模式,然后循环遍历记录并追加到新的rs中。最后,将其设置为表单的记录集,如下所示:
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
额外信息:NewRecordset变量在表单级别被声明为私有。我也知道像我这样调用过程是不好的实践,但我想不出其他完成此任务的方法。
重要提示:我不能也不想使用本地表。那将是简单的解决方法,但它也与其余的代码不一致。 谢谢:)
问题是:如果我按照我解释的那样进行,绑定字段会出现#Name错误,或者它们被设置为记录集,我可以更改它们的值,但我看不到初始值。
据我所了解,您已尝试了各种方法,例如创建一个新的记录集并从原始记录集复制模式,但您仍然无法更新绑定到表单上的复选框字段。
以这种方式使用存储过程可能会有挑战性,我建议您单独测试调用的存储过程是否允许更新。
希望对您有所帮助!