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
Cette requete fonctionne parfaitement et les données sont bien ajoutées dans l'AS400.
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'
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
Etant donné que cela ne fonctionne pas, je suppose que, soit cela est infaisable sous Access, soit il faut passer par du VBA.
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
En VBA, j'ai bricolé ( terme exact vu mon niveau ) ceci :
Naturellement, cela ne fonctionne pas...
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
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.
Partager