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

Langage SQL Discussion :

Requête SQL dynamique Access / AS400


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Requête SQL dynamique Access / AS400
    Bonjour à tous,

    Je refais appel à vos **grandes** competences ( lèche inside ) pour une fois de plus un "petit" soucis sql-ien.

    Historique :

    - Je pars d'une base sous Access avec des liens ODBC vers un AS400
    - Je fais essentiellement des requetes via des tables attachées depuis l'AS400, exclusivement des 'SELECT'

    Jusqu'ici, tout est ok.

    Mon soucis étant, j'aimerais pouvoir faire une requete Ajout/Modification vers l'AS400 via ma base Access.
    L'idée étant de faire une requete directe mais avec des parametres variables issus d'un formulaire de cette meme base Acces.
    J'ai cru comprendre que ce genre de chose n'etait pas faisable directement avec Access et qu'il fallait passer par du VBA.

    Voila la requete directe executée depuis Access avec les parametres rentrés "en dur" :

    Base ( de l'AS400 ): DESCDTA
    Table ( de l'AS400 ): DESTINATA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO DESCDTA.DESTINATA (DES_CODE_AGENCE_TRAITANTE, DES_CODE_DESTINATAIRE, DES_COMPTE_FACTURATION)
    SELECT '206072',DES_CODE_DESTINATAIRE,'123456'
    FROM DESCDTA.DESTINATA
    WHERE DES_CODE_AGENCE_TRAITANTE = '206035'
    AND DES_COMPTE_FACTURATION = '123456'
    Cette requete fonctionne parfaitement et les données sont bien ajoutées dans l'AS400.

    Le but étant de remplacer les valeurs numeriques par des champs renseignés via un formulaire ( ici les controles Reqagenceini - Reqcompteini et Reqagencefin - Reqcomptefin )

    En gros, ceci :

    Formulaire : Destinataire
    Controles : Reqagenceini,Reqcompteini,Reqagencefin,Reqcomptefin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO DESCDTA.DESTINATA (DES_CODE_AGENCE_TRAITANTE, DES_CODE_DESTINATAIRE, DES_COMPTE_FACTURATION)
    SELECT Formulaires!Destinataire!Reqagencefin,DES_CODE_DESTINATAIRE,Formulaires!Destinataire!Reqcomptefin
    FROM DESCDTA.DESTINATA
    WHERE DES_CODE_AGENCE_TRAITANTE = Formulaires!Destinataire!Reqagenceini
    AND DES_COMPTE_FACTURATION = Formulaires!Destinataire!Reqcompteini
    Etant donné que cela ne fonctionne pas, je suppose que, soit cela est infaisable sous Access, soit il faut passer par du VBA.

    En VBA, j'ai bricolé ( terme exact vu mon niveau ) ceci :

    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
     Dim Db As DAO.Database, qdef As DAO.QueryDef
    Dim strNomRequete As String, strSQL As String
     
    ' Nom de l'objet requête Access SQL-Direct
    strNomRequete = "DESCDTA_DESTI"
     
    ' Code SQL de la requête SQL-Direct
     
    strSQL = "INSERT INTO DESCDTA.DESTINATA (DES_CODE_AGENCE_TRAITANTE, DES_CODE_DESTINATAIRE, DES_COMPTE_FACTURATION)" & vbCrLf
    strSQL = "SELECT DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagencefin & "%',DES_CODE_DESTINATAIRE,DES_COMPTE_FACTURATION LIKE '" & Me.Reqcomptefin & "%'" & vbCrLf
    strSQL = "FROM DESCDTA.DESTINATA" & vbCrLf
    strSQL = "WHERE DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagenceini & "%'" & vbCrLf
    strSQL = "AND DES_COMPTE_FACTURATION LIKE '" & Me.Reqcompteini & "%'"
     
    ' On ferme la requête si elle est déjà ouverte en
    ' mode feuille de données
    DoCmd.Close acQuery, strNomRequete
    ' On référence la base de données en cours
    Set Db = CurrentDb
    ' on référence un objet QueryDef sur la requête SQL-Direct
    Set qdef = Db.QueryDefs(strNomRequete)
    ' on modifie le code SQL de la requête SQL-Direct
    qdef.SQL = strSQL
    Set qdef = Nothing
    Set Db = Nothing
    ' on ouvre la requête
    DoCmd.OpenQuery strNomRequete
     
    End Sub
    Naturellement, cela ne fonctionne pas...

    Si jamais quelqu'un avait une piste, ou meme un avis sur la faisabilité de la chose.

    Un gros merci d'avance, en esperant avoir été clair.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Le problème est plutôt Access que SQL à priori...
    Pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    strSQL = "INSERT INTO DESCDTA.DESTINATA (DES_CODE_AGENCE_TRAITANTE, DES_CODE_DESTINATAIRE, DES_COMPTE_FACTURATION)" & vbCrLf
    strSQL = "SELECT DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagencefin & "%',DES_CODE_DESTINATAIRE,DES_COMPTE_FACTURATION LIKE '" & Me.Reqcomptefin & "%'" & vbCrLf
    strSQL = "FROM DESCDTA.DESTINATA" & vbCrLf
    strSQL = "WHERE DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagenceini & "%'" & vbCrLf
    strSQL = "AND DES_COMPTE_FACTURATION LIKE '" & Me.Reqcompteini & "%'"
    devrait être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    strSQL = "INSERT INTO DESCDTA.DESTINATA (DES_CODE_AGENCE_TRAITANTE, DES_CODE_DESTINATAIRE, DES_COMPTE_FACTURATION)" & vbCrLf
    strSQL = strSQL & "SELECT DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagencefin & "%',DES_CODE_DESTINATAIRE,DES_COMPTE_FACTURATION LIKE '" & Me.Reqcomptefin & "%'" & vbCrLf
    strSQL = strSQL & "FROM DESCDTA.DESTINATA" & vbCrLf
    strSQL = strSQL & "WHERE DES_CODE_AGENCE_TRAITANTE LIKE '" & Me.Reqagenceini & "%'" & vbCrLf
    strSQL = strSQL & "AND DES_COMPTE_FACTURATION LIKE '" & Me.Reqcompteini & "%'"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour KookieMonster,

    Et d'abord merci d'avoir bien voulu jeter un oeil sur mon problème.

    J'ai fais les modifs et deja il y a du mieux ( grace à toi ).

    En effet, j'ai bien maintenant dans Access ma requete qui se créée correctement ( en tout cas elle a la meme structure que la version "en dur" )

    Par contre il y a toujours une erreur ( 3146 - ODBC pour info, meme si cela veut tout dire et ne rien dire ... )

    A priori le debuggage me positionne à la ligne suivante :

    DoCmd.OpenQuery strNomRequete

    J'avoue que sur ce coup, cela depasse mon niveau de competence ( qui reste bien bas ).

    Un chti coup d'main ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je me répond,

    Problème résolu :

    Erreur de syntaxe dans le code sur la derniere ligne de la requete SQL :

    strSQL = strSQL & "AND DES_COMPTE_FACTURATION = '" & Me.Reqcompteini & "' ,"

    J'ai malencontreusement laissé un '[espace],' à la fin de la ligne, c'est ca qui faisait bugger l'ensemble ( merci le code erreur 3146 ... )

    En tout cas merci à KookieMonster pour s'etre penché sur mon problème.

  5. #5
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Pas de soucis. Dans la requête initiale, tu avais un LIKE et pas de problèmes de ',' en fin de ligne.

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

Discussions similaires

  1. Requête SQL dynamique avec nom de table dans une variable
    Par jonjack dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/09/2011, 15h37
  2. Requête SQL sur Access
    Par LadyArwen dans le forum VBScript
    Réponses: 3
    Dernier message: 18/10/2006, 16h00
  3. Sous-requêtes SQL pour ACCESS
    Par bastoon dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/08/2006, 22h41
  4. requête sql sous access
    Par jadey dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/08/2006, 22h20
  5. Requêtes SQL pour access
    Par cciocc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/04/2005, 09h45

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