debutant formulaire access et SQL

debutant formulaire access et SQL - SQL/NoSQL - Programmation

Marsh Posté le 28-02-2005 à 16:07:39    

Bonjour  
je suis novice sur les bases de données access et j'aurai avoir une aide qui me serait assez utile...
Je viens de créer un formulaire qui me permettrai de faire des recherches selon differents criteres mais je voudrait savoir quel bouton ou fonction me permettrai de generer la requete SQL qui correspond. Petit precision si le champ n'est pas selectionner il doit prendre toutes les valeur correspondant a la table...
Merci d'avance a ceux qui me repondront


---------------
kiki28
Reply

Marsh Posté le 28-02-2005 à 16:07:39   

Reply

Marsh Posté le 28-02-2005 à 20:26:35    

je crois pas que Access permet de généré les requetes sql toutes seuls...
 
le seul truc, c'est d'utilisé l'assitant, mais ça ne te permettra pas de faire des trucs compliqués... sinon à ma connaissance Access ne permet rien d'autre...

Reply

Marsh Posté le 01-03-2005 à 08:35:01    

Merci pour ton aide mais si quelqu'un d'autre a une idée merci de m'aider...

Reply

Marsh Posté le 01-03-2005 à 09:06:55    

Tu créés une table sous Access ex.Table1 (cle,chp1,chp2)
puis un formulaire ex:MonForm basé sur cette table  
Ensuite tu créés un nouveau formulaire ex:Maselect et dedans tu crées un champ ex:selectchp1
et un bouton ... sur ce bouton tu vas coder l'ouverture
de Monform avec un filtre/critère par rapport à selectchp1
Voir aide Access sur l'instruction docmd openform ...
Voir aussi exemple ce site pour la syntaxe  
http://cafeine.developpez.com/access/recherche/

Reply

Marsh Posté le 01-03-2005 à 14:43:42    

je sais que je suis pas trs fort mais le code tu l insere ou? STP.... :-)
 Private Sub chkAuteur_Click()
 Me.txtRechAuteur.Visible = Not  Me.txtRechAuteur.Visible
 RefreshQuery
End Sub
 
Private Sub cmbRechFamille_BeforeUpdate(Cancel As Integer)
 RefreshQuery
End Sub
 
Private Sub txtRechResume_BeforeUpdate(Cancel As Integer)
 RefreshQuery
End Sub

Reply

Marsh Posté le 01-03-2005 à 14:57:10    

moi23372 a écrit :

je crois pas que Access permet de généré les requetes sql toutes seuls...
 
le seul truc, c'est d'utilisé l'assitant, mais ça ne te permettra pas de faire des trucs compliqués... sinon à ma connaissance Access ne permet rien d'autre...


Si, on peut générer des requêtes à la volées

Reply

Marsh Posté le 01-03-2005 à 15:49:08    

kiki28 a écrit :

je sais que je suis pas trs fort mais le code tu l insere ou? STP.... :-)
 Private Sub chkAuteur_Click()
 Me.txtRechAuteur.Visible = Not  Me.txtRechAuteur.Visible
 RefreshQuery
End Sub
 
Private Sub cmbRechFamille_BeforeUpdate(Cancel As Integer)
 RefreshQuery
End Sub
 
Private Sub txtRechResume_BeforeUpdate(Cancel As Integer)
 RefreshQuery
End Sub


 
Dans le cas suivant
 
Private Sub chkAuteur_Click()
 Me.txtRechAuteur.Visible = Not  Me.txtRechAuteur.Visible
 RefreshQuery
End Sub

 
Tu es censé avoir créé un formulaire avec un bouton chkAuteur
Si tu regardes au niveau des évenements de ce bouton et plus particulièrement l'évenement Click,
tu auras ce squelette qui va apparaitre
=>
 
Private Sub chkAuteur_Click()
 
End Sub
 
 
Les instructions suivantes veulent dire
 
 Me.txtRechAuteur.Visible = Not  Me.txtRechAuteur.Visible
=> Le texte txtRechAuteur est à rendre invisible
 RefreshQuery
=> rafraichir la requête source du formulaire qui va aussi ?
appliquer la transformation à ton texte txtRechAuteur ...
 
Bref en appuyant sur le bouton tu vas rendre invisible un texte à l'écran ...
 

Reply

Marsh Posté le 02-03-2005 à 08:15:16    

Merci VTTMAN2
maintenant peux tu m'expliquer ceci?:
Me.lblstats.Caption = blabla(comme dans l exemple sur le site)
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
 
 
car il y a un probleme de compilation je crois....
 
je pense que c est du a l'affichage de la requete car je crois pas avoir crée lblstats et lblresults... peux tu m eclairer??? il me manque ces choses a creer sur le formulaire....
bon ca va jusque la j'avance... et je comprend quand meme mieux le fonctionnement....

Reply

Marsh Posté le 02-03-2005 à 09:08:36    

Optimisation masturbatoire :
Au lieu de  

Me.lblstats.Caption


On peut mettre

Me!lblstats.Caption


:D

Reply

Marsh Posté le 02-03-2005 à 10:25:01    

j ai un probleme concernant ces commandes:
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where " ) - Len("Where " ) + 1))
SQL = SQL & ";"
 
 
Me.lblstats.Caption = DCount("*", "MATABLE", SQLWhere) & " / " & DCount("*", "MATABLE" )
Me.lstresults.RowSource = SQL
Me.lstresults.Requery
 
une erreur s'affiche quand je (dé)coche une case...
l'erreur affichée est:
 
erreur d'execution '3075':
syntaxe error (missing operator) in query expression
 
mais qd je mets la ligne avec le lblstat y a plus d'erreur mais rien ne s'affiche
 
merci de votre aide  
au fait je m inspire du code sur le site gracieusement conseillé par vttman2:
http://cafeine.developpez.com/access/recherche/  

Reply

Marsh Posté le 02-03-2005 à 10:25:01   

Reply

Marsh Posté le 02-03-2005 à 10:26:05    

j ai oublié de precisé : la ligen avec le lblstat je la met avant la ligne avec le SQLWhere

Reply

Marsh Posté le 02-03-2005 à 10:26:07    

Met un espion sur la variable SQLWhere, pour voir ce qu'elle retourne :)

Reply

Marsh Posté le 02-03-2005 à 10:43:32    

en fait j'ai l'impression que la requete se fait bien mais qu'elle est trop longue...
est ce qu'il y a une taille maximale en caracteres pour les requetes?

Reply

Marsh Posté le 02-03-2005 à 10:45:01    

en fait j'ai l'impression que la requete se fait bien mais qu'elle est trop longue...
est ce qu'il y a une taille maximale en caracteres pour les requetes?

Reply

Marsh Posté le 02-03-2005 à 10:46:05    

je me demande don si on peux pas mettre une sorte d alias qui appelerai la table par une simple lettre ce qui me permettrai de redui la requete?

Reply

Marsh Posté le 02-03-2005 à 10:46:39    

Au niveau de la taille, tu ne devrais pas avoir de problèmes je pense...

Reply

Marsh Posté le 02-03-2005 à 10:52:41    

je viens de faire un test en mettant dans ma requete SQL une lettre qui defini la table comme pour des requetes normales et la , j obtient tout le contenu du SQLWhere...
mais l erreur qui m est apparut est:
erreur d execution 2471
l expression entrée comme parametrede requete est a l origine de l erreur suivante:'l'objet ne contient pas d'objet d automatisation

Reply

Marsh Posté le 02-03-2005 à 10:53:19    

on peux pas agir directement sur les ta

Reply

Marsh Posté le 02-03-2005 à 10:54:01    

dslé
on peux pas agir directement sur les table pour pouvoir garder son nom et pouvoir l appeler avec un nom plus court?

