搜尋

首頁  >  問答  >  主體

使用預存程序實現可更新的表單記錄集

  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粉086993788P粉086993788455 天前580

全部回覆(1)我來回復

  • P粉043470158

    P粉0434701582023-09-14 00:32:59

    據我所了解,您已嘗試了各種方法,例如建立新的記錄集並從原始記錄集複製模式,但您仍然無法更新綁定到表單上的核取方塊欄位。

    以這種方式使用預存程序可能會有挑戰性,我建議您單獨測試呼叫的預存程序是否允許更新。

    1. 嘗試使用 .Clone 方法而不是手動複製模式來建立原始記錄集的副本。
    2. 驗證表單上的複選框控制項是否正確綁定到記錄集欄位並允許更新。
    3. 考慮使用不同的遊標類型,例如 adOpenKeyset,以提供更多更新資料的靈活性。

    希望對您有幫助!

    回覆
    0
  • 取消回覆