debutant formulaire access et SQL - SQL/NoSQL - Programmation
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...
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...
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/
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
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... |
Si, on peut générer des requêtes à la volées
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.... :-) |
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 ...
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....
Marsh Posté le 02-03-2005 à 09:08:36
Optimisation masturbatoire :
Au lieu de
Me.lblstats.Caption |
On peut mettre
Me!lblstats.Caption |
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/
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
Marsh Posté le 02-03-2005 à 10:26:07
Met un espion sur la variable SQLWhere, pour voir ce qu'elle retourne
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?
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?
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?
Marsh Posté le 02-03-2005 à 10:46:39
Au niveau de la taille, tu ne devrais pas avoir de problèmes je pense...
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
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?
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....
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
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
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?
Marsh Posté le 02-03-2005 à 14:06:08
j ai trouvé la syntaxe
Requêtes paramétrées avec QueryDef
Lorsquon crée une requête paramétrée dans une base Access et que lon veut lexé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()
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" |
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 "
Marsh Posté le 02-03-2005 à 14:41:02
Comme si il connaissait pas QueryDef Ajoute une fois une référence à DAO 3.6 si ce n'est pas le cas
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?
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?
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 *???
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 :
|
Et ensuite tu peux faire :
Me!lstresults.RowSource = "Pouet" |
T'aura pas la limite du champ RowSource limité à 255 caractères
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....
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????
Marsh Posté le 03-03-2005 à 10:07:04
au fait je voudrai que le Me!lstresults.RowSource contienne tout sans depasser 255caracteres evidemment
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
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