Reply

Marsh Posté le 02-03-2005 à 11:22:17    

je confirme donc bien qu'il y a une taille limité pour les requete je viens de faire quelques test et c est ce que j en deduit...
mais ca ne repond pas a mes question sur comment appeler une table de maniere reduite sans tapper tout le nome de la table....

Reply

Marsh Posté le 02-03-2005 à 11:24:36    

Envoi nous ta requête histoire de voir

Reply

Marsh Posté le 02-03-2005 à 11:56:41    

elle fait cette taille:
j'ai remplacé les champs pas des x mais j ai gardé la strucyure j espere que vous comprendrez....
 
 
SELECT xxx xxxxxx xx xxxxxxx!xx, xxx xxxxxx xx xxxxxx!xxxxxxxx, xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxxxxxxxxxxxxx, xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxx, xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxxxxxxxxxxx,xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxxxxxxxxxxxxx,xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxxxx, xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xxxxxxxxxxxxxxxxxxxxx FROM xxx xxxxxx xx xxxxxxx INNER JOIN xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx ON xxx xxxxxx xx xxxxxxx!xx = xxx xxxxxxxxxx xx xxxxxxx xxxxxxxx xxx xxx xxxxxx!xx

Reply

Marsh Posté le 02-03-2005 à 12:00:55    

Ne la met pas directement dans le RowSource. Stocke-la dans la base, et dans RowSource met le nom de la requête

Reply

Marsh Posté le 02-03-2005 à 13:27:54    

ok je vois ce que tu veux dire mais comment tu fais ppour appeler une requete? et tu la met ou dans le code?

Reply

Marsh Posté le 02-03-2005 à 13:28:58    

Faut créer un objet QueryDef :)

Reply

Marsh Posté le 02-03-2005 à 14:03:49    

tu fais comment la syntaxe?
QueryDef= ma requete?

Reply

Marsh Posté le 02-03-2005 à 14:06:08    

j ai trouvé la syntaxe
Requêtes paramétrées avec QueryDef
Lorsqu’on crée une requête paramétrée dans une base Access et que l’on veut l’exécuter dans VB, il faut procéder ainsi :
 
 
 
Dim Qry as querydef,rs as recordset
set qry=db.querydefs( nom_de_la_requête )
qry.parameters( nom_du_paramètre) = ....... //La vous comprenez quoi?
set rs=qry.openrecordset()

Reply

Marsh Posté le 02-03-2005 à 14:13:49    

Pour les paramètres, c'est genre si t'as une requête :

SELECT * FROM table WHERE table.bidule = pouet


Tu metteras :

qry.parameters("pouet" ) = "valeur"

Reply

Marsh Posté le 02-03-2005 à 14:18:38    

je vien d 'essayer mais dans le cas que j utilise je le met dans le "private sub refreshquery()" mais il me met cette erreur:
 
type defini par l utilisateur non defini???
 
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
 
Dim Qry As querydef, rs As Recordset
Set Qry = db.querydefs(xxxxxxxxxxxx)
Set rs = Qry.openrecordset()
 
apres il y a la definition de la requete:
je met le nom de ma requete?
 
SQL = "xxxxxxxxxxxxxxxxx "

Reply

Marsh Posté le 02-03-2005 à 14:23:35    

le message concerne cette ligne:
Qry As querydef

Reply

Marsh Posté le 02-03-2005 à 14:41:02    

Comme si il connaissait pas QueryDef :heink: Ajoute une fois une référence à DAO 3.6 si ce n'est pas le cas :)

Reply

Marsh Posté le 02-03-2005 à 14:59:19    

Dim Qry As DAO.QueryDef, rs As Recordset
Set Qry = db.querydefs(ma_requete)
Set rs = Qry.openrecordset()
 
idem j ai le meme message d'erreur sauf celle de ma part peut etre...
 
