{Access} Appeler une requête SQL en VBA
Résolu/Fermé
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
-
23 févr. 2010 à 15:43
RoZyk Messages postés 78 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 16 mars 2011 - 24 févr. 2010 à 14:37
RoZyk Messages postés 78 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 16 mars 2011 - 24 févr. 2010 à 14:37
A voir également:
- {Access} Appeler une requête SQL en VBA
- Appeler en privé - Guide
- Requête sql pix - Forum Python
- Appeler en france du canada - Forum Mobile
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- On peut m'appeler mais je ne peux pas appeler ✓ - Forum telephonie fixe
12 réponses
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
23 févr. 2010 à 15:49
23 févr. 2010 à 15:49
pour les select (cette méthode nécessite d'avoir activé la référence "microsoft DAO x.xx object library" ou "microsoft dao 2.5/3.5 compatibility library", enfin une référence DAO):
dim db as DAO.database
dim rst as DAO.recordset
dim req as string
req="ta requete qui commence par select"
set db = currentdb
set rst=db.openrecordset(req)
champ1=rst.fields(0)
pour toutes les autres requètes ne renvoyant pas de résultat:
docmd.runsql "tarequete"
dim db as DAO.database
dim rst as DAO.recordset
dim req as string
req="ta requete qui commence par select"
set db = currentdb
set rst=db.openrecordset(req)
champ1=rst.fields(0)
pour toutes les autres requètes ne renvoyant pas de résultat:
docmd.runsql "tarequete"
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
23 févr. 2010 à 16:01
23 févr. 2010 à 16:01
Merci pour ta réponse ultra rapide, mais je n'y arrive pas, peux tu jeter un coup d'oeil a mon code?NouveauSolde et JourSuivant sont des requètes SQL, avec Jour et Banque les paramètres
Encore merci!
Sub CalculSolde() 'Declaration de mes variables Dim db As DAO.Database Dim rst As DAO.Recordset Dim Solde As String Dim Jour As Date 'Programme Solde = NouveauSolde(Jour, Banque) Jour = JourSuivant(Jour, Banque) While (Jour Is Not Null) Solde = NouveauSolde(Jour, Banque) Jour = JourSuivant(Jour, Banque) Wend End Sub
Encore merci!
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 10:07
24 févr. 2010 à 10:07
Arf!! Après quelques modifications mon code donne ça :
Mais mtn j'ai une erreur d'execution 13 : Incompatibilité de type, sur la ligne
Un peu d'aide SVP?
Sub Main() 'Declaration de mes variables Dim db As DAO.Database Dim rst As DAO.Recordset Dim NouveauSolde As Variant Dim JourSuivant As Variant Dim idSolde As Variant Dim Solde As Variant Dim Jour As Variant Dim Banque As Integer NouveauSolde = "SELECT TOP 1 VersementTempo.Credit-VersementTempo.Debit+SoldePrecedent.SoldePrecedent AS NouveauSolde, VersementTempo.Date AS [Date], VersementTempo.idBanque AS idBanque FROM SoldePrecedent, VersementTempo WHERE (((VersementTempo.Date)=[DateDuJour]));" JourSuivant = "SELECT TOP 1 VersementTempo.Date, VersementTempo.idBanque FROM VersementTempo WHERE (((VersementTempo.Date) > [DateDuJour]) And ((VersementTempo.idBanque) = [N°Banque])) ORDER BY VersementTempo.Date;" Set db = CurrentDb 'Initialisation des variables Solde = 0 Jour = Now() Banque = 1 idSolde = 5 'Programme Solde = NouveauSolde(Jour, Banque) Jour = JourSuivant(Jour, Banque) While (idSolde Is Not Null) Solde = NouveauSolde(Jour, Banque) Jour = JourSuivant(Jour, Banque) idSolde = idSolde - 1 Wend Set rst = db.OpenRecordset(Solde, Jour) champ1 = rst.Fields(0) End Sub
Mais mtn j'ai une erreur d'execution 13 : Incompatibilité de type, sur la ligne
Solde = NouveauSolde(Jour, Banque)
Un peu d'aide SVP?
blux
Messages postés
26531
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
16 décembre 2024
3 317
24 févr. 2010 à 10:34
24 févr. 2010 à 10:34
Salut,
que fait ta fonction NouveauSolde ?
De plus, il me semble que le test d'une valeur null ne se fait pas avec is not null, mais qu'il existe une fonction nommée isnull(valeur_à_tester), dans ton cas, ce serait while not isnull(idsolde)...
que fait ta fonction NouveauSolde ?
De plus, il me semble que le test d'une valeur null ne se fait pas avec is not null, mais qu'il existe une fonction nommée isnull(valeur_à_tester), dans ton cas, ce serait while not isnull(idsolde)...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 10:43
24 févr. 2010 à 10:43
Ma fonction NouveauSolde me calcul le solde pour un jour et une banque donnée, c'est une requète SQL en fait que je veux appeler dans mon VBA, je ne sais pas si je l'ai fait correctement....
Donc pour simplifier NouveauSolde avec en paramètre une date et une banque me renvoie un Solde
Donc pour simplifier NouveauSolde avec en paramètre une date et une banque me renvoie un Solde
blux
Messages postés
26531
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
16 décembre 2024
3 317
24 févr. 2010 à 10:45
24 févr. 2010 à 10:45
Et les variables utilisées dans cette fonction, comment sont-elles décrites ? Peux-tu coller le texte de la fonction ?
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 10:53
24 févr. 2010 à 10:53
Ce ne sont pas des fonctions, ce sont des requêtes SQL que j'ai créé, elle fonctionne très bien quand je les appelle sous Access, pour une date donnée j'ai le solde du jour, maintenant je voudrais l'automatiser afin que tous les soldes soient calculer.
Donc ma requête NouveauSolde c'est:
DateDuJour est mon paramètre ou ma variable (je n'ai pas mis la banque pour simplifier...)
Je ne sais pas si je suis claire...
Merci pour ton aide en tout cas
Donc ma requête NouveauSolde c'est:
SELECT TOP 1 VersementTempo.Credit-VersementTempo.Debit+SoldePrecedent.SoldePrecedent AS NouveauSolde, VersementTempo.Date AS [Date], VersementTempo.idBanque AS idBanque FROM SoldePrecedent, VersementTempo WHERE (((VersementTempo.Date)=[DateDuJour]));
DateDuJour est mon paramètre ou ma variable (je n'ai pas mis la banque pour simplifier...)
Je ne sais pas si je suis claire...
Merci pour ton aide en tout cas
blux
Messages postés
26531
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
16 décembre 2024
3 317
24 févr. 2010 à 10:59
24 févr. 2010 à 10:59
Une requête ne s'appelle pas comme une fonction...
Si j'ai bien compris tu souhaites lancer une requête et en récupérer le résultat en VBA ?
Si j'ai bien compris tu souhaites lancer une requête et en récupérer le résultat en VBA ?
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 11:09
24 févr. 2010 à 11:09
Ben en fait je souhaites utilisé mes requêtes SQL dans mon code VBA afin d'automatiser mon calcul:
Imaginons:
Solde initial a 5000
J'ai une commande pour le 01/03/2010 de 1000
NouveauSolde du 01/03/2010 = 6000
Je dépense 2000 le 04/03/2010
NouveauSolde du 04/03/2010 = 4000
Maintenant imaginons que j'ai une commande pour le 02/03/2010, il faut que je calcule le solde du 02/03/2010, puis le solde du 04/03/2010 et tous les soldes des jours suivants, et faire NouveauSolde pour chaque jour serait trop fastidieux, c'est pourquoi je voudrais faire un programme VBA qui le fait de lui même.
Pour se faire j'ai ma requête NouveauSolde, et j'ai créé une requête JourSuivant qui me renvoie le jour suivant ou il y a eu une transaction afin de la passé en paramètre pour calculer le NouveauSolde du JourSuivant...
C'est peut être plus clair comme ça? J'avoues que mes explications n'étaient pas géniales...
Imaginons:
Solde initial a 5000
J'ai une commande pour le 01/03/2010 de 1000
NouveauSolde du 01/03/2010 = 6000
Je dépense 2000 le 04/03/2010
NouveauSolde du 04/03/2010 = 4000
Maintenant imaginons que j'ai une commande pour le 02/03/2010, il faut que je calcule le solde du 02/03/2010, puis le solde du 04/03/2010 et tous les soldes des jours suivants, et faire NouveauSolde pour chaque jour serait trop fastidieux, c'est pourquoi je voudrais faire un programme VBA qui le fait de lui même.
Pour se faire j'ai ma requête NouveauSolde, et j'ai créé une requête JourSuivant qui me renvoie le jour suivant ou il y a eu une transaction afin de la passé en paramètre pour calculer le NouveauSolde du JourSuivant...
C'est peut être plus clair comme ça? J'avoues que mes explications n'étaient pas géniales...
blux
Messages postés
26531
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
16 décembre 2024
3 317
24 févr. 2010 à 13:09
24 févr. 2010 à 13:09
Donc, pour une requête de ce type, il faudra créer un recordset, la requête préenregistrée ne servira à rien.
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 13:31
24 févr. 2010 à 13:31
J'ai déjà créé un Recordset, mais ma syntaxe ne doit pas être correcte?? Peux tu me donnais un exemple de Recordset avec quelques explications?
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 13:50
24 févr. 2010 à 13:50
J'ai trouvé une solution avec une simple requête SQL en fait!! Mais je veux bien qu'on me montre comment me servir du RecordSet quand même!!!
Merci beaucoup pour votre aide!
Merci beaucoup pour votre aide!
blux
Messages postés
26531
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
16 décembre 2024
3 317
24 févr. 2010 à 14:35
24 févr. 2010 à 14:35
Pour lire le champ couleur d'une table nommée t_couleur avec une condition where :
A adapter à ton cas...
Dim Rs As DAO.Recordset Dim StrSql As String Dim Toto As String Toto = "a" StrSql = "SELECT TOP 1 Couleur FROM T_couleurs WHERE " StrSql = StrSql & "cle = '" & Toto & "';" Set Rs = CurrentDb.OpenRecordset(StrSql) Rs.MoveFirst While Not Rs.EOF MsgBox Rs!couleur Rs.MoveNext Wend
A adapter à ton cas...
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
24 févr. 2010 à 14:37
24 févr. 2010 à 14:37
OK Merci beaucoup, pour toutes ces informations, c'était donc l'appel de ma requête SQL qui n'était pas correct apparement!!
Encore merci pour ta patience!
Encore merci pour ta patience!