Bonjour
Je suis toujours empêtré dans mon pb de paramètres SQL en VBA.
J'ai rempli un recordset avec succès à partir de cette requête mais je dois
maintenant ouvrir un formulaire qui a pour source cette requête construite
en VBA. Le problème il me demande encore les paramètres et je ne comprends
pas comment les indiquer dans mon code...?
Merci pour votre aide...
Le code: que dois je ajouter à la dernière ligne docmd.openform...?
Dim Rqdf As QueryDef
Set Rqdf = bds.CreateQueryDef("produits_req_vba")
Rqdf.SQL = _
"SELECT stock.num_stock, produits.nom_produit, stock.numero_lot,
stock.numero_serie " & _
"FROM produits INNER JOIN stock ON produits.num_produit = stock.num_produit
" & _
"WHERE ([numero_lot] = '" & VarLot & "' AND [numero_serie] = '" & VarSerie &
"') " & _
"OR ([numero_serie] = '" & VarSerie & "' AND VarLot Is Null) " & _
"OR ([numero_lot] = '" & VarLot & "' AND VarSerie Is Null) " & _
"OR (VarLot Is Null AND VarSerie Is Null);"
'définition des deux paramètres SQL
Rqdf.Parameters("VarLot") = VarLot
Rqdf.Parameters("VarSerie") = VarSerie
Set rst = Rqdf.OpenRecordset()
Do Until rst.EOF
rst.MoveNext
Loop
Dim NbProduit As Long
NbProduit = rst.RecordCount
DoCmd.OpenForm "nom_produit_2"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric
Bonsoir
Je ne comprends pas ce que tu veux obtenir avec ta requête.
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot
C'est ca ?
Eric
"Eric Brue" écrivait news::
Bonjour Je suis toujours empêtré dans mon pb de paramètres SQL en VBA. J'ai rempli un recordset avec succès à partir de cette requête mais je dois maintenant ouvrir un formulaire qui a pour source cette requête construite en VBA. Le problème il me demande encore les paramètres et je ne comprends pas comment les indiquer dans mon code...? Merci pour votre aide... Le code: que dois je ajouter à la dernière ligne docmd.openform...?
Dim Rqdf As QueryDef Set Rqdf = bds.CreateQueryDef("produits_req_vba") Rqdf.SQL = _ "SELECT stock.num_stock, produits.nom_produit, stock.numero_lot, stock.numero_serie " & _ "FROM produits INNER JOIN stock ON produits.num_produit > stock.num_produit " & _ "WHERE ([numero_lot] = '" & VarLot & "' AND [numero_serie] = '" & VarSerie & "') " & _ "OR ([numero_serie] = '" & VarSerie & "' AND VarLot Is Null) " & _ "OR ([numero_lot] = '" & VarLot & "' AND VarSerie Is Null) " & _ "OR (VarLot Is Null AND VarSerie Is Null);" 'définition des deux paramètres SQL Rqdf.Parameters("VarLot") = VarLot Rqdf.Parameters("VarSerie") = VarSerie
Set rst = Rqdf.OpenRecordset() Do Until rst.EOF rst.MoveNext Loop
Dim NbProduit As Long NbProduit = rst.RecordCount DoCmd.OpenForm "nom_produit_2"
Bonsoir
Je ne comprends pas ce que tu veux obtenir avec ta requête.
Tu veux les no de stocks pour lesquels
N° Serie= VarSerie Et N° Lot = VarLot
ou
N° Serie= VarSerie
ou
N° Lot = VarLot
Bonjour
Je suis toujours empêtré dans mon pb de paramètres SQL en VBA.
J'ai rempli un recordset avec succès à partir de cette requête mais je
dois maintenant ouvrir un formulaire qui a pour source cette requête
construite en VBA. Le problème il me demande encore les paramètres et
je ne comprends pas comment les indiquer dans mon code...?
Merci pour votre aide...
Le code: que dois je ajouter à la dernière ligne docmd.openform...?
Dim Rqdf As QueryDef
Set Rqdf = bds.CreateQueryDef("produits_req_vba")
Rqdf.SQL = _
"SELECT stock.num_stock, produits.nom_produit, stock.numero_lot,
stock.numero_serie " & _
"FROM produits INNER JOIN stock ON produits.num_produit > stock.num_produit " & _
"WHERE ([numero_lot] = '" & VarLot & "' AND [numero_serie] = '" &
VarSerie & "') " & _
"OR ([numero_serie] = '" & VarSerie & "' AND VarLot Is Null) " & _
"OR ([numero_lot] = '" & VarLot & "' AND VarSerie Is Null) " & _
"OR (VarLot Is Null AND VarSerie Is Null);"
'définition des deux paramètres SQL
Rqdf.Parameters("VarLot") = VarLot
Rqdf.Parameters("VarSerie") = VarSerie
Set rst = Rqdf.OpenRecordset()
Do Until rst.EOF
rst.MoveNext
Loop
Dim NbProduit As Long
NbProduit = rst.RecordCount
DoCmd.OpenForm "nom_produit_2"
Je ne comprends pas ce que tu veux obtenir avec ta requête.
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot
C'est ca ?
Eric
"Eric Brue" écrivait news::
Bonjour Je suis toujours empêtré dans mon pb de paramètres SQL en VBA. J'ai rempli un recordset avec succès à partir de cette requête mais je dois maintenant ouvrir un formulaire qui a pour source cette requête construite en VBA. Le problème il me demande encore les paramètres et je ne comprends pas comment les indiquer dans mon code...? Merci pour votre aide... Le code: que dois je ajouter à la dernière ligne docmd.openform...?
Dim Rqdf As QueryDef Set Rqdf = bds.CreateQueryDef("produits_req_vba") Rqdf.SQL = _ "SELECT stock.num_stock, produits.nom_produit, stock.numero_lot, stock.numero_serie " & _ "FROM produits INNER JOIN stock ON produits.num_produit > stock.num_produit " & _ "WHERE ([numero_lot] = '" & VarLot & "' AND [numero_serie] = '" & VarSerie & "') " & _ "OR ([numero_serie] = '" & VarSerie & "' AND VarLot Is Null) " & _ "OR ([numero_lot] = '" & VarLot & "' AND VarSerie Is Null) " & _ "OR (VarLot Is Null AND VarSerie Is Null);" 'définition des deux paramètres SQL Rqdf.Parameters("VarLot") = VarLot Rqdf.Parameters("VarSerie") = VarSerie
Set rst = Rqdf.OpenRecordset() Do Until rst.EOF rst.MoveNext Loop
Dim NbProduit As Long NbProduit = rst.RecordCount DoCmd.OpenForm "nom_produit_2"
Eric Brue
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot C'est ca ?
C'est: no stock pour N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie (si VarLot est Nul) ou N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les paramètres. Je l'utilise pour compter les enregistrements du recordset et c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire qui me propose le résultat de cette requête. Donc je mets docmd.openform "mon form" à la suite du rst.count et là il me redemande les paramètres mais je ne sais pas comment les indiquer pour l'ouverture du formulaire... Merci
Tu veux les no de stocks pour lesquels
N° Serie= VarSerie Et N° Lot = VarLot
ou
N° Serie= VarSerie
ou
N° Lot = VarLot
C'est ca ?
C'est: no stock pour
N° Serie= VarSerie Et N° Lot = VarLot
ou
N° Serie= VarSerie (si VarLot est Nul)
ou
N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les
paramètres. Je l'utilise pour compter les enregistrements du recordset et
c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire qui me
propose le résultat de cette requête. Donc je mets docmd.openform "mon form"
à la suite du rst.count et là il me redemande les paramètres mais je ne sais
pas comment les indiquer pour l'ouverture du formulaire...
Merci
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot C'est ca ?
C'est: no stock pour N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie (si VarLot est Nul) ou N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les paramètres. Je l'utilise pour compter les enregistrements du recordset et c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire qui me propose le résultat de cette requête. Donc je mets docmd.openform "mon form" à la suite du rst.count et là il me redemande les paramètres mais je ne sais pas comment les indiquer pour l'ouverture du formulaire... Merci
Eric
Re,
Une solution parmi d'autres serait de demander les valeurs du n° de serie et du n° de lot à l'ouverture d'un formulaire indépendant(pas de source) qui n'aurait qu'un controle nommé NbProduit(label ou zone de texte, en principe un label pour l'affichage). Ce formulaire est appelé par la méthode de ton choix (un bouton par exemple).
En partie déclarative du module du formulaire, tu declares tes variables: Dim Varlot, VarSerie ' je ne les ai pas typées
et sur l'évènement Ouverture du formulaire tu mets:
Private Sub Form_Open(Cancel As Integer) Varlot = InputBox("N° de lot") Varserie = InputBox("N° de serie") If Varlot = "" Then Varlot = Null '-- Pas utile, ca passe si non rempli If Varserie = "" Then Varserie = Null '-- Pas utile, ca passe si non rempli Dim Rqdf As DAO.QueryDef, bds As DAO.Database Set bds = CurrentDb Set Rqdf = bds.CreateQueryDef("produits_req_vba") sql = _ "SELECT stock.num_stock, produits.nom_produit, stock.numero_lot, stock.numero_serie " & _ "FROM produits INNER JOIN stock ON produits.num_produit = stock.num_produit " & _ "WHERE ([numero_lot] = '" & Varlot & "' AND [numero_serie] = '" & Varserie & "') " & _ "OR ([numero_serie] = '" & Varserie & "' AND Varlot Is Null) " & _ "OR ([numero_lot] = '" & Varlot & "' AND Varserie Is Null) " & _ "OR ( Varlot Is Null AND Varserie Is Null);" 'définition des deux paramètres SQL Rqdf.sql = sql Rqdf.Parameters("VarLot") = Varlot Rqdf.Parameters("VarSerie") = Varserie
Set rst = Rqdf.OpenRecordset() rst.MoveLast '-- plus rapide 'Do Until rst.EOF ' rst.MoveNext 'Loop
'Dim NbProduit As Long -- Inutile 'NbProduit = rst.RecordCount -- Inutile Me.NbProduit.Caption = rst.RecordCount ' si label 'Me.NbProduit = rst.RecordCount ' si zone de texte bds.QueryDefs.Delete "produits_req_vba" ' nécessaire
End Sub
Dans tous les cas, tu ne saisiras qu'une seule fois les valeurs de VarSerie et de Varlot.
Rem : Si tu annules(Bouton Annuler) lors des inputbox, ca te renverra quand même quelque chose, la derniere condition de ton where.(les 2 variables sont Null même si tu ne mets pas les 2 If du début.
A+ Eric
"Eric Brue" écrivait news:OgLo$:
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot C'est ca ?
C'est: no stock pour N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie (si VarLot est Nul) ou N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les paramètres. Je l'utilise pour compter les enregistrements du recordset et c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire qui me propose le résultat de cette requête. Donc je mets docmd.openform "mon form" à la suite du rst.count et là il me redemande les paramètres mais je ne sais pas comment les indiquer pour l'ouverture du formulaire... Merci
Re,
Une solution parmi d'autres serait de demander les valeurs du n° de serie
et du n° de lot à l'ouverture d'un formulaire indépendant(pas de source)
qui n'aurait qu'un controle nommé NbProduit(label ou zone de texte, en
principe un label pour l'affichage). Ce formulaire est appelé par la
méthode de ton choix (un bouton par exemple).
En partie déclarative du module du formulaire, tu declares tes variables:
Dim Varlot, VarSerie ' je ne les ai pas typées
et sur l'évènement Ouverture du formulaire tu mets:
Private Sub Form_Open(Cancel As Integer)
Varlot = InputBox("N° de lot")
Varserie = InputBox("N° de serie")
If Varlot = "" Then Varlot = Null '-- Pas utile, ca passe si non
rempli
If Varserie = "" Then Varserie = Null '-- Pas utile, ca passe si non
rempli
Dim Rqdf As DAO.QueryDef, bds As DAO.Database
Set bds = CurrentDb
Set Rqdf = bds.CreateQueryDef("produits_req_vba")
sql = _
"SELECT stock.num_stock, produits.nom_produit, stock.numero_lot,
stock.numero_serie " & _
"FROM produits INNER JOIN stock ON produits.num_produit =
stock.num_produit " & _
"WHERE ([numero_lot] = '" & Varlot & "' AND [numero_serie] = '" &
Varserie & "') " & _
"OR ([numero_serie] = '" & Varserie & "' AND Varlot Is Null) " & _
"OR ([numero_lot] = '" & Varlot & "' AND Varserie Is Null) " & _
"OR ( Varlot Is Null AND Varserie Is Null);"
'définition des deux paramètres SQL
Rqdf.sql = sql
Rqdf.Parameters("VarLot") = Varlot
Rqdf.Parameters("VarSerie") = Varserie
Set rst = Rqdf.OpenRecordset()
rst.MoveLast '-- plus rapide
'Do Until rst.EOF
' rst.MoveNext
'Loop
'Dim NbProduit As Long -- Inutile
'NbProduit = rst.RecordCount -- Inutile
Me.NbProduit.Caption = rst.RecordCount ' si label
'Me.NbProduit = rst.RecordCount ' si zone de texte
bds.QueryDefs.Delete "produits_req_vba" ' nécessaire
End Sub
Dans tous les cas, tu ne saisiras qu'une seule fois les valeurs de
VarSerie et de Varlot.
Rem : Si tu annules(Bouton Annuler) lors des inputbox, ca te renverra
quand même quelque chose, la derniere condition de ton where.(les 2
variables sont Null même si tu ne mets pas les 2 If du début.
Tu veux les no de stocks pour lesquels
N° Serie= VarSerie Et N° Lot = VarLot
ou
N° Serie= VarSerie
ou
N° Lot = VarLot
C'est ca ?
C'est: no stock pour
N° Serie= VarSerie Et N° Lot = VarLot
ou
N° Serie= VarSerie (si VarLot est Nul)
ou
N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les
paramètres. Je l'utilise pour compter les enregistrements du recordset
et c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire
qui me propose le résultat de cette requête. Donc je mets
docmd.openform "mon form" à la suite du rst.count et là il me
redemande les paramètres mais je ne sais pas comment les indiquer pour
l'ouverture du formulaire... Merci
Une solution parmi d'autres serait de demander les valeurs du n° de serie et du n° de lot à l'ouverture d'un formulaire indépendant(pas de source) qui n'aurait qu'un controle nommé NbProduit(label ou zone de texte, en principe un label pour l'affichage). Ce formulaire est appelé par la méthode de ton choix (un bouton par exemple).
En partie déclarative du module du formulaire, tu declares tes variables: Dim Varlot, VarSerie ' je ne les ai pas typées
et sur l'évènement Ouverture du formulaire tu mets:
Private Sub Form_Open(Cancel As Integer) Varlot = InputBox("N° de lot") Varserie = InputBox("N° de serie") If Varlot = "" Then Varlot = Null '-- Pas utile, ca passe si non rempli If Varserie = "" Then Varserie = Null '-- Pas utile, ca passe si non rempli Dim Rqdf As DAO.QueryDef, bds As DAO.Database Set bds = CurrentDb Set Rqdf = bds.CreateQueryDef("produits_req_vba") sql = _ "SELECT stock.num_stock, produits.nom_produit, stock.numero_lot, stock.numero_serie " & _ "FROM produits INNER JOIN stock ON produits.num_produit = stock.num_produit " & _ "WHERE ([numero_lot] = '" & Varlot & "' AND [numero_serie] = '" & Varserie & "') " & _ "OR ([numero_serie] = '" & Varserie & "' AND Varlot Is Null) " & _ "OR ([numero_lot] = '" & Varlot & "' AND Varserie Is Null) " & _ "OR ( Varlot Is Null AND Varserie Is Null);" 'définition des deux paramètres SQL Rqdf.sql = sql Rqdf.Parameters("VarLot") = Varlot Rqdf.Parameters("VarSerie") = Varserie
Set rst = Rqdf.OpenRecordset() rst.MoveLast '-- plus rapide 'Do Until rst.EOF ' rst.MoveNext 'Loop
'Dim NbProduit As Long -- Inutile 'NbProduit = rst.RecordCount -- Inutile Me.NbProduit.Caption = rst.RecordCount ' si label 'Me.NbProduit = rst.RecordCount ' si zone de texte bds.QueryDefs.Delete "produits_req_vba" ' nécessaire
End Sub
Dans tous les cas, tu ne saisiras qu'une seule fois les valeurs de VarSerie et de Varlot.
Rem : Si tu annules(Bouton Annuler) lors des inputbox, ca te renverra quand même quelque chose, la derniere condition de ton where.(les 2 variables sont Null même si tu ne mets pas les 2 If du début.
A+ Eric
"Eric Brue" écrivait news:OgLo$:
Tu veux les no de stocks pour lesquels N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie ou N° Lot = VarLot C'est ca ?
C'est: no stock pour N° Serie= VarSerie Et N° Lot = VarLot ou N° Serie= VarSerie (si VarLot est Nul) ou N° Lot = VarLot (si VarSerie Est Nul)
Mais peu importe car la requête fonctionne bien après ton aide sur les paramètres. Je l'utilise pour compter les enregistrements du recordset et c'est parfait. Mais maintenant je veux aussi ouvrir un formulaire qui me propose le résultat de cette requête. Donc je mets docmd.openform "mon form" à la suite du rst.count et là il me redemande les paramètres mais je ne sais pas comment les indiquer pour l'ouverture du formulaire... Merci
Eric Brue
Merci je vais étudier cette piste. L'intérêt de cette requête paramétrée VBA était d'ouvrir toujours le même formulaire d'affichage du résultat de plusieurs requête basées sur des champs différents proposées par plusieurs formulaires différents. Ceci afin d'alléger l'application. Mais il semble effectivement que l'on ne puisse pas tout faire à partir de VBA en ce qui concerne le SQL. Merci de ton aide Eric
Merci je vais étudier cette piste. L'intérêt de cette requête paramétrée VBA
était d'ouvrir toujours le même formulaire d'affichage du résultat de
plusieurs requête basées sur des champs différents proposées par plusieurs
formulaires différents. Ceci afin d'alléger l'application. Mais il semble
effectivement que l'on ne puisse pas tout faire à partir de VBA en ce qui
concerne le SQL.
Merci de ton aide
Eric
Merci je vais étudier cette piste. L'intérêt de cette requête paramétrée VBA était d'ouvrir toujours le même formulaire d'affichage du résultat de plusieurs requête basées sur des champs différents proposées par plusieurs formulaires différents. Ceci afin d'alléger l'application. Mais il semble effectivement que l'on ne puisse pas tout faire à partir de VBA en ce qui concerne le SQL. Merci de ton aide Eric