l'échéance de Macros la dernière action commande l'export d'une table vers
une base ORACLE via ODBC
Or si une table du même nom est déjà présente dans cette base (oubli de
supprimer celle générée antérieurement) l'export tombe en échec
Est-il possible d'insérer dans la Macro une action qui vérifie la présence
de cette table et dans cette éventualité opère sa suppression avant le nouvel
export
Proposition de G genier :
Va dans le section module, fais nouveau.
une fois dans l'éditeur vba, tu tapes :
Function exportTableToOracle()
Set bds=currentdb()
chSQL = "SELECT * FROM tableOracle;"
on error goto noDropTable
bds.execute chSQL
'Si on est ici c'est que le SELECT à marcher donc on supprime
chSQL = "DROP TABLE tableOracle;" (à voir la syntaxe exacte)
'Ici tu appelle t'as requete que tu utilises dans tes macros pour le
'tranfert
bds.execute "maRequeteAjout"
'On a finit on sort
Exit Function
noDropTable:
'La table Oracle n'existait pas donc on ajoute basiquement
bds.execute "maRequeteAjout"
End Function
Dans ta macro au lieu de faire : OuvrirRequete "maRequeteAjout", tu feras
: ExecuterCode et tu iras chercher cette fonction.
NB : une fois que tu auras réussi à faire ça, il faudra vérifier si la
table est bien supprimer d'Oracle est pas simplement d Access, dans ce
cas, il nous faudra le nom du Driver ODBC et voir ce qu'on peut faire avec.
Ce que j'ai réalisé et obtenu :
Merci beaucoup de m'accorder un peu de ton temps pour m'aider
J'ai bien créé un module dans lequel j'ai inséré ton code VBA
Je l'ai quelque peu modifié comme suit :
Set bds=currentdb()
> chSQL = "SELECT * FROM tableOracle;"
> on error goto noDropTable
> bds.execute chSQL
>
> 'Si on est ici c'est que le SELECT à marcher donc on supprime
> chSQL = "DROP TABLE tableOracle;" (à voir la syntaxe exacte)
Modification :
> 'Ici tu appelle t'as requete que tu utilises dans tes macros pour le
> 'tranfert
> 'bds.execute "maRequeteAjout"
je ne donne pas l'instruction d'éxécuter la requète
"maRequeteAjout" car l'export vers Oracle est réalisé par une action
spéciphique de ma
Macro et non par une requète
> 'On a finit on sort
> Exit Function
> noDropTable:
Modification :
la même que précédemment
> 'La table Oracle n'existait pas donc on ajoute basiquement
> 'bds.execute "maRequeteAjout"
> End Function
Aprés cette adaptation si la table à créer n'est pas déjà en place sous
Oracle tout fonctionne correctement éxécution du code et export de la table
Par contre si la table est présente malgrés l'exécution du code qui ne bug
pas l'export tombe en échec car la table créé au paravant n'est pas supprimée
d'Oracle
L'instruction "DROP TABLE" n'est pas suivi d'effet
Une autre question se pose à moi lorsque je commande l'export via une action
de la Macro je dois
décliner sur des champs prévus à cet effet un certain nombre d'informations
concernant l'adresse de la base Oracle (Type base, nom base etc...) ce qui
n'est pas le cas dans ton code pour supprimer l'éventuelle table
N'est ce pas une lacune qui expliquerait le dysfonctionnement du code
Je pense à mon avis que le code VBA n'execute pas son action sur la base
ORACLE dans laquelle je souhaite que l'on analyse la présence d'une table et
de la supprimer si tel est le cas avant un nouvel export de celle-ci
Merci pour ton analyse et une proposition de solution
Il est tard ce jour (+ de 18H) Les obligations familiales m'appellent Je remets celà à Lundi et une fois les essais réalisés je te fait part du résultat
Merci encore et bon week-end
Utilises la touche F8 pour lancer le code en mode ligne par ligne.
testons avec une fonction plus simple.
Function test() fctConnection chSQL = "SELECT * FROM tableOracle;" daoDatabase.Execute chSQL end Function
Que donne ceci ?
"FFO" a écrit dans le message de news:
Comment puis je m'en assurer ??? Ce que je constate c'est que la table soit présente ou absente j'obtiens le
même message au même endroit
Faut il que je fasse d'autres tests et lesquels ???
Oui, je pense.
on peut avoir ce genre de message, par exemple, si on tente de modifier/ajouter des enregistrement sur une table en lecture seule.
Est ce que laphase du SELECT à fonctionner et il a trouvé la table ?
"FFO" a écrit dans le message de news:
Je ne sait pas si c'est mieux mais j'ai un autre message Phase noDropTable: Ligne daoDatabase.Execute "maMacroTransfert" message impossible d'exécuter
une requête sélection
A t'on progréssé ???
Ne nous laissons pas abattre !
Private daoConnection as daoDBEngine Private daoDatabase as DAO.Database
Private Function fctConnection() Set daoConnection = DBEngine.Workspaces(0) Set daoDatabase = daoConnection .OpenDatabase("", false, false, "ODBC;DSN=P27R002-PCLV;USR=scott;PWD=tiger") End function
N'oublis pas de modifier le USR=tonLogin et PWD=tonPassword
Est ce que comme ça c'est mieux ?
Dans l'attente de ton retour.
"FFO" a écrit dans le message de news:
On progresse toujours mais avec un nouvel arrêt Ligne : daoDatabase.Execute "maMacroTransfert" message erreur ODBC--L'appel à
échoué
Ce qui m'étonne c'est que la table sous Oracle est volontairement présente
pour juger par le fonctionnement de la macro et donc du code de sa suppression automatique Or l'éxécution du code s'enchaine directement sur la 2° partie celle
qui
traite la situation où il n'y a pas de table à supprimer (noDropTable)
alors
qu'elle est présente Si je force son éxécution sur la première partie en inhibant son renvoi
vers
la 2° (ajout d'une cote sur la ligne 'On Error GoTo noDropTable) l'arrêt
s'oppère sur la ligne : daoDatabase.Execute chSQL avec le même message
Il semble en fait que la communication n'est pas pu s'établir mais pour
quelle cause ???
Une nouvelle enigme à résoudre !!!!
Enleve le nomBase apres fctConnection, la fonction ne prend plus d'argument.
donc cela donne : fctConnection
"FFO" a écrit dans le message de news:
C'est mieux !!! Je retombe sur la situation précédente qui semble indiquée l'établissement
de la connection mais avec ce fameux bug exprimé dans mon message
J'espère que celà te dit quelque chose Dans l'attente
Bonjour,
Désolé j'ai raté ton msg d hier.
Non, non on avance bien :)
Le déclaration de la variable : Private daoConnection As DAO.Workspace
Donc remplace ton wrk.OpenConnection, en daoConnection ..OpenConnection.
En attente de ta réponse.
"FFO" a écrit dans le message de
news:
Aujourd'hui Jeudi 30/03/06 à la réouverture d'access la connection
bug
à
nouveau à la ligne : Set daoDatabase = wrk.OpenConnection("LaConnexion", dbDriverNoPrompt,
False,
strConnect) message erreur "Objet requis" Que s'est il passé depuis hier ??? Toujours est il qu'il faut constater une régression Arriverais je un jours a traiter la présence d'une table sous
Oracle à
partir d'access celà me semble un but particulièrement ardu à atteindre Merci pour toute aide
toujours plus fort !!! la bète est en passe d'être vaincu
!!!!
Net progré Je mexplique : J'ai coché selon tes indications rubrique Référence le choix
"Microsoft
DAO
3.5 Object Library" Or un 2° choix similaire était possible mais échapé à ma vigileance
intitullé "Microsoft DAO 3.6 Object Library" Rectification faite et oh! miracle la connexion a du s'effectuer
car si
bug
il ya il se produit sur la 2° partie du code paragraphe "Function
exportTableToOracle()" Ligne : fctConnection nomBaseODBC message erreur "incompatibilité
de
type"
Un peu maigre comme information mais tu devrais certainement
pouvoir
en
tirer profit
Courage Courage le bout du tunnel n'est pas loin
Aaaahhh..., ca me paraissait tellement logique, dsl de pas
y
avoir
pensé
avant :p
Bon, dans Outils->Référence, vérifie que l'autre DAO Object
est
bien
coché.
Du coup en va en profiter pour vérifier la déclaration des
variables
globales :
Ce code doit etre tout en haut cette ligne : Option Compare
Database,
doit
normalement etre mise par défaut. Option Compare Database Private daoConnection As DAO.Workspace --> j'ai changé le
type,
peut
etre
que l'erreur vient de la Private daoDatabase As DAO.Database
"FFO" a écrit dans le message
de
news:
On avance on avance !!!! effectivement tu as vu juste en rectifiant la disposition
des
lignes
la
compilation à appréciée ne relevant plus d'erreur Les ennuies ne sont pas fini pour autant car à l'exucution
du
code
via la
macro access rouspète encore (il falait bien que son mauvais
caractère
s'exprime encore !!!) avec comme message d'erreur :
Ligne Set daoConnection > CreateWorkspace("ODBCDirect", "Admin",
"",
dbUseODBC) message erreur "un composant ActiveX ne peut
pas
créer
l'objet"
Qu'en penses tu ???
D'accord :)
Ce qui est étrange c'est que j'ai sous les yeux ce même
code
et qu
il ne
me
met aucune erreur de syntaxe :/ Attention, j'ai peur que les lignes ne soient coupés.
Dans ce cas il faut mettre comme ça :
Set daoConnection = CreateWorkspace("ODBCDirect", "Admin",
Si tu veux mettre sur deux lignes il faut utiliser le
Il est tard ce jour (+ de 18H)
Les obligations familiales m'appellent
Je remets celà à Lundi et une fois les essais réalisés je te fait part du
résultat
Merci encore et bon week-end
Utilises la touche F8 pour lancer le code en mode ligne par ligne.
testons avec une fonction plus simple.
Function test()
fctConnection
chSQL = "SELECT * FROM tableOracle;"
daoDatabase.Execute chSQL
end Function
Que donne ceci ?
"FFO" <FFO@discussions.microsoft.com> a écrit dans le message de
news:D052A8F5-F68D-4C61-A9EC-CCCDE50E4C5C@microsoft.com...
Comment puis je m'en assurer ???
Ce que je constate c'est que la table soit présente ou absente j'obtiens
le
même message au même endroit
Faut il que je fasse d'autres tests et lesquels ???
Oui, je pense.
on peut avoir ce genre de message, par exemple, si on tente de
modifier/ajouter des enregistrement sur une table en lecture seule.
Est ce que laphase du SELECT à fonctionner et il a trouvé la table ?
"FFO" <FFO@discussions.microsoft.com> a écrit dans le message de
news:48BF5092-7C04-41FF-B0CC-8AF264BC37A0@microsoft.com...
Je ne sait pas si c'est mieux mais j'ai un autre message
Phase noDropTable:
Ligne daoDatabase.Execute "maMacroTransfert" message impossible
d'exécuter
une requête sélection
A t'on progréssé ???
Ne nous laissons pas abattre !
Private daoConnection as daoDBEngine
Private daoDatabase as DAO.Database
Private Function fctConnection()
Set daoConnection = DBEngine.Workspaces(0)
Set daoDatabase = daoConnection .OpenDatabase("", false, false,
"ODBC;DSN=P27R002-PCLV;USR=scott;PWD=tiger")
End function
N'oublis pas de modifier le USR=tonLogin et PWD=tonPassword
Est ce que comme ça c'est mieux ?
Dans l'attente de ton retour.
"FFO" <FFO@discussions.microsoft.com> a écrit dans le message de
news:9C6706CA-9223-4031-A5C4-FC9456E23815@microsoft.com...
On progresse toujours mais avec un nouvel arrêt
Ligne :
daoDatabase.Execute "maMacroTransfert" message erreur
ODBC--L'appel à
échoué
Ce qui m'étonne c'est que la table sous Oracle est volontairement
présente
pour juger par le fonctionnement de la macro et donc du code de sa
suppression automatique
Or l'éxécution du code s'enchaine directement sur la 2° partie
celle
qui
traite la situation où il n'y a pas de table à supprimer
(noDropTable)
alors
qu'elle est présente
Si je force son éxécution sur la première partie en inhibant son
renvoi
vers
la 2° (ajout d'une cote sur la ligne 'On Error GoTo noDropTable)
l'arrêt
s'oppère sur la ligne : daoDatabase.Execute chSQL avec le même
message
Il semble en fait que la communication n'est pas pu s'établir mais
pour
quelle cause ???
Une nouvelle enigme à résoudre !!!!
Enleve le nomBase apres fctConnection, la fonction ne prend plus
d'argument.
donc cela donne : fctConnection
"FFO" <FFO@discussions.microsoft.com> a écrit dans le message de
news:9CB584D2-6ADC-428E-BB39-3D203360ACBB@microsoft.com...
C'est mieux !!!
Je retombe sur la situation précédente qui semble indiquée
l'établissement
de la connection mais avec ce fameux bug exprimé dans mon
message
Aujourd'hui Jeudi 30/03/06 à la réouverture d'access la
connection
bug
à
nouveau à la ligne :
Set daoDatabase = wrk.OpenConnection("LaConnexion",
dbDriverNoPrompt,
False,
strConnect) message erreur "Objet requis"
Que s'est il passé depuis hier ???
Toujours est il qu'il faut constater une régression
Arriverais je un jours a traiter la présence d'une table
sous
Oracle à
partir d'access
celà me semble un but particulièrement ardu à atteindre
Merci pour toute aide
toujours plus fort !!! la bète est en passe d'être
vaincu
!!!!
Net progré
Je mexplique :
J'ai coché selon tes indications rubrique Référence le
choix
"Microsoft
DAO
3.5 Object Library"
Or un 2° choix similaire était possible mais échapé à ma
vigileance
intitullé "Microsoft DAO 3.6 Object Library"
Rectification faite et oh! miracle la connexion a du
s'effectuer
car si
bug
il ya il se produit sur la 2° partie du code paragraphe
"Function
exportTableToOracle()"
Ligne : fctConnection nomBaseODBC message erreur
"incompatibilité
de
type"
Un peu maigre comme information mais tu devrais
certainement
pouvoir
en
tirer profit
Courage Courage le bout du tunnel n'est pas loin
Aaaahhh..., ca me paraissait tellement logique, dsl de
pas
y
avoir
pensé
avant :p
Bon, dans Outils->Référence, vérifie que l'autre DAO
Object
est
bien
coché.
Du coup en va en profiter pour vérifier la déclaration
des
variables
globales :
Ce code doit etre tout en haut cette ligne : Option
Compare
Database,
doit
normalement etre mise par défaut.
Option Compare Database
Private daoConnection As DAO.Workspace --> j'ai changé
le
type,
peut
etre
que l'erreur vient de la
Private daoDatabase As DAO.Database
"FFO" <FFO@discussions.microsoft.com> a écrit dans le
message
Il est tard ce jour (+ de 18H) Les obligations familiales m'appellent Je remets celà à Lundi et une fois les essais réalisés je te fait part du résultat
Merci encore et bon week-end
Utilises la touche F8 pour lancer le code en mode ligne par ligne.
testons avec une fonction plus simple.
Function test() fctConnection chSQL = "SELECT * FROM tableOracle;" daoDatabase.Execute chSQL end Function
Que donne ceci ?
"FFO" a écrit dans le message de news:
Comment puis je m'en assurer ??? Ce que je constate c'est que la table soit présente ou absente j'obtiens le
même message au même endroit
Faut il que je fasse d'autres tests et lesquels ???
Oui, je pense.
on peut avoir ce genre de message, par exemple, si on tente de modifier/ajouter des enregistrement sur une table en lecture seule.
Est ce que laphase du SELECT à fonctionner et il a trouvé la table ?
"FFO" a écrit dans le message de news:
Je ne sait pas si c'est mieux mais j'ai un autre message Phase noDropTable: Ligne daoDatabase.Execute "maMacroTransfert" message impossible d'exécuter
une requête sélection
A t'on progréssé ???
Ne nous laissons pas abattre !
Private daoConnection as daoDBEngine Private daoDatabase as DAO.Database
Private Function fctConnection() Set daoConnection = DBEngine.Workspaces(0) Set daoDatabase = daoConnection .OpenDatabase("", false, false, "ODBC;DSN=P27R002-PCLV;USR=scott;PWD=tiger") End function
N'oublis pas de modifier le USR=tonLogin et PWD=tonPassword
Est ce que comme ça c'est mieux ?
Dans l'attente de ton retour.
"FFO" a écrit dans le message de news:
On progresse toujours mais avec un nouvel arrêt Ligne : daoDatabase.Execute "maMacroTransfert" message erreur ODBC--L'appel à
échoué
Ce qui m'étonne c'est que la table sous Oracle est volontairement présente
pour juger par le fonctionnement de la macro et donc du code de sa suppression automatique Or l'éxécution du code s'enchaine directement sur la 2° partie celle
qui
traite la situation où il n'y a pas de table à supprimer (noDropTable)
alors
qu'elle est présente Si je force son éxécution sur la première partie en inhibant son renvoi
vers
la 2° (ajout d'une cote sur la ligne 'On Error GoTo noDropTable) l'arrêt
s'oppère sur la ligne : daoDatabase.Execute chSQL avec le même message
Il semble en fait que la communication n'est pas pu s'établir mais pour
quelle cause ???
Une nouvelle enigme à résoudre !!!!
Enleve le nomBase apres fctConnection, la fonction ne prend plus d'argument.
donc cela donne : fctConnection
"FFO" a écrit dans le message de news:
C'est mieux !!! Je retombe sur la situation précédente qui semble indiquée l'établissement
de la connection mais avec ce fameux bug exprimé dans mon message
J'espère que celà te dit quelque chose Dans l'attente
Bonjour,
Désolé j'ai raté ton msg d hier.
Non, non on avance bien :)
Le déclaration de la variable : Private daoConnection As DAO.Workspace
Donc remplace ton wrk.OpenConnection, en daoConnection ..OpenConnection.
En attente de ta réponse.
"FFO" a écrit dans le message de
news:
Aujourd'hui Jeudi 30/03/06 à la réouverture d'access la connection
bug
à
nouveau à la ligne : Set daoDatabase = wrk.OpenConnection("LaConnexion", dbDriverNoPrompt,
False,
strConnect) message erreur "Objet requis" Que s'est il passé depuis hier ??? Toujours est il qu'il faut constater une régression Arriverais je un jours a traiter la présence d'une table sous
Oracle à
partir d'access celà me semble un but particulièrement ardu à atteindre Merci pour toute aide
toujours plus fort !!! la bète est en passe d'être vaincu
!!!!
Net progré Je mexplique : J'ai coché selon tes indications rubrique Référence le choix
"Microsoft
DAO
3.5 Object Library" Or un 2° choix similaire était possible mais échapé à ma vigileance
intitullé "Microsoft DAO 3.6 Object Library" Rectification faite et oh! miracle la connexion a du s'effectuer
car si
bug
il ya il se produit sur la 2° partie du code paragraphe "Function
exportTableToOracle()" Ligne : fctConnection nomBaseODBC message erreur "incompatibilité
de
type"
Un peu maigre comme information mais tu devrais certainement
pouvoir
en
tirer profit
Courage Courage le bout du tunnel n'est pas loin
Aaaahhh..., ca me paraissait tellement logique, dsl de pas
y
avoir
pensé
avant :p
Bon, dans Outils->Référence, vérifie que l'autre DAO Object
est
bien
coché.
Du coup en va en profiter pour vérifier la déclaration des
variables
globales :
Ce code doit etre tout en haut cette ligne : Option Compare
Database,
doit
normalement etre mise par défaut. Option Compare Database Private daoConnection As DAO.Workspace --> j'ai changé le
type,
peut
etre
que l'erreur vient de la Private daoDatabase As DAO.Database
"FFO" a écrit dans le message
de
news:
On avance on avance !!!! effectivement tu as vu juste en rectifiant la disposition
des
lignes
la
compilation à appréciée ne relevant plus d'erreur Les ennuies ne sont pas fini pour autant car à l'exucution
du
code
via la
macro access rouspète encore (il falait bien que son mauvais
caractère
s'exprime encore !!!) avec comme message d'erreur :
Ligne Set daoConnection > CreateWorkspace("ODBCDirect", "Admin",
"",
dbUseODBC) message erreur "un composant ActiveX ne peut
pas
créer
l'objet"
Qu'en penses tu ???
D'accord :)
Ce qui est étrange c'est que j'ai sous les yeux ce même
code
et qu
il ne
me
met aucune erreur de syntaxe :/ Attention, j'ai peur que les lignes ne soient coupés.
Dans ce cas il faut mettre comme ça :
Set daoConnection = CreateWorkspace("ODBCDirect", "Admin",