Requête SQL dynamique Access / AS400
Bonjour à tous,
Je refais appel à vos **grandes** competences ( lèche inside :lol: ) 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:
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:
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:
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.