et apres est ce que je peux faire:
 
SQL = QRY?

Reply

Marsh Posté le 02-03-2005 à 15:03:37    

Qry.SQL = "SELECT........"

Reply

Marsh Posté le 02-03-2005 à 15:14:07    

non en fait si je fais appel a la requet c est pour eviter de mettre dans le rowsource la requete entiere...
donc on fait appel a  
Dim Qry As DAO.QueryDef, rs As Recordset  
Set Qry = db.querydefs(ma_requete)  
Set rs = Qry.openrecordset()  
 
mais avec l exemple sur lequel je me base a : http://cafeine.developpez.com/access/recherche/  
 
il faut dans le refreshQuery initialiser la requete sql de base:
 
SQL = "......."
 comme la requete avec tous les argument est tres longue j'utilise l'appel a la requete...
 
donc est ce que je peux concatené la requete recupérée avec la fin des autres arguments???
 
avec les  
 
if not ME.chkauteur then ...
SQL = SQL & "and blablabla"????
 
vois tu ce que je veux dire FlorentG?

Reply

Marsh Posté le 02-03-2005 à 15:41:00    

en fait je vais essayer de faire au plus simple:
je viens de créer un table liée avec tous les champs qui m interesse et je l ai renommé de la maniere la plus simple possible je reprend l'exmple du site et j essaie de voir si je peux m en sortir comme ca...
 
j ai juste une petit question:
pour selectionner n importe quelle valeur sur une colonne sachant que j ai comme syntaxe:
and table.colonne =" la valeur que je cherche" comme peut elle prendre toutes les valeur un peu comme le *???

Reply

Marsh Posté le 02-03-2005 à 15:48:53    

Nan mais justement :
Imagine t'as une requête nommé "Pouet". Dans ton code, tu fais :

Code :
  1. Dim QryPouet as QueryDef
  2. Set QryPouet = CurrentDb.QueryDefs("Pouet" )
  3. QryPouet.SQL = "SELECT ........"


Et ensuite tu peux faire :

Me!lstresults.RowSource = "Pouet"


T'aura pas la limite du champ RowSource limité à 255 caractères :)

Reply

Marsh Posté le 03-03-2005 à 09:57:39    

je sais pas si j'ai mal compris ou si je vois pas bien comment on fait...
je defini
Dim SQL As String
Dim SQLWhere As String
 
ensuite le rowsouce contient le sql
 
Me!lstresults.RowSource = SQL
 
mais dans ton  
QryPouet.SQL = "SELECT ........"
je dois retapper le SQL de base donc avec les autres arguments je pense que les 255 caracteres sont vite atteint??? ou alors j'ai peut etre pas saisi exactement comment on fait mais j ai un peu compris qd meme....

Reply

Marsh Posté le 03-03-2005 à 10:05:54    

en fait j ai resolu qd meme certains problemes et je veux savoir si on peux concatener le nom d'une requete avec mes autres conditions? si il y a une solution pas trop compliquée ca resoudra mon pblm...
j'ai fait une requete qui doit afficher et lier les tables dont j ai besoin et en fonction de la recherche que des condition s'ajoutent a celle-ci
exemple
j'appelle ma requete et je rajoute 1 ou plusieurs condition
ma_requete + and contition1, and condition 2...
 
 
vois tu ou je veux en venir????

Reply

Marsh Posté le 03-03-2005 à 10:07:04    

au fait je voudrai que le Me!lstresults.RowSource contienne tout sans depasser 255caracteres evidemment

Reply

Marsh Posté le 03-03-2005 à 10:37:47    

kiki28 a écrit :

au fait je voudrai que le Me!lstresults.RowSource contienne tout sans depasser 255caracteres evidemment


C'est la solution que je t'ai proposé. Tu as une requête enregistrée, dans laquelle t'as aucune limite. Et après dans la propriété Rowsource, tu met le nom de la requête, et ça marche

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed