J'essaie de configurer un formulaire utilisant un jeu d'enregistrements basé sur une procédure stockée sur un serveur MySQL. Lorsque j'utilise l'objet de commande, Set Me.Recordset = cmd.execute
cela fonctionne bien, mais je dois pouvoir mettre à jour deux champs (tinyint et varchar) liés à la case à cocher et à la zone de texte de mon formulaire. Bien sûr, cela ne fonctionne pas.
Compte tenu de ce problème de conception, j'ai essayé d'ouvrir le jeu d'enregistrements en utilisant la méthode .Open et la syntaxe "CALL procName
('value1', 'value2');" méthode, puis les enregistrements sont mis en boucle et ajoutés au nouveau rs. Enfin, définissez-le comme jeu d'enregistrements du formulaire comme ceci :
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
Informations supplémentaires : les variables NewRecordset sont déclarées privées au niveau du formulaire. Je sais aussi que c'est une mauvaise pratique d'appeler une procédure comme je l'ai fait, mais je ne vois aucun autre moyen d'accomplir cette tâche.
Important : Je ne peux et ne veux pas utiliser les tables locales. Ce serait la solution la plus simple, mais cela serait également incompatible avec le reste du code. Merci :)
Le problème est le suivant : si je fais ce que j'ai expliqué, j'obtiens une erreur #Name pour les champs liés, ou ils sont définis comme jeux d'enregistrements et je peux modifier leurs valeurs, mais je ne vois pas les valeurs initiales.
D'après ce que j'ai compris, vous avez essayé différentes approches, telles que la création d'un nouveau jeu d'enregistrements et la copie du schéma du jeu d'enregistrements d'origine, mais vous ne parvenez toujours pas à mettre à jour le champ de case à cocher lié au formulaire.
Utiliser des procédures stockées de cette manière peut être difficile, je vous recommande de tester individuellement si la procédure stockée que vous appelez autorise les mises à jour.
J'espère que cela aide !