Ouvrir via VB une requete Access en mode SQL

Résolu/Fermé
Plopplop55 - 27 juil. 2009 à 11:20
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 - 17 oct. 2011 à 15:07
Bonjour,

comme le suggere mon titre, il s'agit bien de SQL et de VB.

J'ai commencé a programmer un code VB pour qu'il copier une reqete en la renomant via une variable, voici le code :

Function Nouveau_tag()

Dim strMaVar As String

strMaVar = InputBox("Entrez le nom de votre nouveau tag !")

DoCmd.CopyObject "", "ASC_" + strMaVar, acQuery, "ASC_TAG"

End Function


Je voudrais a présent pouvoir ouvrir la nouvelle requete en mode SQL, selectionner un mot bien particulier (qui revient plus fois) dans l'instruction et le remplacer par un autre qui sera la variable strMaVar

Je ne suis pas trés doué en VB, etre parvenue a ce resultat la me laisse deja pantois, si quelqu'un veut bien m'aider, il sera considéré comme mon hero a vie :)

20 réponses

blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
27 juil. 2009 à 15:52
Salut,

tu ne peux pas faire ça, une requête ouverte en mode sql ne peut pas être modifiée autrement qu'à l'écran.

Mais si tu maitrises DAO ou ADO via VB, il te sera facile d'accéder au contenu de la requête, pour le modifier.

En VBA, depuis ACCESS, ça peut prendre 2 lignes...
0
Tout d'abord merci pour ta réponse !

Alors, je ne maitrise pas les choses dont tu parles en revanche, j'ai pas du m'exprimer correctement, parcequ'il ne s'agit pas de modifier une requete SQL deja ouverte !

En fait,

J'ai une requete SQL qui s'appel ASC_TAG dont voici l'instruction SQL :

SELECT Alliance_Shared_Contact.Company, Alliance_Shared_Contact.[Last Name], Alliance_Shared_Contact.[First Name], Alliance_Shared_Contact.[Job Title], Alliance_Shared_Contact.[E-mail Address], Alliance_Shared_Contact.[Business Phone], Alliance_Shared_Contact.[Mobile Phone], Alliance_Shared_Contact.[Fax Number], Alliance_Shared_Contact.[Web page], "Tag" AS [Origine Contact]

FROM Alliance_Shared_Contact

WHERE (((Alliance_Shared_Contact.Categories) Like "*" & "Tag" & "*"));


Le but pour moi est de pouvoir copier cette requete et de la renomer en ASC_"variable" ; variable que j'obtient grace à la programmation VB que je vous ai montré !

Pour faire simple, cela a pour effet de m'ouvrir une boite de dialogue qui me demande en quoi comment je veux nommer la copie.

Maintenant que j'ai réussit ca, il faudrait qu'a la suite de la programmation VB, je rajoute un truc qui me permette de changer l'instruction SQL de la copie de ma requete pour changer le mot "tag" par la nouvelle variable !

Merci encore pour le temps que tu m'accordes !
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
27 juil. 2009 à 16:39
La requête est stockée sous une forme particulière par access, impossible d'y accéder autrement qu'en mode interactif (à l'écran) ou qu'avec les propriétés de l'objet requête via ado/dao.
0
Hum ok. Merci bcp pour l'attention que tu m'accordes !

N'y a t'il pas un moyen d'arriver au resultat que je veux ? Tu disais que ca pouvait se faire en 2 lignes ... Par contre, je n'y connais pas grande chose en VB Access :)
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
28 juil. 2009 à 13:41
dans ton VB, il faut créer un objet adodb, puis t'y connecter, ensuite, tu peux récupérer n'importe quel objet de la base (table, requête, champ...) et le modifier...
0
Comment fait on pour creer un objet ADODB ?
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
28 juil. 2009 à 14:06
ben je suppose que ça doit être un truc genre SET myobjet as new.adodb... ou dans ce goût là...

https://forums.commentcamarche.net/forum/affich-227473-visual-basic-et-base-de-donnees-access
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ha merci Blux, je vais fouiller ca !

PS : tu sembles donner bcp de toi sur ce forum pour aider les autres, merci !
0
Héhé ca marche !

Pour info :

Option Compare Database

Public Function test_DAO_QUERYDEF()

Dim Bdd As DAO.Database
Dim Qdf As DAO.QueryDef
Dim StrSql As String
Dim StrSqlModif As String
Dim StrTag As String

StrTag = InputBox("Quel est le nom de votre nouveau tag?")

DoCmd.CopyObject "", "ASC_" + StrTag, acQuery, "ASC_TAG"

Set Bdd = Application.CurrentDb
Set Qdf = Bdd.QueryDefs("ASC_" + StrTag)

With Qdf
StrSql = .SQL
StrSqlModif = Replace(StrSql, "tag", StrTag)
.SQL = StrSqlModif


'....


.Close
End With

Set Qdf = Nothing

Bdd.Close
Set Bdd = Nothing

End Function



Merci donc

A présent j'aimerais pouvoir inclure ma nouvelle requete dans une requete union deja existante. Cela va exiger que je puisse editer ma requete union et que j'ajoute à la partie fixe qui existe deja, une partie variable qui dependra du nom de la nouvelle requete.

