execution de requete
Dernière réponse : dans Programmation
Bonjour,
Je voulais savoir si il y a une instruction en vb pour access pour executer une requete (genre execute ma_requete)?
Merci d'avance pour vos reponses.
Je voulais savoir si il y a une instruction en vb pour access pour executer une requete (genre execute ma_requete)?
Merci d'avance pour vos reponses.
Autres pages sur : execution requete
Lassé par la pub ? Créez un compte
Personnellement, j'aime bien travailler avec des procédures stockées. J'entends par là que tu enregistres tes requêtes dans ta base de données Access, avec des paramètres, ...
Tu peux ensuite appeler ces requêtes depuis VB en lui donnant des noms de procédures et des paramètres. Concernant les chaînes de connexion aux bases de données, je te conseille ce site --> http://www.connectionstrings.com/.
Je n'ai pas d'URL avec des tutos sur les procédures stockées sous la main, mais tu dois pouvoir trouver ceci avec Google.
Cependant, ce principe a un avantage. Tu peux déplacer où tu veux ta base de données, changer de langage de programmation, tu n'auras jamais besoin de re-écrire tes requêtes car elles suivent la BD.
Bonne journée
Tu peux ensuite appeler ces requêtes depuis VB en lui donnant des noms de procédures et des paramètres. Concernant les chaînes de connexion aux bases de données, je te conseille ce site --> http://www.connectionstrings.com/.
Je n'ai pas d'URL avec des tutos sur les procédures stockées sous la main, mais tu dois pouvoir trouver ceci avec Google.
Cependant, ce principe a un avantage. Tu peux déplacer où tu veux ta base de données, changer de langage de programmation, tu n'auras jamais besoin de re-écrire tes requêtes car elles suivent la BD.
Bonne journée
une requete parametrée est considérée comme une requete action ou une requete selection? car j'ai ecris ca :
Dim toto As Recordset
Dim sauvegarde As Database
Dim titi As TableDef
Set toto = sauvegarde.OpenRecordset(requete)
Set toto = titi.OpenRecordset() ^
|
mon erreur est la il me dit que
la variable objet est non defini.
Dim toto As Recordset
Dim sauvegarde As Database
Dim titi As TableDef
Set toto = sauvegarde.OpenRecordset(requete)
Set toto = titi.OpenRecordset() ^
|
mon erreur est la il me dit que
la variable objet est non defini.
C'est normal : tu as bien déclaré que Sauvegarde est de type DataBase, mais tu ne lui a rien affecté.
RecordSet : tu accède àla liste de tes données.
TableDef : tu accède à la structure de ta table (liste des champs, que tu peux modifier), pas aux données. Tu est à l'étage au dessus.
Il y en a encore des étages au dessus (liste des table, pour commencer, liste des relations, ...), mais ça fini par devenir costaud (containers).
Que ta requête soit paramatrée ou pas :
Requêtes action (RunSql) :
UPDATE ...
INSERT ...
DELETE ...
SELECT ... INTO
Requêtes sélection (OpenRecordset):
SELECT ...
TRANSFORM ...
Donc :
Dim toto As Recordset
Dim sauvegarde As Database
Dim Requete as String
Requete = "SELECT PremierChamp, ........."
Set Sauvegarde = CurrentDb '(c'est le plus simple, il existe aussi Openxxx)
Set toto = sauvegarde.OpenRecordset(Requete)
' Après, toto est pour toi comme une table
toto.movefirst
LaPremiereValeurDuPremierChamp = toto![PremierChamp]
:-)
RecordSet : tu accède àla liste de tes données.
TableDef : tu accède à la structure de ta table (liste des champs, que tu peux modifier), pas aux données. Tu est à l'étage au dessus.
Il y en a encore des étages au dessus (liste des table, pour commencer, liste des relations, ...), mais ça fini par devenir costaud (containers).
Que ta requête soit paramatrée ou pas :
Requêtes action (RunSql) :
UPDATE ...
INSERT ...
DELETE ...
SELECT ... INTO
Requêtes sélection (OpenRecordset):
SELECT ...
TRANSFORM ...
Donc :
Dim toto As Recordset
Dim sauvegarde As Database
Dim Requete as String
Requete = "SELECT PremierChamp, ........."
Set Sauvegarde = CurrentDb '(c'est le plus simple, il existe aussi Openxxx)
Set toto = sauvegarde.OpenRecordset(Requete)
' Après, toto est pour toi comme une table
toto.movefirst
LaPremiereValeurDuPremierChamp = toto![PremierChamp]
:-)
ok merci mais il une aitre erreur apres:
le compilateur me dit qu'il manque des parametres (normal c'est une requete parametrée et j'ai pas saisi de parametre) ca c'est resolu en créant un Querydef
mais avec ce querydef il y a une erreur (la meme qu'avant
) c'est a dire variabla objet non defini.
Voila le code:
Dim toto As Recordset
Dim Sauvegarde As Database
Dim essai As QueryDef
Dim titi As QueryDef
Set Sauvegarde = CurrentDB()
Set essai = Sauvegarde.CreateQueryDef(titi(requete))
Set toto = Sauvegarde.OpenRecordset(requete)
le compilateur me dit qu'il manque des parametres (normal c'est une requete parametrée et j'ai pas saisi de parametre) ca c'est resolu en créant un Querydef
mais avec ce querydef il y a une erreur (la meme qu'avant
) c'est a dire variabla objet non defini.Voila le code:
Dim toto As Recordset
Dim Sauvegarde As Database
Dim essai As QueryDef
Dim titi As QueryDef
Set Sauvegarde = CurrentDB()
Set essai = Sauvegarde.CreateQueryDef(titi(requete))
Set toto = Sauvegarde.OpenRecordset(requete)
Sub fichier_Click ()
Dim num As Integer
Dim requete As String
Dim toto As Recordset
Dim sauvegarde As Database
Dim essai As QueryDef
num = FreeFile
Open "stage.txt" For Output As num
requete = ""
requete = requete & "SELECT [INC_N°], AGENCE.AGE_CODE, Projet1_code, Projet2_code, INTERVENANTS.INT_CODE,[INC_COUT_ESTIME]-[INC_COUT_FACTURE] AS [Montant TTC]"
requete = requete & " FROM AGENCE, INTERVENANTS, INCIDENTS, projet1, projet2"
requete = requete & " WHERE AGENCE.AGE_CODE=INCIDENTS.AGE_CODE"
requete = requete & " AND INCIDENTS.INT_CODE=INTERVENANTS.INT_CODE"
requete = requete & " AND INCIDENTS.PROJET1_CODEALTI=PROJET1.PROJET1_CODEALTI"
requete = requete & " AND INCIDENTS.PROJET2_CODEALTI=PROJET2.PROJET2_CODEALTI"
requete = requete & " AND [INC_DAT/H] Between [entrer la date de debut] And [entrer la date de fin];"
Set sauvegarde = CurrentDB()
Set essai = sauvegarde.CreateQueryDef(e, requete)
Set toto = essai.OpenRecordset()
toto.MoveFirst
While toto.eof
Print #num, requete
toto.MoveNext
Wend
Close num
End Sub
voila le code
Dim num As Integer
Dim requete As String
Dim toto As Recordset
Dim sauvegarde As Database
Dim essai As QueryDef
num = FreeFile
Open "stage.txt" For Output As num
requete = ""
requete = requete & "SELECT [INC_N°], AGENCE.AGE_CODE, Projet1_code, Projet2_code, INTERVENANTS.INT_CODE,[INC_COUT_ESTIME]-[INC_COUT_FACTURE] AS [Montant TTC]"
requete = requete & " FROM AGENCE, INTERVENANTS, INCIDENTS, projet1, projet2"
requete = requete & " WHERE AGENCE.AGE_CODE=INCIDENTS.AGE_CODE"
requete = requete & " AND INCIDENTS.INT_CODE=INTERVENANTS.INT_CODE"
requete = requete & " AND INCIDENTS.PROJET1_CODEALTI=PROJET1.PROJET1_CODEALTI"
requete = requete & " AND INCIDENTS.PROJET2_CODEALTI=PROJET2.PROJET2_CODEALTI"
requete = requete & " AND [INC_DAT/H] Between [entrer la date de debut] And [entrer la date de fin];"
Set sauvegarde = CurrentDB()
Set essai = sauvegarde.CreateQueryDef(e, requete)
Set toto = essai.OpenRecordset()
toto.MoveFirst
While toto.eof
Print #num, requete
toto.MoveNext
Wend
Close num
End Sub
voila le code
Je n'ai pas eu le même message d'erreur.
Set essai = sauvegarde.CreateQueryDef(e, requete) : e n'est pas défini
->"e" ou variable.
A la seconde exécution du code, tu as une injure "e existe déjà". Il faut donc le détruire si il existe.
While = tant que. Ca ne peut que se planter.
While Not toto.EOF
Print #num, requete : encore une fois, tu auras autant de texte de ta requête que d'enregistrements retournés :
Print #num, toto![INC_N°], toto![AGENCE.AGE_CODE], toto![Projet1_code], toto![Projet2_code], toto![INTERVENANTS.INT_CODE], toto![Montant TTC]
:-)
[edit] : voir MP.
Set essai = sauvegarde.CreateQueryDef(e, requete) : e n'est pas défini
->"e" ou variable.
A la seconde exécution du code, tu as une injure "e existe déjà". Il faut donc le détruire si il existe.
While = tant que. Ca ne peut que se planter.
While Not toto.EOF
Print #num, requete : encore une fois, tu auras autant de texte de ta requête que d'enregistrements retournés :
Print #num, toto![INC_N°], toto![AGENCE.AGE_CODE], toto![Projet1_code], toto![Projet2_code], toto![INTERVENANTS.INT_CODE], toto![Montant TTC]
:-)
[edit] : voir MP.
J'ai modifié le code, la requete n'est plus complétement une requete parametrée et le probleme c'est que la reuete ne s'execute pas.
Le nouveau code :
Sub fichier_Click ()
Dim num As Integer
Dim requete As String
Dim toto As Recordset
Dim sauvegarde As Database
Dim essai As QueryDef
Dim debperiode As Variant
Dim finperiode As Variant
num = FreeFile
Open "stage.txt" For Output As num
debperiode = InputBox("veuillez saisir la date de debut de periode")
finperiode = InputBox("veuillez saisir la date de fin de la periode")
requete = ""
requete = requete & "SELECT [INC_N°], AGENCE.AGE_CODE, Projet1_code, Projet2_code, INTERVENANTS.INT_CODE,[INC_COUT_ESTIME]-[INC_COUT_FACTURE] AS [Montant TTC]"
requete = requete & " FROM AGENCE, INTERVENANTS, INCIDENTS, projet1, projet2"
requete = requete & " WHERE AGENCE.AGE_CODE=INCIDENTS.AGE_CODE"
requete = requete & " AND INCIDENTS.INT_CODE=INTERVENANTS.INT_CODE"
requete = requete & " AND INCIDENTS.PROJET1_CODEALTI=PROJET1.PROJET1_CODEALTI"
requete = requete & " AND INCIDENTS.PROJET2_CODEALTI=PROJET2.PROJET2_CODEALTI"
requete = requete & " AND [INC_DAT/H] >=" & debperiode
requete = requete & " And [INC_DAT/H] <=" & finperiode
Set sauvegarde = CurrentDB()
Set toto = sauvegarde.OpenRecordset(requete)
toto.MoveFirst
While Not toto.eof
Print #num, toto![INC_N°], toto![AGENCE.AGE_CODE], toto![Projet1_code], toto![Projet2_code], toto![INTERVENANTS.INT_CODE], toto![Montant TTC]
toto.MoveNext
Wend
Close num
End Sub
PS : la base fait 46 Mo donc je vais essayer de te l'envoyer.
Le nouveau code :
Sub fichier_Click ()
Dim num As Integer
Dim requete As String
Dim toto As Recordset
Dim sauvegarde As Database
Dim essai As QueryDef
Dim debperiode As Variant
Dim finperiode As Variant
num = FreeFile
Open "stage.txt" For Output As num
debperiode = InputBox("veuillez saisir la date de debut de periode")
finperiode = InputBox("veuillez saisir la date de fin de la periode")
requete = ""
requete = requete & "SELECT [INC_N°], AGENCE.AGE_CODE, Projet1_code, Projet2_code, INTERVENANTS.INT_CODE,[INC_COUT_ESTIME]-[INC_COUT_FACTURE] AS [Montant TTC]"
requete = requete & " FROM AGENCE, INTERVENANTS, INCIDENTS, projet1, projet2"
requete = requete & " WHERE AGENCE.AGE_CODE=INCIDENTS.AGE_CODE"
requete = requete & " AND INCIDENTS.INT_CODE=INTERVENANTS.INT_CODE"
requete = requete & " AND INCIDENTS.PROJET1_CODEALTI=PROJET1.PROJET1_CODEALTI"
requete = requete & " AND INCIDENTS.PROJET2_CODEALTI=PROJET2.PROJET2_CODEALTI"
requete = requete & " AND [INC_DAT/H] >=" & debperiode
requete = requete & " And [INC_DAT/H] <=" & finperiode
Set sauvegarde = CurrentDB()
Set toto = sauvegarde.OpenRecordset(requete)
toto.MoveFirst
While Not toto.eof
Print #num, toto![INC_N°], toto![AGENCE.AGE_CODE], toto![Projet1_code], toto![Projet2_code], toto![INTERVENANTS.INT_CODE], toto![Montant TTC]
toto.MoveNext
Wend
Close num
End Sub
PS : la base fait 46 Mo donc je vais essayer de te l'envoyer.
46 Mo : gag classique d'Access, je n'ai pas pensé à te le dire.
Note la taille de ton fichier
1. Tu fais outils/utilitaires/compacter
Cela fera un nettoyage. Access est pire que Windows, il laisse des trous partout ET ne les réutilise pas.
Tu verra que la taille a bien diminuée.
2. Tu la Zippe.
Les données d'Access sont en format brut, aucune optimisation.
Et il te restera une petite crotte de fichier de rien du tout !!
Note la taille de ton fichier
1. Tu fais outils/utilitaires/compacter
Cela fera un nettoyage. Access est pire que Windows, il laisse des trous partout ET ne les réutilise pas.
Tu verra que la taille a bien diminuée.
2. Tu la Zippe.
Les données d'Access sont en format brut, aucune optimisation.
Et il te restera une petite crotte de fichier de rien du tout !!
Bonjour, enstage
A mon avis, le problème se situe au niveau de l'introduction des dates dans ta requête.
Pour utiliser des dates dans une requête SQL, il faut les entourer de dièses (#) et les mettre au format de date US (mm/jj/aaaa). En outre, une InputBox renvoie un élément de type String qu'il faut d'abord convertir en date.
Donc, à la place de :
requete = requete & " AND [INC_DAT/H] >=" & debperiode
requete = requete & " And [INC_DAT/H] <=" & finperiode
, je te propose :
requete = requete & " AND [INC_DAT/H] >=#" & Format(CDate(debperiode),"mm/dd/yyyy")
requete = requete & "# And [INC_DAT/H] <=#" & Format(CDate(finperiode),"mm/dd/yyyy")
Est-ce que c'est mieux ?
A mon avis, le problème se situe au niveau de l'introduction des dates dans ta requête.
Pour utiliser des dates dans une requête SQL, il faut les entourer de dièses (#) et les mettre au format de date US (mm/jj/aaaa). En outre, une InputBox renvoie un élément de type String qu'il faut d'abord convertir en date.
Donc, à la place de :
requete = requete & " AND [INC_DAT/H] >=" & debperiode
requete = requete & " And [INC_DAT/H] <=" & finperiode
, je te propose :
requete = requete & " AND [INC_DAT/H] >=#" & Format(CDate(debperiode),"mm/dd/yyyy")
requete = requete & "# And [INC_DAT/H] <=#" & Format(CDate(finperiode),"mm/dd/yyyy")
Est-ce que c'est mieux ?
Bonjour, enstage
Ma remarque concernant le format américain est tout à fait justifiée, crois-moi !
Si les dates que tu utilises ne prêtent pas à confusion, tu peux effectivement utiliser le format que tu veux, Access et SQL sauront se débrouiller. Par contre, si tu as une date du style 5 mars 2007, #05/03/2007# sera interprété par SQL comme étant le 3 mai.
Fais un test : crée une requête contenant une date en utilisant l'interface graphique et affiche ensuite le code SQL (menu Affichage \ Mode SQL), tu verras que le mois et le jour sont inversés.
Bonne continuation
Ma remarque concernant le format américain est tout à fait justifiée, crois-moi !
Si les dates que tu utilises ne prêtent pas à confusion, tu peux effectivement utiliser le format que tu veux, Access et SQL sauront se débrouiller. Par contre, si tu as une date du style 5 mars 2007, #05/03/2007# sera interprété par SQL comme étant le 3 mai.
Fais un test : crée une requête contenant une date en utilisant l'interface graphique et affiche ensuite le code SQL (menu Affichage \ Mode SQL), tu verras que le mois et le jour sont inversés.
Bonne continuation
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumTemps execution requete sql
- ForumExecution de requete mysql php
- ForumProbleme execution requete sql via vb
- ForumExecution requete sous vba access 2003
- ForumAccess 2003 creer macro execution requete
- ForumExecution requete sous access
- ForumVbscript execution requete sql
- ForumC execution d' une requete sql
- ForumCrontab et execution d'une requete sql
- ForumExecution d'une requete vb access
- Voir plus