使用存储过程实现可更新的表单记录集
P粉086993788
P粉086993788 2023-09-13 14:06:48
0
1
554

  1. 我正在尝试使用基于MySQL服务器上存储过程的记录集设置一个表单。当我使用命令对象然后Set Me.Recordset = cmd.execute时,它工作得很好,但我需要能够更新绑定到复选框和文本框的两个字段(tinyint和varchar)在我的表单上。当然,这样不起作用。

  2. 鉴于这种设计上的问题,我尝试使用.Open方法和"CALL procName ('value1', 'value2');"语法打开记录集,然后创建一个新的断开的记录集,从.Open方法中填充模式,然后循环遍历记录并追加到新的rs中。最后,将其设置为表单的记录集,如下所示:

  3. 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
  4. 额外信息:NewRecordset变量在表单级别被声明为私有。我也知道像我这样调用过程是不好的实践,但我想不出其他完成此任务的方法。

  5. 重要提示:我不能也不想使用本地表。那将是简单的解决方法,但它也与其余的代码不一致。 谢谢:)

问题是:如果我按照我解释的那样进行,绑定字段会出现#Name错误,或者它们被设置为记录集,我可以更改它们的值,但我看不到初始值。

P粉086993788
P粉086993788

全部回复(1)
P粉043470158

据我所了解,您已尝试了各种方法,例如创建一个新的记录集并从原始记录集复制模式,但您仍然无法更新绑定到表单上的复选框字段。

以这种方式使用存储过程可能会有挑战性,我建议您单独测试调用的存储过程是否允许更新。

  1. 尝试使用 .Clone 方法而不是手动复制模式来创建原始记录集的副本。
  2. 验证表单上的复选框控件是否正确绑定到记录集字段并允许更新。
  3. 考虑使用不同的游标类型,例如 adOpenKeyset,以提供更多更新数据的灵活性。

希望对您有所帮助!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!