Envoyé par jimbolion Rc, oui tu as encore raison enfin, j'arrive à suivre, merci pour ce blog très bien fait !!! RC
Rc, oui tu as encore raison
JimboLion, merci pour ton suivi, mais je pense que je t'ai perdu en route avec toutes mes remarques... si j'ai bien suivi nos différents échanges, il me semble que tu as enlevé les Code : Sélectionner tout - Visualiser dans une fenêtre à part "'" & devant le nom et le prénom et que ca ne fonctionnera pas ? enfin le Code : Sélectionner tout - Visualiser dans une fenêtre à part & devant la date semble superflu comme tu semblait l'approuver dans nos derniers échanges le code finale devrait être le suivant: Code : Sélectionner tout - Visualiser dans une fenêtre à part 123456789R_Sql = "INSERT INTO [T_Eleves] " & _ "(nomEleve, prenom, dateNais, moyenne, Redoublant) " & _ " VALUES (" & _ "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ "'" & Protected_Quote(Nz(Me.T_prenom, "")) & "', " & _ Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _ VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ Nz(Me.T_Redoublant, "") & _ ")" est ce ton dernier mot JimBo ? RC
"'" &
&
R_Sql = "INSERT INTO [T_Eleves] " & _ "(nomEleve, prenom, dateNais, moyenne, Redoublant) " & _ " VALUES (" & _ "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ "'" & Protected_Quote(Nz(Me.T_prenom, "")) & "', " & _ Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _ VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ Nz(Me.T_Redoublant, "") & _ ")"
Rc, oui encore bien vu ! Jimbolion
JimboLion, Bonjour merci pour la prise en compte de mes remarques qui m'aident à mieux comprendre la reprise du code SQL en VBA. Point clé: je note que l'utilisation de l'espace après la virgule est question de mise en forme et facilite le débugage... Ensuite, pour l'insertion de la date, tu confirmes qu'on peut mettre directement: Code : Sélectionner tout - Visualiser dans une fenêtre à part & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _ sans les "" avant ... Après relecture, il me semble même que le & est superflu...puisqu'il se trouve sur la ligne précédente... ce qui donnerai : Code : Sélectionner tout - Visualiser dans une fenêtre à part Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _ Siinon, dernier point, j'avais dans mon post précédent, demandé si cette remarque n'était pas pertinente aussi pour les 2 lignes suivantes: Code : Sélectionner tout - Visualiser dans une fenêtre à part 1234 "" & VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ "" & Nz(Me.T_Redoublant, "") & _ ")" du coup, qu'on pourrait écrire comme suit: Code : Sélectionner tout - Visualiser dans une fenêtre à part 1234 VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ Nz(Me.T_Redoublant, "") & _ ")" à te lire, et Merci Sensei ! RC
& Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _
Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & ", " & _
"" & VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ "" & Nz(Me.T_Redoublant, "") & _ ")"
VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ Nz(Me.T_Redoublant, "") & _ ")"
Rc, oui quelques remarques judicieuses : il faut lire effectivement Code : Sélectionner tout - Visualiser dans une fenêtre à part Protected_Quote(Nz(Me.T_prenom, "")) pour cette partie, l'espace ne revêt que peu d'importance puisque le séparateur , est présent (question de visibilité en mode débogage) Code : Sélectionner tout - Visualiser dans une fenêtre à part "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ pour cette partie : Code : Sélectionner tout - Visualiser dans une fenêtre à part "" & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _ Le double quotes n'a effectivement aucun intérêt puisque cela signifie chaîne vide, bien vu Je vais donc corriger ces quelques anomalies dans le billet initial. Amicalement JM
Protected_Quote(Nz(Me.T_prenom, ""))
"'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _
"" & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _
JimboLion, Bonjour ! Je découvre avec plaisir ce petit tutoriel, dont j'ai modestement contribué à te le faire écrire pour m'aider sur le droit chemin du VBA intégrant du SQL ! Donc Merci !!! Je retiens donc : Un renvoi à la ligne est toutefois réalisable à l'aide de la notation: _ Il est sage d'encadrer les symboles (&, :, etc.) par au-moins un espace. Toutes les valeurs de type texte doivent être encadrés par des quotes (simples ou doubles) Toutes les valeurs de type date doivent être encadrés par des #. Du coup, si je reprends le code final d'insertion: Code : Sélectionner tout - Visualiser dans une fenêtre à part 123456789101112131415161718192021222324252627Private Sub B_Save_Click() On Error GoTo Err_Commande Dim R_Sql As String ' If Not IsDate(Me.T_DateN) Then MsgBox "La date de Naissance est obligatoire", vbCritical, "Erreur Saisie" Me.T_DateN.SetFocus Exit Sub End If ' R_Sql = "INSERT INTO [T_Eleves] " & _ "(nomEleve, prenom, dateNais, moyenne, Redoublant) " & _ " VALUES (" & _ "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ "'" & Protected_Quote(Nz(Me.T_prenom, 0)) & "'," & _ "" & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _ "" & VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ "" & Nz(Me.T_Redoublant, "") & "" & _ ")" ' CurrentDb.Execute R_Sql, dbFailOnError ' Exit Sub Err_Commande: MsgBox Err.Description End Sub Si je traduits en français, on veut donc insérer les 5 valeurs des champs dans la table T_Eleves, un contrôle sur la date de naissance. Questions "détails": Pourquoi pour le nom, tu précises "" et pour le prénom 0 ? Code : Sélectionner tout - Visualiser dans une fenêtre à part 12Protected_Quote(Nz(Me.T_nom, "") Protected_Quote(Nz(Me.T_prenom, 0)) Est ce que ca veut dire que l'on peut omettre le prénom, mais auquel cas il faudrait mettre un contrôle sur le nom avant l'insertion ? ( je comprends bien que le code n'est pas complet, mais c'est juste pour suivre....) Espaces or not espaces: C'est encore une remarque à la cxx, mais tant qu'à comprendre, j'en profite: Sur l'insertion du nom tu écris: Code : Sélectionner tout - Visualiser dans une fenêtre à part "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ avec Code : Sélectionner tout - Visualiser dans une fenêtre à part & "', " et pour le prénom: Code : Sélectionner tout - Visualiser dans une fenêtre à part "'" & Protected_Quote(Nz(Me.T_prenom, 0)) & "'," & _ avec Code : Sélectionner tout - Visualiser dans une fenêtre à part & "'," sans espace après la , je suppose que la norme serait d'écrire à chaque fois Code : Sélectionner tout - Visualiser dans une fenêtre à part & "', " ? Insertion date, pourquoi mettre double cotes devant alors qu'on est pas sur texte ? Code : Sélectionner tout - Visualiser dans une fenêtre à part "" & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _ A la fin de la ligne précédente, on a bien Code : Sélectionner tout - Visualiser dans une fenêtre à part & "', " qui si je suis bien, délimite la notion du prénom dans le code: Code : Sélectionner tout - Visualiser dans une fenêtre à part INSERT INTO [T_Eleves] (nomEleve, prenom, dateNais, moyenne, Redoublant) VALUES ('D''ARCHAMBAULT', 'Martin',#09-09-1987#,14, 0) du coup, pourquoi ne pas écrire: Code : Sélectionner tout - Visualiser dans une fenêtre à part & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _ ? Cette remarque vaut pour les 2 lignes suivantes (Moyenne et Redoublant)... Enfin, et j'en termine, pourquoi mettre le double cotes à la fin avant la dernière partenthèse ? Code : Sélectionner tout - Visualiser dans une fenêtre à part 12"" & Nz(Me.T_Redoublant, "") & "" & _ ")" Ce qui me trouble (et je me trouble pour un rien), c'est qu'en VBA il me semble ..., "" = rien/nada, même pas un espace.., donc je vois pas l’intérêt, dans ces lignes de codes.... Voilà voilà, merci pour ton retour éclairant Dis toi que si j'arrive à comprendre... beaucoup, si ce n'est tout le monde y arrivera RC
Private Sub B_Save_Click() On Error GoTo Err_Commande Dim R_Sql As String ' If Not IsDate(Me.T_DateN) Then MsgBox "La date de Naissance est obligatoire", vbCritical, "Erreur Saisie" Me.T_DateN.SetFocus Exit Sub End If ' R_Sql = "INSERT INTO [T_Eleves] " & _ "(nomEleve, prenom, dateNais, moyenne, Redoublant) " & _ " VALUES (" & _ "'" & Protected_Quote(Nz(Me.T_nom, "")) & "', " & _ "'" & Protected_Quote(Nz(Me.T_prenom, 0)) & "'," & _ "" & Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _ "" & VirgToPoint(Nz(Me.T_Moyenne, 0)) & ", " & _ "" & Nz(Me.T_Redoublant, "") & "" & _ ")" ' CurrentDb.Execute R_Sql, dbFailOnError ' Exit Sub Err_Commande: MsgBox Err.Description End Sub
Protected_Quote(Nz(Me.T_nom, "") Protected_Quote(Nz(Me.T_prenom, 0))
& "', "
"'" & Protected_Quote(Nz(Me.T_prenom, 0)) & "'," & _
& "',"
INSERT INTO [T_Eleves] (nomEleve, prenom, dateNais, moyenne, Redoublant) VALUES ('D''ARCHAMBAULT', 'Martin',#09-09-1987#,14, 0)
& Convert_DateUS_Short(Nz(Me.T_DateN, Date)) & "," & _
"" & Nz(Me.T_Redoublant, "") & "" & _ ")"
Envoyé par milkoseck Salut jimbolion, Merci pour cette belle contribution :cool : Cordialement, Malick Merci Malick
Salut jimbolion, Merci pour cette belle contribution :cool : Cordialement, Malick