Aide dans requette RS.Open help please

cs_boss24 Messages postés 19 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 14 juin 2010 - 13 juin 2010 à 18:10
mianiser Messages postés 19 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 4 février 2011 - 4 févr. 2011 à 14:37
salut j'ai cette requette sql
maRequete = 
 "RS.Open "SELECT avoir.SEMESTRE," & _
 "eleve.NUM," & _
 "matiere.COD_MAT," & _
 "avoir.NOTE1" & _
maRequete = maRequete & _
 " FROM matiere INNER JOIN(" & _
 " eleve INNER JOIN avoir ON " & _
 " eleve.NUM =  avoir.NUM) ON " & _
 " matiere.COD_MAT = avoir.COD_MAT " & _
 " Where avoir.NOTE1 = '" & Val(txtNOTE1) & "' " & _
 " And avoir.SEMESTRE= '" & Trim(txtSEMESTRE) & "' " & _
 "  And matiere.COD_MAT='" & Val(txtCOD_MAT) & "' " & _
 " And eleve.NUM='" & Val(txtNUM) & "'", CN " & _
    
   If Not RS.EOF Then " & _
        MsgBox "La Note de la matiere saisit existe déjà.", vbExclamation, "Note ..."

je veux que le msgbox saffiche si je saiser une Note pour le meme eleve et le meme code matiere et le meme semestre

3 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 juin 2010 à 19:54
Faudrait peut-être que tu fasses la distinction entre du VB et du SQL et que tu adresses correctement les objets de ton formulaire ! Code non garanti mais probablement fonctionnel :
Dim SQL As String
Dim RS As ADODB.Recordset
SQL ="SELECT avoir.SEMESTRE, eleve.NUM, matiere.COD_MAT, avoir.NOTE1"
SQL SQL & " FROM matiere INNER JOIN(eleve INNER JOIN avoir ON eleve.NUM avoir.NUM) ON "
SQL SQL & " matiere.COD_MAT avoir.COD_MAT "
SQL SQL & " WHERE avoir.NOTE1 '" & Val(txtNOTE1.Text) & "' "
SQL = SQL & "And avoir.SEMESTRE= '" & Trim(txtSEMESTRE.Text) & "' "
SQL SQL & "And matiere.COD_MAT '" & Val(txtCOD_MAT.Text) & "' "
SQL = SQL & "And eleve.NUM='" & Val(txtNUM.Text) & "';"
MsgBox "Le SQL est :" & vbCrlf & vbCrlf & SQL, vbInformation, "Debug"
Set RS = CN.Open(SQL)
If Not RS.EOF Then
MsgBox "La note de la matière saisiE existe déjà !", vbExclamation, "Erreur"
'le reste du code ici
End If
RS.Close : Set RS = Nothing


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 juin 2010 à 19:59
Salut
Apparemment, tu n'as pas compris comment préparer une requète :
La variable maRequete est une String.
Dedans, tu vas mettre ta requète SQL.
Il n'est pas encore question de la lancer, juste la préparer.
Je te conseille de comprendre à quoi srvent les _ en fin de ligne car la fin de ta requète comporte un _ ce qui signifie qu'elle va se continuer ensuite, ce qui n'est pas vrai.
De plus, ajouter des espaces permet de mieux voir la requète :
maRequete = _
 "SELECT avoir.SEMESTRE," & _
 "       eleve.NUM," & _
 "       matiere.COD_MAT," & _
 "       avoir.NOTE1" & _
 "  FROM matiere INNER JOIN(" & _
 "         eleve INNER JOIN avoir ON " & _
 "           eleve.NUM =  avoir.NUM) ON " & _
 "         matiere.COD_MAT = avoir.COD_MAT " & _
 " Where avoir.NOTE1 = '" & Val(txtNOTE1) & "' " & _
 "   And avoir.SEMESTRE= '" & Trim(txtSEMESTRE) & "' " & _
 "   And matiere.COD_MAT='" & Val(txtCOD_MAT) & "' " & _
 "   And eleve.NUM='" & Val(txtNUM) & "'"

Ensuite, il faut bien comprendre aussi que tu ne fais que créer une chaine représentant ta requète.
Dans tes clauses Where, bien que txtNOTE1 représente un chiffre, il doit être inséré comme un texte qui représente des chiffres, rien de plus :
 " Where avoir.NOTE1 = '" & Val(txtNOTE1) & "' " & _
-->
 " Where avoir.NOTE1 =  '" & txtNOTE1.Text & "' " & _

Ensuite, du côté des champs de ta database, de quel type sont déclarés les champs dans ta database ?
Si ton champ est de type :
Texte : il faut encadrer les valeurs par des ' (comme tu l'as fait)
Numérique : pas d'encadrement
Dates : il faut encadrer les valeurs par des #
Exemples :
 ' Pour un champ déclaré en type Texte dans la DB :
 " Where avoir.NOTE1  = '" & txtNOTE1.Text & "' " & _
 ' Pour un champ déclaré en type Numérique dans la DB :
 " Where avoir.NOTE1 = " & txtNOTE1.Text & " " & _
 ' Pour un champ déclaré en type Date dans la DB :
 " Where avoir.NOTE1 = #" & txtNOTE1.Text & "# " & _

Ta syntaxe finale devrait donc ressembler à ça, reste à voir si les ' sont nécessaires ou pas :
maRequete = _
 "SELECT avoir.SEMESTRE," & _
 "       eleve.NUM," & _
 "       matiere.COD_MAT," & _
 "       avoir.NOTE1" & _
 "  FROM matiere INNER JOIN(" & _
 "         eleve INNER JOIN avoir ON " & _
 "           eleve.NUM =  avoir.NUM) ON " & _
 "         matiere.COD_MAT = avoir.COD_MAT " & _
 " Where avoir.NOTE1 = '" & txtNOTE1.Text & "' " & _
 "   And avoir.SEMESTRE = '" & Trim(txtSEMESTRE.Text) & "' " & _
 "   And matiere.COD_MAT = '" & txtCOD_MAT.Text & "' " & _
 "   And eleve.NUM = '" & txtNUM.Text & "'"
RS.Open maRequete, CN
If RS.RecordCount <= 0 Then " & _
        MsgBox "La Note de la matiere saisiE existe déjà.", _
               vbExclamation, "Note ..."
End If

De quel type est l'objet RS ? ADODB ?
C'est une information importante à donner lorsque tu poses une question.
Pense à aller voir des exemples de code qui parlent de RecordSet, de ADODB parmi les codes du site, tu apprendras ainsi.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mianiser Messages postés 19 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 4 février 2011
4 févr. 2011 à 14:37
Tu peut tout simplement comparer cette requette apres enregistrement et t'envoyer un message de ton choix

c'est plus simple
0
Rejoignez-nous