Ouvrir via VB une requete Access en mode SQL

Résolu
Plopplop55 -  
blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   -
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 :)
Configuration: Windows XP Internet Explorer 6.0

20 réponses

  1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  2. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  3. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    PS : tu sembles donner bcp de toi sur ce forum pour aider les autres, merci !
    0
  6. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  7. Plopplop55
     
    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
  8. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  9. Plopplop55
     
    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
  10. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    pas trop...

    mais pour moi, il ne s'agit que d'une construction de chaine, à faire avec les opérateurs classiques...
    0
  11. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      donc je n'ai pas trop compris, essaye d'être un peu explicite dans l'exemple.
      0
  12. Plopplop55
     
    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
  13. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  14. Plopplop55
     
    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
  15. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    StrSqlModif = .SQL & "UNION Company..." ?

    et aussi penser à récupérer la valeur de StrTag, genre : FROM [ASC_ " & StrTag & "]"
    0
  16. Plopplop55
     
    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
    1. az
       
      Il fallait juste supprimer le ;
      0
    2. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Il fallait juste supprimer le ;
      Non, si tu regardes le message jusqu'au bout, tu t'en rendras compte...
      0
  17. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    à 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
  18. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  19. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      2ième ligne de mon message 20...

      faut lire ;-)
      0
  20. Plopplop55
     
    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
    1. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      C'est parce que tu ne fréquentes pas assez les forums...

      Mets le problème en résolu.
      0