Suppression table externe ODBC suite
Le
FFO
Rappel :
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
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

Poser une question


Je pensais que la table Oracle était une table liée à Access via ODBC.
Donc évidement la requête "SELECT..." ne fonctionne jamais en fait donc le
code (à juste raison) considère que la table n'existe pas, donc passe
toujours par la même chemin.
Donc c'est simple, on va créer une connection sur le serveur Oracle, se
connecter à la base et relancer la requete "Select..." sur la bonne table
cette fois.
Actioooon (comme dirait une célèbre chanteuse si on peut dire ;))
Private daoConnection as daoDBEngine
Private daoDatabase as DAO.Database
Private Function fctConnection(nomdBaseODBC)
Set daoConnection =new dao.dbengine
Set daoDatabase = daoConnection .OpenDatabase(nomdBaseODBC, false,
false, "ODBC;")
End function
Private fctFermeture()
daoDatabase .close
Set daoDatabase =nothing
Set daoConnection =nothing
end function
Function exportTableToOracle()
chSQL = "SELECT * FROM tableOracle;"
fctConnection nomBaseODBC
on error goto noDropTable
daoDatabase.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
daoDatabase.execute "maMacroTransfert"
'On a finit on sort
Exit Function
noDropTable:
'La table Oracle n'existait pas donc on ajoute basiquement
daoDatabase.execute "maMacroTransfert"
End Function
Quelque chose dans ce style ?
"FFO" news:
de mon maigre savoir en ce domaine que je suis sur le point d'occuper
honteusement ton précieux temps
J'ose malgré tout abuser et te rendre compte du résultat aprés un simple
copier coler de ton code :
Access rouspète sur la première ligne prétextant qui l'attend fiévreusement
une fin d'instruction en sélectionnant "as" :
FPrivate daoConnection as daoDBEngine
Forte inquiètude sur une des lignes suivantes d'un rouge écarlate (mauvais
signe) augurant un message pas trés sympathique de la part de l'outil que je
ne peux connaitre pour l'instant tant que le premier n'est pas résolu :
Set daoDatabase = daoConnection .OpenDatabase(nomdBaseODBC, false,
false, "ODBC;")
Je dois trés certainement à un endroit ou à un autre décliner les paramètre
de ma base ORACLE : où et de quelle manière ????
A l'export qui fonctionne admirablement bien le paramètrage est réalisé
ainsi :
Action : TransférerBase
Type transfert : Exportation
Type base : Base de données ODBC
Nom base : ODBC;DSN=P27R002-PCLV;PWD="mot de passe"
Type objet : Table
Source : "nom de la table sous access"
Destination : "nom de la table donné sous ORACLE"
Structure seulement : Non
Un certain nombre de ces informations doivent paraitre dans le code
Tu voudras bien m'indiquer l'art et la manière
Mille fois Merci
aider.
Permier point, j'ai omis de t'indiquer de cocher dans "Outils->Référence",
le choix : "Microsoft DAO XX Object Library" ou XX est un numéro de version
Deuxième point, la ligne est : "Private daoConnection as daoDBEngine", je
pense que le "F" devant le "P" est un soucis de copier-coller.
On va modifier la connection avec ces informations que je n'avais pas.
On va changer la fonction
Private function fctConnection()
Set daoConnection = CreateWorkspace("ODBCDirect", "Admin", "",
dbUseODBC)
strConnect "ODBC;DSN=P27R002-PCLV;UID=LeLogin;PWD=LeMotDePasse;DATABASE=LaBase"
'changer LeLogin, LeMotDePasse et LaBase
'Ouvrir une connexion
Set daoDatabase = wrk.OpenConnection("LaConnexion",
dbDriverNoPrompt, False, strConnect)
end function
"FFO" news:
Ligne : Private daoConnection As daoDBEngine message erreur de compilation
type défini par l'utilisateur non défini
Ligne : Set daoConnection = CreateWorkspace("ODBCDirect", "Admin", "",
dbUseODBC) message erreur de compilation erreur de syntaxe
Ligne : strConnect "ODBC;DSN=P27R002-PCLV;UID=LeLogin;PWD=LeMotDePasse;DATABASE=P27R002-PCLV"
Message erreur compilation attendu numéro de ligne ou étiquette ou
instruction ou fin d'instruction
Ligne : Set daoDatabase = wrk.OpenConnection("LaConnexion",
dbDriverNoPrompt, False, strConnect) message erreur de compilation erreur de
syntaxe
Je te précise que pour obtenir les différent message j'inhibe chaque ligne
en erreur en les faisant précéder par une côte avant de lancer une nouvelle
compilation
C'est grave docteur ????
L'enfant se présente mal mais les miracles celà existe !!!!
Merci pour tes doigts de fée
Essais cela s'il te plait :
Private daoConnection As DAO.Workspace
Private daoDatabase As DAO.Database
Private Function fctConnection()
Set daoConnection = CreateWorkspace("ODBCDirect", "Admin", "",
dbUseODBC)
strConnect "ODBC;DSN=P27R002-PCLV;UID=LeLogin;PWD=LeMotDePasse;DATABASE=P27R002-PCLV"
'changer LeLogin, LeMotDePasse et LaBase
'Ouvrir une connexion
Set daoDatabase = daoConnection.OpenConnection("LaConnexion",
dbDriverNoPrompt, False, strConnect)
End Function
Avant d'avancer plus tentons de nous connecter.
"FFO" news: