Requete sql dans vb Access

[Fermé]
Signaler
-
 loutre64 -
Bonjour,

Je suis un peu novice dans la programmation vb.

Je cherche a réaliser une requète de vérification dans une table avant d'ajouter un enregistrement.
Sur un formulaire access je remplis des champs (variable texte (string) et entier (integer)).
Quand je click sur le bouton "enregistrer" la requete ce lance. Si elle trouve une réponse (c-a-d une ligne avec les infos saisies), ceci doit empêcher l'enregistrement et inversement.

J'explique mon raisonnement pour que vous puissiez me corriger si déjà je pense mal...

Voilà mon script sur VB Access :

Private Sub EnregistreAnalyse_Click()

Dim Mydb As Database
Dim JeuAnalyse, VerifAnalyse As Recordset
Dim CdSupportAna, CdFraction, CdMethodeAna, CdUnite, CdParametre As String
Dim ResultatAna, PtPrelAnalyse, PrelevAnalyse, repVerif As Integer

'récupération des variables sur le formulaire.
CdSupportAna = Me!CdSupportAna.Value
CdParametre = Me!CdParametre.Value
CdFraction = Me!CdFraction.Value
CdMethodeAna = Me!CdMethodeAna.Value
CdUnite = Me!CdUnite.Value
ResultatAna = Me!ResultatAna.Value
PtPrelAnalyse = Me!PtPrelAnalyse.Value
PrelevAnalyse = Me!PrelevAnalyse.Value

Set Mydb = CurrentDb

sql9 = "SELECT Analyse.ID_Prelev, Analyse.CdParametre, Analyse.ResultatAna, Analyse.CdUnite, Analyse.CdSupport, Analyse.CdFraction FROM Analyse WHERE (((Analyse.ID_Prelev)=" & PrelevAnalyse & ") AND ((Analyse.CdParametre)=" & CdParametre & ") AND ((Analyse.ResultatAna)=" & ResultatAna & ") AND ((Analyse.CdUnite)=" & CdUnite & ") AND ((Analyse.CdSupport)=" & CdSupportAna & ") AND ((Analyse.CdFraction)=" & CdFraction & "));"


' le VB beug ici. Si ma requète contient que des variable "integer" cela fonctionne si je mets des variables "integer" et "string" dans la même requête tout s'arrête ici :

Set VerifAnalyse = Mydb.OpenRecordset(sql9)

Select Case VerifAnalyse.RecordCount

Case Is = 0

Set JeuAnalyse = Mydb.OpenRecordset("Analyse")
JeuAnalyse.MoveLast
JeuAnalyse.AddNew
JeuAnalyse!ID_Prelev = PrelevAnalyse
JeuAnalyse!CdSupport = CdSupportAna
JeuAnalyse!CdParametre = CdParametre
JeuAnalyse!CdFraction = CdFraction
JeuAnalyse!CdMethode = CdMethodeAna
JeuAnalyse!CdUnite = CdUnite
JeuAnalyse!ResultatAna = ResultatAna
JeuAnalyse.Update
JeuAnalyse.MoveLast


'Affiche le bouton annuler
Me!AvanceAna.Visible = True


Case Is <> 0

MsgBox ("Vous ne pouvez pas ajouter cette analyse. " & Chr(13) & " Une analyse pour le même prélèvement, le même parametre et le même résultat existe déjà ")
Exit Sub

End Select
End Sub

5 réponses

Un grand Merci d'avance pour ceux ou celles qui pourront m'aider!
Tout a fait normal que ta requete plante... Elle ne considère tes variables que comme des integers, pour les variables de types string il faut doubler les double quotes...

dim a as string
dim b as integer
dim c as date

sql = "... champ1 = " & b & "... champ2= "" & a & ""... champ3 =#" & c & "#..."

Voilà plus ou moins une méthode valable... à tester!
J'ai essayé mais ne marche pas.
la requête ne me trouve aucun enregistrement alors qu'il existe déjà 1 ligne similaire.

