mysql 存储过程作为可更新窗体记录集

brqmpdu1  于 2023-05-21  发布在  Mysql
关注(0)|答案(1)|浏览(94)

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错误,或者它们被设置为记录集,我可以更改它们的值,但我看不到初始值。

m1m5dgzv

m1m5dgzv1#

据我所知,您已经尝试了各种方法,例如创建新的记录集和从原始记录集复制模式,但您仍然无法更新绑定到表单上复选框的字段。
以这种方式使用存储过程可能具有挑战性,我建议您正在调用的存储过程允许通过独立测试进行更新。
1.请尝试使用.Clone方法创建原始记录集的副本,而不要手动复制架构。
1.验证窗体上的checkbox控件是否正确绑定到记录集字段并允许更新。
1.请考虑使用不同的游标类型(如adOpenKeyset),以便为更新数据提供更大的灵活性。
希望会有帮助!

相关问题