souci de prog et de requete

souci de prog et de requete - SQL/NoSQL - Programmation

Marsh Posté le 15-10-2007 à 09:23:27    

Bonjour bonjour !
 
Alors voila mon petit souci; suite à quelques manip en VB sous access, je récupère une valeur dans le code d'un formulaire (la valeur est calculée, non saisie). Normalement la valeur en question peut se trouver dans une table, d'où mon intention de faire une requête par la suite pour le vérifier.
Mon problème est que je ne sais pas comment faire le lien entre cette valeur que j'obtiens par le VB et la requete souhaitée vu que les requêtes s'appuie normalement sur des tables et non sur des variables (je sais pas si je suis clair  :??:)
 
Merci pour le coup de main  :hello:
 
EDIT: j'espère ne pas m'être trompé de catégorie  :sweat:


Message édité par alkashee le 15-10-2007 à 09:27:11
Reply

Marsh Posté le 15-10-2007 à 09:23:27   

Reply

Marsh Posté le 15-10-2007 à 10:29:56    

salut,
tu peux très bien effectuer des requetes via le vba, en utilisant Docmd.RunSQL Larequete

Reply

Marsh Posté le 15-10-2007 à 11:00:33    

jpcheck a écrit :

salut,
tu peux très bien effectuer des requetes via le vba, en utilisant Docmd.RunSQL Larequete


 
Vi je viens de découvrir ca ^_^'
 
Voici ma requête (sachant qu'elle est dans une procédure evenementielle):
 
Dim recherche As String
     
    recherche = "SELECT *" & _
                "FROM [Sous_réseaux ]" & _
                "WHERE [Sous_réseaux].SSres=echange"
 
DoCmd.RunSQL recherche
 
End Sub
 
sachant que 'echange' est la variable dans laquelle il y a la valeur (en l'occurence un sous-reseau) a rechercher dans la table 'Sous_réseaux'
 
Mais il me met un message d'erreur quand ca se lance, a savoir:  
 
Erreur d'éxécution '2342':
 
Une action ExécuterSQL nécessite un argument consistant en une instruction SQL
 
Bizzare qu'il me retourne ca, sachant que j'ai appliqué l'exemple de l'aide ^^ donc si vous avez des idées ou des suggestion je suis preneur :D

Reply

Marsh Posté le 15-10-2007 à 11:02:33    

fait un débug.print de ta requete, tu verras qu'il te manque des espaces de partout  [:jpcheck]

Reply

Marsh Posté le 15-10-2007 à 11:07:05    

Oki mais la commande je la fais où ? je la tape dans mon code ?

Reply

Marsh Posté le 15-10-2007 à 11:11:24    

par exemple oui,
ou alors dans la fenetre d'execution, tu peux meme faire un msgbox larequete ^^

Reply

Marsh Posté le 15-10-2007 à 11:16:12    

Alors voici ce que j'ai fais:
 
Dim recherche As String
     
    recherche = "SELECT * " & _
                "FROM [T_Sous_réseaux COMETE] " & _
                "WHERE [T_Sous_réseaux COMETE].SSres=echange"
 
Debug.Print    -----> Ca fait rien du tout, aucune info :'(
 
MsgBox recheche    -----> Affiche une fenetre vide (doit manquer qq chose)
 
DoCmd.RunSQL recherche  <------ c'est ici que ca coince  :fou:  
 
End Sub
 
Je patauge :/

Message cité 1 fois
Message édité par alkashee le 15-10-2007 à 11:21:06
Reply

Marsh Posté le 15-10-2007 à 11:22:05    

alkashee a écrit :

Alors voici ce que j'ai fais:
 
Dim recherche As String
     
    recherche = "SELECT * " & _
                "FROM [T_Sous_réseaux COMETE] " & _
                "WHERE [T_Sous_réseaux COMETE].SSres=echange"
 
Debug.Print  recherche  -----> Ca fait rien du tout, aucune info :'(
 
MsgBox recherche    -----> Affiche une fenetre vide (doit manquer qq chose)
 
DoCmd.RunSQL recherche  <------ c'est ici que ca coince  :fou:  
 
End Sub
 


essaie deja avec ces modifications ;)
 

Reply

Marsh Posté le 15-10-2007 à 11:32:16    

Mon dieu, la mouise du lundi matin a encore frappée....  
Ca va mieux, il me sort bien une msgBox qui me ressort la requête complète (SELECT....FROM.....WHERE.... mais sans donner son résultat :??:) mais il bloque toujours au même point qu'au début et me donne toujours le même message d'erreur.
 
Je précise, je n'y connais rien en VBA et mes cours de SQL sont loiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin au fond a droite ^^

Reply

Marsh Posté le 15-10-2007 à 11:34:34    

bon allez, remplace ton string par celui la (modele tanga  :love: )
 

Code :
  1. recherche = "SELECT * " & _
  2.                 "FROM [T_Sous_réseaux COMETE] " & _
  3.                 "WHERE [T_Sous_réseaux COMETE].SSres='echange'"


 
je me base ici sur le fait que SSres est un champ varchar

Reply

Marsh Posté le 15-10-2007 à 11:34:34   

Reply

Marsh Posté le 15-10-2007 à 11:40:26    

Ah, on a affaire à un (une ?) connaisseur(euse ?) !
 
j'avais essayé de mettre 'echange', rien de rien.. Et mon champ SSres est bien un champ texte (issu d'une importation d'un fichier .xls, est-ce que ca joue ?)

Reply

Marsh Posté le 15-10-2007 à 11:41:53    

<-- c'est un poussin, pas une poussine hein :)
et en remplacant = par LIKE '*change*' ?

Reply

Marsh Posté le 15-10-2007 à 11:46:49    

Ca change rien, même message....:'(

Reply

Marsh Posté le 15-10-2007 à 11:47:44    

de quel message parles-tu ?
sinon, tu peux envoyer la base, qu'on regarde ce qui cloche :)

Reply

Marsh Posté le 15-10-2007 à 11:54:04    

le message c'est  
 
Erreur d'éxécution '2342':  
Une action ExécuterSQL nécessite un argument consistant en une instruction SQL  
 
Pour la base, je peux te l'envoyer mais ca sera un peu dépouillé car ce sont des données un tantinet interne a ma boite et donc peux pas trop les envoyer a tout le monde ^^

Reply

Marsh Posté le 15-10-2007 à 12:01:25    

arf, fesse moi avec une pelle RunSQL ne marche que pour des requetes dites d'actions.
Essaie avec currentdb.openrecordset larequete

Reply

Marsh Posté le 15-10-2007 à 12:01:58    

Ah oki, je vois ca en revenant de manger et je te dis quoi ;)


