Implementieren eines aktualisierbaren Formulardatensatzes mithilfe gespeicherter Prozeduren
P粉086993788
P粉086993788 2023-09-13 14:06:48
0
1
403

  1. 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.

  2. 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:

  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. 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.

  5. 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粉086993788
P粉086993788

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!