OVH Cloud OVH Cloud

Suppression table base externe ODBC

12 réponses
Avatar
FFO
A l'échéance de Macros la dernière action commande l'export d'une table vers
une base 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
Merci pour votre concours

2 réponses

1 2
Avatar
G.Genier
Bonjour,

Malheuresement, je ne vois pas comment des macro "de base" pourrait te
donner ce résultat.
Je suis pret à t'aider sans problème.

Commençons :
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.

Cordialement.

On Fri, 24 Mar 2006 08:46:02 -0800, FFO wrote:

Je dois avouer que VBA n'est pas ma tasse de thé
Si toute fois c'est la meilleur voir la seule solution je suis pret à
l'adopter mais j'aurais besoin de votre coup de main, je ne demande qu'à
apprendre
A ce jour je travaille pour gagner du temps à 95% avec les modeleurs
utilisateur pour réaliser mes tables, requètes et Macros dans lesquelles je
liste toutes les actions à réaliser selon un ordre bien établi pour concevoir
des tables sous access que j'exporte vers des bases Oracle en vu de leur
intégration dans des applications qui nous sont propres
Je dois avouer qu'à ce jour cette manière d'opérer m'apporte grandement
satisfaction car j'obtiens des résultats trés satisfaisant en un minimum de
temps sachant que c'est une pièce d'un puzzle beaucoup plus important dans
lequel je fait intervenir des macros Excel et des requètes SQL
Mais si l'on veux avoir une vision généraliste pour réaliser ce genre de
proget on ne peux s'investir dans un domaine plus spécialisé comme le VBA
d'access préférant la simplicité de l'aide utilisateur pour un gain de temps
Il va de soit que dans le cas qui me préoccupe j'atteinds peut être les
limites de ma conception et peut être dois je exceptionnellement faire une
incursion dans ce secteur
Je suis donc à votre écoute mais il faut me prendre comme un débutant pour
mener à bien les manipulations à mettre en place

Je vous remercie beaucoup pour votre concours


Euh, oui j'ai pris pas comme postulat que tu parlais de VBA.

Je répond un peu à la place de FFO, désolé.
C'est pas de savoir si la table est libre ou pas, mais si elle existe ou
pas.
Je pense qu'on peut récupérer la liste des table de la db Oracle, et en
bouclant sur la liste des tables onsaura si elle existe ou pas.
Mais je pense qu'en therme de tps de traitement, ma proposition est plus
rapide, après c'est une question de choix.

Parce qu'avec le BeginTrans, CommitTrans, tu devras qd même capturer
l'erreur et si la table existe on fait quoi ? Un rollback, mais ça avance à
rien, il faut d'abord détruire la table :p


Cordialement;

"Nobodyisperfect" a écrit dans le message de
news:%
Bonjour FFO,

Quand tu parles de macro, ce sont des macros commandes ou du VBA.. En
VBA et en langage ADO, il y a bien du BeginTrans, CommitTrans et cie..
N'ayant plus fait de programmation depuis un certain temps, voire un temps
certain....

C'est pour vérifier si la table que tu veux atteindre soit libre et à
partir de là, tu peux lancer la proc

@+
Olivier











Avatar
FFO
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 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 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

Merci pour ton analyse

Bonjour,

Malheuresement, je ne vois pas comment des macro "de base" pourrait te
donner ce résultat.
Je suis pret à t'aider sans problème.

Commençons :
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.

Cordialement.

On Fri, 24 Mar 2006 08:46:02 -0800, FFO wrote:

Je dois avouer que VBA n'est pas ma tasse de thé
Si toute fois c'est la meilleur voir la seule solution je suis pret à
l'adopter mais j'aurais besoin de votre coup de main, je ne demande qu'à
apprendre
A ce jour je travaille pour gagner du temps à 95% avec les modeleurs
utilisateur pour réaliser mes tables, requètes et Macros dans lesquelles je
liste toutes les actions à réaliser selon un ordre bien établi pour concevoir
des tables sous access que j'exporte vers des bases Oracle en vu de leur
intégration dans des applications qui nous sont propres
Je dois avouer qu'à ce jour cette manière d'opérer m'apporte grandement
satisfaction car j'obtiens des résultats trés satisfaisant en un minimum de
temps sachant que c'est une pièce d'un puzzle beaucoup plus important dans
lequel je fait intervenir des macros Excel et des requètes SQL
Mais si l'on veux avoir une vision généraliste pour réaliser ce genre de
proget on ne peux s'investir dans un domaine plus spécialisé comme le VBA
d'access préférant la simplicité de l'aide utilisateur pour un gain de temps
Il va de soit que dans le cas qui me préoccupe j'atteinds peut être les
limites de ma conception et peut être dois je exceptionnellement faire une
incursion dans ce secteur
Je suis donc à votre écoute mais il faut me prendre comme un débutant pour
mener à bien les manipulations à mettre en place

Je vous remercie beaucoup pour votre concours


Euh, oui j'ai pris pas comme postulat que tu parlais de VBA.

Je répond un peu à la place de FFO, désolé.
C'est pas de savoir si la table est libre ou pas, mais si elle existe ou
pas.
Je pense qu'on peut récupérer la liste des table de la db Oracle, et en
bouclant sur la liste des tables onsaura si elle existe ou pas.
Mais je pense qu'en therme de tps de traitement, ma proposition est plus
rapide, après c'est une question de choix.

Parce qu'avec le BeginTrans, CommitTrans, tu devras qd même capturer
l'erreur et si la table existe on fait quoi ? Un rollback, mais ça avance à
rien, il faut d'abord détruire la table :p


Cordialement;

"Nobodyisperfect" a écrit dans le message de
news:%
Bonjour FFO,

Quand tu parles de macro, ce sont des macros commandes ou du VBA.. En
VBA et en langage ADO, il y a bien du BeginTrans, CommitTrans et cie..
N'ayant plus fait de programmation depuis un certain temps, voire un temps
certain....

C'est pour vérifier si la table que tu veux atteindre soit libre et à
partir de là, tu peux lancer la proc

@+
Olivier















1 2