Message édité par alkashee le 15-10-2007 à 12:02:50
Reply

Marsh Posté le 15-10-2007 à 13:57:27    

Alors effectivement ca a l'air d'aller mieux, mais il me dit que le moteur Jet de la base de donnée ne peut pas trouver la requete ou la table source "recherche", ce qui est en soi logique vu que la requete est contenue dans une variable >.< Hors c'est impossible de créer une requete vu que l'argument passé provient d'une variable....

Reply

Marsh Posté le 15-10-2007 à 14:00:41    

ben si : exmple =

Code :
  1. Dim RS As ADO.Recordset
  2. Dim variablespeciale as string
  3. variablespeciale = "pouet"
  4. Set RS = CurrentDb.Openrecordset("SELECT * FROM Table1 WHERE Test ='" & variablespeciale & '" )

Reply

Marsh Posté le 15-10-2007 à 14:17:09    

Dim RS As ADO.Recordset  ---> ADO.recordset il connait pas, même pas 'ADO'; il me dit "type defini par l'utilisateur non defnini"

Reply

Marsh Posté le 15-10-2007 à 14:17:55    

pardon, il faut la référence ADO, tu peux le faire sans en virant le ADO (mauvaise habitude ?)

Reply

Marsh Posté le 15-10-2007 à 14:27:28    

Ca avance, il grogne plus là dessus mais maintenant il me dit " erreur de syntaxe (operateur absent) dans l'expression '* FROM..[..]' Bizzarement le SELECT passe à la trappe sans raison alors qu'il "lit" bien le reste O_O
 


Message édité par alkashee le 15-10-2007 à 14:28:04
Reply

Marsh Posté le 15-10-2007 à 14:28:08    

oki,
tu peux afficher ton code stp, voir où on en est :)