Quelqu'un a un idée du code ?
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
29 juil. 2009 à 12:40
C'est guère plus dur :-)

Tu récupères le .sql de ta requête UNION pour le mettre dans une chaine que tu traffiques avec les opérateurs de manipulation de chaine et ensuite tu réenregistres ta requête.

Juste une question : tu es sous ACCESS ou sous VB ? car je ne vois pas de séquence de connexion à la base...
0
je suis sur Access :)

Et bien j'ai essayé de reprendre le .SQL pour le trafiquer mais ne connaissant pas bien les bases du code VB, ca n'a pas fonctionné..

J'ai eu le droit a un message du genre " INSERT / UPDATE ou DELETE requis "
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
29 juil. 2009 à 13:12
Donc depuis le début je crois que tu accèdes à une base ACCESS via VB (comme ton titre le suggère), c'est pour ça que je t'ai proposé une connexion avec un objet type adodb !

C'est cette phrase-là qui me pose problème : une partie variable qui dependra du nom de la nouvelle requete. parce que sinon, le reste est à ta portée (vu ce que tu as déjà créé comme code).

Un exemple serait plus parlant...
0
Héhé navré Blux, j'ai eu egalement un doute sur ce dont nous parlions mais n'etant pas avancé dans l'art de la VB, je n'etait pas sur de moi ...

Alors en fait :

J'ai une requete appelé ASC_TAG. Ma VB la copie et la renome par une variable determinée par une inputbox. Voici l'instruction sql de tag. Par exemple, je pourrais renomé la copie en ASC_VARIABLE

SELECT Alliance_Shared_Contact.Company, Alliance_Shared_Contact.[Last Name], Alliance_Shared_Contact.[First Name], Alliance_Shared_Contact.[Job Title], Alliance_Shared_Contact.[E-mail Address], Alliance_Shared_Contact.[Business Phone], Alliance_Shared_Contact.[Mobile Phone], Alliance_Shared_Contact.[Fax Number], Alliance_Shared_Contact.[Web page], "<gras>tag
" AS [Origine Contact]
FROM Alliance_Shared_Contact
WHERE (((Alliance_Shared_Contact.Categories) Like "*" & "tag" & "*"));</gras>

(j'ai réussi a faire en sorte que le mot "tag" soit changé en "Variable" dans l'instruction.

D'un autre coté j'ai une requete Union qui melange plein de requete comme TAG.

L'objectif pour moi est de pouvoir inclure la copie renomée de la requete TAG dans mon union, ici suivant l'exemple, ASC_VARIABLE.

Est ce que j'arrive a etre claire ? :s
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
29 juil. 2009 à 15:08
pas trop...

mais pour moi, il ne s'agit que d'une construction de chaine, à faire avec les opérateurs classiques...
0
Certes, mais je connais a peine le language VB.

Tout ce que j'ai réussi a faire jusque la, c'est en observant, en faisant de nombreux essais, et en galérant.

:(
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
29 juil. 2009 à 15:35
donc je n'ai pas trop compris, essaye d'être un peu explicite dans l'exemple.
0
Bon on va essayer un petit schema :)

J'ai plusieurs requete dont l'instruction n'a pas tant d'importance et une union qui vient récuper les donnés de mes requetes pour les mettre ensemble

ASC_TAG______+_______ASC_MAIN________+____ASC_MKG

= UNION_ASC



A présent, grace a un module VB, je peux créer une nouvelle requete ASC_VARIABLE et j'aimerais egalement completer ma VB pour pouvoir le mettre dans l'UNION


ASC_TAG______+_______ASC_MAIN________+____ASC_MKG_________+ASC_VARIABLE

= UNION_ASC



Pour info , voici la requete UNION actuelle

SELECT

Company,
[Last Name],
[First Name],
[Job Title],
[E-mail Address],
[Business Phone],
[Mobile Phone],
[Fax Number],
[Web page],
[Origine Contact], "sharepoint" as ID

FROM [ASC_Tag]

UNION ALL SELECT

Company,
[Last Name],
[First Name],
[Job Title],
[E-mail Address],
[Business Phone],
[Mobile Phone],
[Fax Number],
[Web page],
[Origine Contact], "sharepoint"

FROM ASC_MAIN


UNION ALL SELECT

Company,
[Last Name],
[First Name],
[Job Title],
[E-mail Address],
[Business Phone],
[Mobile Phone],
[Fax Number],
[Web page],
[Origine Contact], "sharepoint"
FROM ASC_MKG


Il y doit bien avoir une manip qui sert a dire : Tu edites UNION_ASC et tu ajoutes le truc ci dessous a l'instruction

Company,
[Last Name],
[First Name],
[Job Title],
[E-mail Address],
[Business Phone],
[Mobile Phone],
[Fax Number],
[Web page],
[Origine Contact], "sharepoint"
FROM ASC_VARIABLE



*espoir*
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
29 juil. 2009 à 17:01
ben tu prends ton .sql actuel que tu mets dans une chaine et tu concatènes avec ce que tu veux :

toto = .sql

toto = toto & "company, ..... FROM ASC " & variable & ";"

et ensuite tu réenregistres ton .sql comme tu l'a fais avec ton code du début.
0
Ha merci bcp Blux, on se comprend enfin :-)

