我正在嘗試使用基於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錯誤,或者它們被設定為記錄集,我可以更改它們的值,但我看不到初始值。
據我所了解,您已嘗試了各種方法,例如建立新的記錄集並從原始記錄集複製模式,但您仍然無法更新綁定到表單上的核取方塊欄位。
以這種方式使用預存程序可能會有挑戰性,我建議您單獨測試呼叫的預存程序是否允許更新。
希望對您有幫助!