Probleme de variable vba avec where

Fermé
dom - 4 août 2004 à 14:40
 Utilisateur anonyme - 7 août 2004 à 22:10
Bonjour

j'essaye de coder une variable dans l instruction select table where champ = variable
si je mets where = le nom en dur c 'est ok il me liste,mais des que je mets une variable where = variable il me jette
je travaille sous vba acces merci

3 réponses

Utilisateur anonyme
4 août 2004 à 15:59
Bonjour,

Voici un exemple fonctionnel dans ma BD de vidéothèque :

' Ici je récupère la valeur que prendra ma variable "CassetteVidéo"
CassetteVidéo = Forms![Formulaire Édition Liste Vidéo].[Liste Cassette]

' Ici, je commence la création de la requête SQL
Chaine = "Select * from [Table Vidéo] where [Cassette] = "

' Ici je finis la création en ajoutant la variable dans la requête
Critere = Chaine & """" & CassetteVidéo & """"

' Les 2 lignes précédente pourrait être codé sur une ligne :
Chaine = "Select * from [Table Vidéo] where [Cassette] = " & """" & CassetteVidéo & """"

' Vous pouvez constater, que la variable est placé entre guillemets.

Il vous suffit, d'adapter et voici comment modifier la requête
par programmation :

If (ChangeRequeteDef("Requête Liste Spécifique Cassette", Critere)) Then
Me.Refresh
End If

'************************
' Fonction a placer dans un module VBA

Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean

Dim Definition As Variant

If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
ChangeRequeteDef = False
Else
Set Definition = CurrentDb.QueryDefs(ChaineRequete)
Definition.SQL = ChaineSQL
Definition.Close
RefreshDatabaseWindow
ChangeRequeteDef = True
End If

End Function

'************************************

Amicalement
Lupin
0
Bonjour et merci cela est un peu complique pour adapter ma proc a ton exemple
merci de voir si tu as le temps la variable est anx

Public Sub seek2()
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
Dim varxx1 As Long
Dim varxx2 As Long
Dim varxx3 As Long
Dim datx As Date
Dim datxx As String

Dim anx As Long
anx = 2004

'open recordset ("SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004" , DbOpenDynaset, dbseechanges,dbPessimistic)

rst.Open "SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004", _
cnn, adOpenDynamic, adLockOptimistic, adCmdText

varxx1 = rst("demande déblocage kg vin sur latte")
varxx2 = rst("nouveau cumul")
varxx3 = varxx2 - varxx1
MsgBox "a1" & varxx1
MsgBox "a2" & varxx2
MsgBox "a3" & varxx3

If rst.EOF Then
MsgBox "Aucun1 bien ne répond aux critères !", vbExclamation

Else
rst("quota restant vin sur latte") = varxx3
rst.Update

Set rst = Nothing
Set db = Nothing
End If
End Sub
0
Utilisateur anonyme
7 août 2004 à 22:10
Bonjour,

J'ai adapté votre code dans ma BD et voici ce que il en résulte :

Public Sub seek2()

' Set cnn = CurrentProject.Connection
' Set rst = New ADODB.Recordset
' Ici, le compilateur me renvoie une erreur, variable non défini
' alors je comprends que tu veux te connecter sur la base en créant
' un "recordset", mais le nombre d'enregistrement est-il variable
' selon la requête spécifié?

Dim Nombre As Integer
Dim DBCourant As Database
Dim Rst As Recordset

Dim varxx1 As Long
Dim varxx2 As Long
Dim varxx3 As Long
Dim datx As Date
Dim datxx As String
Dim Message, Requete As String
Dim anx As Long
Dim cnn as string

Set DBCourant = CurrentDb()
cnn = "V010"
Requete = "SELECT [Table Vidéo].*, [Table Vidéo].Cassette FROM [Table Vidéo] WHERE (([Table Vidéo].Cassette)=" & """" & cnn & """" & ")"
Set Rst = DBCourant.OpenRecordset(Requete)

Nombre = Rst.RecordCount
MsgBox ("Nombre d'enregistrements : " & Nombre)

If (Nombre > 0) Then
anx = 2004
' open recordset ("SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004" , _
' DbOpenDynaset, dbseechanges,dbPessimistic)

' rst.Open "SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004", _
' cnn, adOpenDynamic, adLockOptimistic, adCmdText

' Requete = "SELECT [Table Vidéo].*, [Table Vidéo].Cassette FROM [Table Vidéo] WHERE (([Table Vidéo].Cassette)=" & """" & "v622" & """" & "))"
' varxx1 = rst("demande déblocage kg vin sur latte")
' varxx2 = rst("nouveau cumul")

Rst.MoveLast
Rst.MoveFirst

varxx1 = Rst.Fields("Année")
varxx2 = Year(Now)
varxx3 = varxx2 - varxx1

Message = "a1 = " & varxx1
Message = Message & vbCrLf & "a2 = " & varxx2
Message = Message & vbCrLf & "a3 = " & varxx3

If Not Rst.EOF Then
MsgBox Message
Rst.Fields("Année") = varxx1
Rst.Update
Set Rst = Nothing
Set DBCourant = Nothing
End If
Else
MsgBox "Aucun bien ne répond aux critères !", vbExclamation
End If

End Sub
'


Maintenant, que voulez vous faire avec "cnn" ?

Lupin
0