Reply

Marsh Posté le 15-10-2007 à 14:29:52    

Rhooo c bon j'ai fait le boulet en faisant joujou avec le C/c -_-'
 
Mais il me dit now "incompatibilité de type"...

Reply

Marsh Posté le 15-10-2007 à 14:30:25    

Dim echange As String
 
echange = C_sous_reseau.Value
 
Dim recherche As String
     
    recherche = "SELECT * " & _
                "FROM [T_Sous_réseaux COMETE] " & _
                "WHERE [T_Sous_réseaux COMETE].SSres = echange"
 
 
Dim RS As Recordset
Set RS = CurrentDb.Openrecordset("SELECT * FROM [T_Sous_réseaux COMETE] WHERE [T_Sous_réseaux COMETE].SSres =' & echange & '" )
 
M'est avis que le type 'string' et le type 'recordset' doivent pas s'arranger entre eux ^^


Message édité par alkashee le 15-10-2007 à 14:32:05
Reply

Marsh Posté le 15-10-2007 à 14:36:34    

hum, le string recherche tu l'utilises plus en fait...

Reply

Marsh Posté le 15-10-2007 à 14:41:12    

Tout a fait, à force de copier, j'ai plus fait gaffe ^^ Mais le message d'incompatibilité, concerne la dernière ligne, d'ou ma remarque sur l'incompatibilité entre le 'string' echange et le 'recordset' RS. M'enfin je dis ca mais j'y connais rien, c'est juste une reflexion personnelle :p

Reply

Marsh Posté le 15-10-2007 à 14:44:32    

un chti ";" en fin de requete pitetre ^^

Reply

Marsh Posté le 15-10-2007 à 14:50:04    

Ben veux bien mais lui veux pas ^^  pis comme c'est dans une Sub je vois pas trop ou je pourrais le mettre :??:

Reply

Marsh Posté le 15-10-2007 à 15:00:11    

tu peux filer le fichier stp, j'ai l'impression qu'on s'enlise la :p

Reply

Marsh Posté le 15-10-2007 à 15:07:54    

oki doki mais comment on fait pour envoyer des fichiers en mp ?

Reply

Marsh Posté le 15-10-2007 à 15:09:17    

tu les stocke sur zshare.net ou cjoint.com :)

Reply

Marsh Posté le 15-10-2007 à 15:16:40    

lien envoyé en mp

Reply

Marsh Posté le 15-10-2007 à 15:33:35    

alors il faut bien ajouter DAO dans les références hein, sinon ca marchera po ^^

Reply

Marsh Posté le 15-10-2007 à 15:39:00    

Oki, on fais ca comment ? ca se mange ? ^^

Reply

Marsh Posté le 15-10-2007 à 15:44:42    

outils>références ;)

Reply

Marsh Posté le 15-10-2007 à 15:50:27    

j'ai bien coché la case, ca a rien changé :'( Dans le doute j'ai ajouté ADO aussi, des fois que ^^

Reply

Marsh Posté le 15-10-2007 à 15:51:16    

Dim RS As DAO.Recordset en plus de la référence hein (a)

Reply

Marsh Posté le 15-10-2007 à 15:57:59    

Alors ca roule, plus de messages d'erreurs mais ca débouche sur rien ! Question bête; il fait la requête mais est-ce qu'il l'affiche tout seul ou faut-il lui dire de le faire ?
 
EDIT: Et si il faut lui dire de le faire, peut-on par le plus grand hasard possible, le faire au travers d'un formulaire  ? (a)


Message édité par alkashee le 15-10-2007 à 16:01:37
Reply

Marsh Posté le 15-10-2007 à 16:01:15    

Ben une fois ton recordset récupéré, il faut dispatcher les réponses quelques part:
ici tu peut faire une truc comme ca :
 

Code :
  1. do until not RS.EOF
  2. msgbox RS!Num & " et " & RS.SSret
  3. RS.MoveNext
  4. Loop

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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