Se connecter / S'enregistrer
Votre question

execution de requete

Tags :
  • Connexion
  • Programmation
Dernière réponse : dans Programmation
31 Mai 2007 09:37:34

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.

Autres pages sur : execution requete

31 Mai 2007 09:51:34

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 ;) 
31 Mai 2007 10:08:56

ok merci pour cet info je réécrirai si il y a des choses que je ne comprend pas
Contenus similaires
3 Juin 2007 18:44:00

En VB Access, pour exécuter une requête action :
docmd.runsql ma_requete (ma_requete est une variable string contenant la requête)

Si c'est une requête sélection, tu l'ouvre comme une table :
set Resultats_de_la_requete = MaBaseDeDonnees.openrecordset(ma_requete)
5 Juin 2007 09:15:35

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.

8 Juin 2007 18:25:21

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]

:-)
8 Juin 2007 18:27:49

[edit] (double envoi, ça a rebondi)
11 Juin 2007 09:43:13

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 :pt1cable:  ) 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)
13 Juin 2007 19:27:43


Set essai = sauvegarde.CreateQueryDef (name, sqltext)

En plus, tu utilise titi sans l'avoir défini et titi(requete) n'a pas de sens pour un queryDef.

Après, tu fais
set toto=essai.openrecordset

Avec
Set toto = Sauvegarde.OpenRecordset(sqltxt)
tu n'a pas besoin de querydef.
14 Juin 2007 09:25:54

meme avec tes corrections il y a l'erreur :

2 paramètres étaient attendues mais seuls 0 ont été fournies
14 Juin 2007 19:37:35

Fais-voir ton code corrigé ?

15 Juin 2007 09:09:39

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
15 Juin 2007 18:57:28

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.
18 Juin 2007 09:42:02

malgré tes corrections j'ai toujours la meme erreur ==> la cause : la requete ne s'execute pas.

Le compilateur me dis rien sur le "e" je l'ai changé par "var" mais c'est toujours pareil.
19 Juin 2007 18:24:56

J'ai récupéré un PC qui n'a que la run-time d'Access, je n'accède pas aux objets et encore moins au code. En attendant d'arranger ça, regarde dans l'onglet Requetes de ta base : tu devrais y trouver "e" ou "var". Exécutes-les pour vérifier ce qu'elles renvoient.
20 Juin 2007 09:17:58

Je les trouve meme pas dans l'onglet requete, j'ai l'impression qu'il ne sont pas créer
23 Juin 2007 14:32:01

J'imaginais que le pb venait de
[INC_DAT/H] Between [entrer la date de debut] And [entrer la date de fin]
Mais s'il n'y a rien dans <requetes> ?
Tu peux m'envoyer ta base ? (voir MP)
25 Juin 2007 09:18:42

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.
25 Juin 2007 18:58:00

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 !!

26 Juin 2007 08:59:20

elle est deja compacter et sur l'ordi que je suis il n'y a pas winrar, il faut que je le telecharge au sinon tu ne peut voir ce qui cloche sur le code du message precedent
26 Juin 2007 17:15:49

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 ?
27 Juin 2007 08:58:52

Merci de ton aide mais j'ai trouver l'erreur hier et effectivement le probleme était que je n'avais pas mis entre diese(#) les dates et il n'y a pas besoin de les mettre en format americain.
Probleme resolu et merci encore. ++
27 Juin 2007 10:15:34

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
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS