Heim > Fragen und Antworten > Hauptteil
Ich versuche, ein Formular mithilfe eines Recordsets einzurichten, das auf einer gespeicherten Prozedur auf einem MySQL-Server basiert. Wenn ich dann das Befehlsobjekt verwende Set Me.Recordset = cmd.execute
, funktioniert es einwandfrei, aber ich muss in der Lage sein, zwei Felder (Tinyint und Varchar) zu aktualisieren, die an das Kontrollkästchen und das Textfeld in meinem Formular gebunden sind. Das funktioniert natürlich nicht.
Angesichts dieses Designproblems habe ich versucht, das Recordset mit der .Open-Methode und der Syntax „CALL procName
('value1', 'value2');“ zu öffnen und dann ein neues getrenntes Recordset aus .Open zu erstellen Methode, und dann werden die Datensätze in einer Schleife ausgeführt und an die neuen RS angehängt. Legen Sie es schließlich wie folgt als Recordset des Formulars fest:
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
Zusätzliche Informationen: NewRecordset-Variablen werden auf Formularebene als privat deklariert. Ich weiß auch, dass es eine schlechte Praxis ist, eine Prozedur so aufzurufen, wie ich es getan habe, aber ich kann mir keinen anderen Weg vorstellen, diese Aufgabe zu erledigen.
Wichtig: Ich kann und möchte keine lokalen Tabellen verwenden. Das wäre die einfache Lösung, würde aber auch nicht mit dem Rest des Codes vereinbar sein. Danke :)
Das Problem ist: Wenn ich vorgehe, was ich erklärt habe, erhalte ich einen #Name-Fehler für die gebundenen Felder, oder sie sind als Recordsets festgelegt und ich kann ihre Werte ändern, aber ich sehe die Anfangswerte nicht.
P粉0434701582023-09-14 00:32:59
据我所了解,您已尝试了各种方法,例如创建一个新的记录集并从原始记录集复制模式,但您仍然无法更新绑定到表单上的复选框字段。
以这种方式使用存储过程可能会有挑战性,我建议您单独测试调用的存储过程是否允许更新。
希望对您有所帮助!