Alors j'ai essayé le code suivant a la suite du reste

Set Bdd = Application.CurrentDb
Set Qdf = Bdd.QueryDefs("UNION_ASC")

With Qdf

StrSql = .SQL
StrSqlModif = .SQL & "Company,[Last Name],[First Name],[Job Title],[E-mail Address],[Business Phone],[Mobile Phone],[Fax Number],[Web page],[Origine Contact], 'sharepoint' as ID FROM [ASC_ + StrTag]"
.SQL = StrSqlModif

Close
End With

Set Qdf = Nothing

Il me dit message d'erreur : " caractere trouvé apres la fin de l'instruction SQL" :-(

Une idée de ce que ca peut etre ?

ps : ( on touche au buuuuut)

Bdd.Close
Set Bdd = Nothing

End Function
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
30 juil. 2009 à 10:00
StrSqlModif = .SQL & "UNION Company..." ?

et aussi penser à récupérer la valeur de StrTag, genre : FROM [ASC_ " & StrTag & "]"
0
Arf, j'aai plus de message genre " instruction sql trouvé apres la fin " mais maintenant avec ce code la :

Set Bdd = Application.CurrentDb
Set Qdf = Bdd.QueryDefs("UNION_ASC")

With Qdf

StrSql = .SQL
StrSqlModif = .SQL & "UNION ALL SELECT Company,[Last Name],[First Name],[Job Title],[E-mail Address],[Business Phone],[Mobile Phone],[Fax Number],[Web page],[Origine Contact], 'sharepoint' as ID " & vbCrLf & _
StrSqlModif = StrSqlModif & "FROM [ASC_ + StrTag];"
.SQL = StrSqlModif

Close
End With

Set Qdf = Nothing

Bdd.Close
Set Bdd = Nothing

End Function



J'ai le droit à "Instruction SQL non valide : delete insert procedure select ou update attendu " :(
0
Il fallait juste supprimer le ;
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
17 oct. 2011 à 15:07
Il fallait juste supprimer le ;
Non, si tu regardes le message jusqu'au bout, tu t'en rendras compte...
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
30 juil. 2009 à 10:30
à quel moment ? parce que là, il n'y a aucune raison, ce message d'erreur doit être lors de l'exécution de la requête...
0
Set Bdd = Application.CurrentDb
Set Qdf = Bdd.QueryDefs("UNION_ASC")

With Qdf

StrSql = .SQL
StrSqlModif = .SQL & "UNION ALL SELECT Company,[Last Name],[First Name],[Job Title],[E-mail Address],[Business Phone],[Mobile Phone],[Fax Number],[Web page],[Origine Contact], 'sharepoint' as ID " & vbCrLf & _
StrSqlModif = StrSqlModif & "FROM [ASC_ + StrTag];"
.SQL = StrSqlModif

Close
End With

Set Qdf = Nothing

Bdd.Close
Set Bdd = Nothing

End Function

Je confirme que le reste est bon je teste tout en pas a pas, je ne comprend pas, pourquoi, pourquoiiiiii ?
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
30 juil. 2009 à 10:49
fais un msgbox strsqlmodif, et ça te donnera une piste...

en fait, je l'ai pas vu tout de suite, mais c'est le vbcrlf qui fout la zone, il ne doit pas y en avoir (une requête est une suite de caractères, sans format de mise en page), contente toi de mettre des espaces entre les mots-clés SQL (c'est-à-dire avant le FROM ou après le ID, comme c'est le cas)...
0
Ok on y presque, a présent il m'ajoute bien l'union, reste quelques erreur de mise en page !

La VB fonctionne normalement reste juste un petit probleme :) :) : )

StrSql = .SQL
StrSqlModif = .SQL & "UNION ALL SELECT Company,[Last Name],[First Name],[Job Title],[E-mail Address],[Business Phone],[Mobile Phone],[Fax Number],[Web page],[Origine Contact], ""sharepoint"" "
StrSqlModif = StrSqlModif & "FROM ASC_+ StrTag"
.SQL = StrSqlModif

Lors de l'ajout à l'union est ajoutée FROM ASC_StrTag a la place de ma variable (mettons que si dans l'inpubox, j'avais ecrit TOTO ; il faudrait qu'il y ai marqué FROM ASC_TOTO)
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
30 juil. 2009 à 11:22
2ième ligne de mon message 20...

faut lire ;-)
0
Hahaha excuse moi !


Je te confirme donc a toi et a tout les eventuels lecteurs qui auront besoin de cette solution un jour que ca fonctionne !!!!!

Un grand merci a toi Blux, je n'ai jamais rencontré personne sur un forum qui s'est autant attaché a aider les autres :)

ENCORE merci !
0
blux Messages postés 24670 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 7 décembre 2022 3 279
30 juil. 2009 à 11:32
C'est parce que tu ne fréquentes pas assez les forums...

Mets le problème en résolu.
0