Merci quand même
Merci ! je vais tester dessuite !
Je reviendrai pour dire si cela fonctionne.

Merci bien vraiment
Merci, cela fonctionne parfaitement!

Je ne suis pas expert, et dans l'aide de Access, dur dur de lui faire comprendre ce que l'on veut. Enfin si j'avais mieux chercher j'aurais peut être trouvé.
C'est agréable de savoir que quelqu'un peut nous aider, surtout quand l'on attérit comme moi sur du vb, sans connaître aucun langage de programamtion.

Encore merci et bonne journée

Affaire résolue!

comment on fait pour mettre résolu sur cette discussion?
hum hum...

sa marche poa en fait..
conclusion trop hative ...
quand j'ai appuyé sur le bouton "enregistrer" l'enregistrement s'est bien réalisé.
Mais la requête ne fonctionne plus correctement.
en mettant les double "" comme indiqué par bnb :

sql = ... champ2= "" & a & ""...
le RecordCount me trouve toujours 0 et donc je peux enregistrer en permanence des lignes similaires.

Quel dommage!
je me suis fait avoir tout seul par mon manque d'expérience et des conclusions trop rapide!

Si quelqu'un peut m'aider?

Voici mon nouveau script qui me donne une requête.RecordCount = 0 :

Private Sub EnregistreAnalyse_Click()

Dim Mydb As Database
Dim JeuAnalyse, VerifAnalyse, VerifAnalyse2 As Recordset
Dim CdSupportAna, CdFraction, CdMethodeAna, CdUnite, CdParametre As String
Dim ResultatAna, PtPrelAnalyse, PrelevAnalyse, repVerif, robert As Integer

CdSupportAna = Me!CdSupportAna.Value
CdParametre = Me!CdParametre.Value
CdFraction = Me!CdFraction.Value
CdMethodeAna = Me!CdMethodeAna.Value
CdUnite = Me!CdUnite.Value
ResultatAna = Me!ResultatAna.Value
PtPrelAnalyse = Me!PtPrelAnalyse.Value
PrelevAnalyse = Me!PrelevAnalyse.Value


Set Mydb = CurrentDb


sql9 = "SELECT Analyse.ID_Prelev FROM Analyse WHERE (((Analyse.ID_Prelev)=" & PrelevAnalyse & ") AND ((Analyse.ResultatAna)=" & ResultatAna & ") AND ((Analyse.CdParametre)=""& CdParametre &"") AND ((Analyse.CdUnite)=""& CdUnite &"") AND ((Analyse.CdSupport)=""& CdSupportAna& "") AND ((Analyse.CdFraction)=""& CdFraction &""));"

Set Mydb = CurrentDb
Set VerifAnalyse = Mydb.OpenRecordset(sql9)


'test message box pour voir combien de ligne me trouve la requête
robert = VerifAnalyse.RecordCount
MsgBox robert


Select Case VerifAnalyse.RecordCount
Case Is = 0
Set JeuAnalyse = Mydb.OpenRecordset("Analyse")
JeuAnalyse.MoveLast
JeuAnalyse.AddNew
JeuAnalyse!ID_Prelev = PrelevAnalyse
JeuAnalyse!CdSupport = CdSupportAna
JeuAnalyse!CdParametre = CdParametre
JeuAnalyse!CdFraction = CdFraction
JeuAnalyse!CdMethode = CdMethodeAna
JeuAnalyse!CdUnite = CdUnite
JeuAnalyse!ResultatAna = ResultatAna
JeuAnalyse.Update
JeuAnalyse.MoveLast


'Affiche le bouton annuler et avance
Me!AvanceAna.Visible = True
Me!AnnulerAnalyse.Visible = True


MsgBox "les données ont été enregistrées avec success"

Case Is <> 0
MsgBox ("Vous ne pouvez pas ajouter cette analyse. " & Chr(13) & " Une analyse pour le même prélèvement, le même parametre et le même résultat existe déjà ")
Exit Sub

End Select

End Sub






Merci d'avance !