IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

[SQL & VBA]Insérer champ dans instruction SQL existante


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut [SQL & VBA]Insérer champ dans instruction SQL existante
    Bonjour,

    Je cherche à modifier une instruction SQL existante (une rqt enregistrée en fait) par VBA en ajoutant un champ ;
    Je me demande comment placer ce nouveau champ dans le SQL de la rqt de telle sorte qu'il ne soit pas placé en fin d'instruction (ce qui génère une erreur).
    Je me demande si je ne dois pas chercher la clause FROM dans la rqt pour placer le nouveau champ juste avant.
    Est-ce que la fonction InStr peut m'aider à faire ceci?

    Merci pour vos éclairages...

    SE
    Si le monde explose, la dernière voix audible sera celle d’un expert, disant que la chose est impossible. - P. Ustinov

  2. #2
    Membre habitué Avatar de kirgan
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    hello,

    je ne sais pas si c'est ce que tu veux, mais généralement, pour générer du code SQL, tu fais une petit procédure en plusieurs étapes

    - tu génères le début de ton message SQL
    - tu crées une boucle, qu insère les tables voulues
    - finis le StringSQL avec FROM etc.

    Ne serait-il pas dès lors plus facile de simplement modifier ton code VB pour permettre une génération de ce genre, plutot que de rechercher le FROM, de couper, d'insérer, et de tout recoller?

    Sinon, InStr te permet en effet de retrouver la position "FROM" dans un String, puis de là tu peux couper, insérer, recoller...
    K.
    If you think things can't get worse it's probably only because you lack sufficient imagination.

    Pensez au tag si votre problème est réglé!
    Bas de la page > Résolu

  3. #3
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci pour ta réponse...

    Le champ que je veux insérer dans l'instruction existante est une variable résultant de la concaténation de deux InputBox...

    Pour rechercher la clause FROM avec la fonction InStr la syntaxe c'est quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(1, strSQL, "FROM", vbTextCompare)
    Qu'est-ce que je dois faire de la valeur renvoyée?
    Dois-je supprimer tout ce qui est avant puis ajouter le champ et ce que je viens de couper...?

    SE

    Si le monde explose, la dernière voix audible sera celle d’un expert, disant que la chose est impossible. - P. Ustinov

  4. #4
    Membre habitué Avatar de kirgan
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    hmm je dois avouer ne pas être un pro des substrings en vba...

    on peut imaginer ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL = "SELECT nom FROM matable WHERE nom=blabla"
    Dim pos as Integer
    pos = InStr(1, strSQL, "FROM", vbTextCompare) 'partie copiée de ton code, non testée ^^
    si on fait un InStr dessus, ca nous renvoie la premiere occurence de FROM, dans ce cas 12.

    Ensuite,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim str1 as String
    str1 = Right(strSQL, pos)
    crée un string avec les 12 permiers caractères. Ensuite, on peut déduire que la suite du string est en position 12... Et la longueur totale avec Len. Il nous faut donc la partie gauche du string, depuis 12, sur une longueur de Len-12.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim str2 as String
    str2 = Left(sqlSTR, Len(strSQL)-12)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = str1 & "tes nouveaux paramètres" & str2
    A affiner avec des msgBox, c'est peut-être 11 et pas 12, en fonction de la valeur de la premiére position (0 ou 1), mais globalement c'est +/- ca je pense!

    Tiens-moi au courant

    PS: si quelqu'un connait un "SubString(begin, end)" en VBA, je suis curieux - sinon, ben ya qu'à l'écrire
    K.
    If you think things can't get worse it's probably only because you lack sufficient imagination.

    Pensez au tag si votre problème est réglé!
    Bas de la page > Résolu

  5. #5
    Membre habitué Avatar de kirgan
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    oouuuuuuuups

    petite erreur, j'ai inversé Right et Left

    Right prend bien la FIN de mon string, Left le DEBUT
    K.
    If you think things can't get worse it's probably only because you lack sufficient imagination.

    Pensez au tag si votre problème est réglé!
    Bas de la page > Résolu

  6. #6
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci pour ta nouvelle réponse...
    Je regarde ça et te tiens au courant...

    SE
    Si le monde explose, la dernière voix audible sera celle d’un expert, disant que la chose est impossible. - P. Ustinov

  7. #7
    Membre habitué Avatar de kirgan
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 136
    Points
    136
    Par défaut
    Bon je ne sais toujours pas si un équivalent de SubString existe en VB, mais comme je m'embêtais...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Public Function SubString(Chaine As String, Debut As Integer, Fin As Integer) As String
        On Error GoTo error_substring
     
        If Fin > Len(Chaine) Then
            Fin = Len(Chaine)     'arbitraire, si fin > longueur je mets fin à longueur
        End If
     
        If Debut > Fin Then
            SubString = ""  'arbitraire, si debut > fin je renvoie une chaine vide
            GoTo exit_substring
        End If
     
        SubString = Right(Left(Chaine, Fin), Fin - Debut + 1)
     
    exit_substring:
        Exit Function
     
    error_substring:
        MsgBox Err.Description
        Resume exit_substring
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox SubString("1234567890", 2, 8)
    => 2345678

    Dans ton cas ca ne sert à rien, puisque tu prends tout le début et toute la fin, mais au cas où...

    Bonne soirée ^^
    K.
    If you think things can't get worse it's probably only because you lack sufficient imagination.

    Pensez au tag si votre problème est réglé!
    Bas de la page > Résolu

  8. #8
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci pour l'intérêt que tu portes à ma question...

    J'ai commencé de tester ta première proposition...je suis dans le Debug.Print du SQL...ça devrait fonctionner...

    j'arrête là ce soir...

    Merci

    SE
    Si le monde explose, la dernière voix audible sera celle d’un expert, disant que la chose est impossible. - P. Ustinov

  9. #9
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Bonjour,

    Après vérification et quelques "bidouillages" ça fonctionne.
    Pour info, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Dim qry As DAO.QueryDef
    Dim strSQL As String
    Dim str1 As String
    Dim str2 As String
     
    Dim intPosition As Integer
     
    Dim EtsOri As Variant
     
    Dim Ori As String
    Dim OriCo As String
    Dim Corpus1B As String
     
    Set qry = CurrentDb.QueryDefs("rqtRescolarisationEl")
    strSQL = qry.SQL
     
    EtsOri = [Forms]![frmEleves]![sfDossiers]![ua_origine]
    Select Case Me.ChoixRescolarisation
        Case 1
            If IsNull(EtsOri) Then
                Ori = InputBox("Veuillez saisir l'établissement d'origine.", "Information manquante")
                OriCo = InputBox("Veuillez saisir la commune de l'établissement d'origine.", "Information manquante")
                Corpus1B = Prenom(Ori) & " " & "à" & " " & Prenom(OriCo)
     
                intPosition = InStr(1, strSQL, "FROM", vbTextCompare)
     
                str1 = Left(strSQL, 1938)
                str2 = Right(strSQL, Len(strSQL) - 1938)
                strSQL = str1 & "," & " Corpus1B As Corpus1BIS" & str2
     
                qry.SQL = strSQL
                ......................
    Merci encore

    SE
    Si le monde explose, la dernière voix audible sera celle d’un expert, disant que la chose est impossible. - P. Ustinov

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les apostrophes dans le sql en VBA
    Par cyrilboulan dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 14/03/2017, 10h11
  2. Insérer variable dans instruction SQL
    Par nicodgb dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/03/2009, 16h59
  3. VBA : Insérer champs via requête SQL
    Par lesguignols dans le forum VBA Access
    Réponses: 8
    Dernier message: 31/12/2008, 12h17
  4. [A97] VBA : Commande sql pour insertion de champs dans une table
    Par JeremieT dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2006, 13h12
  5. Format dans Requete SQL sous VBA
    Par Sam 069 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/07/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo