Probleme de variable vba avec where

dom -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    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
  2. dominique
     
    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
  3. Utilisateur anonyme
     
    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