GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 21 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
G.Genier
Le #6090281
Bonjour,

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:
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






FFO
Le #6089971
J'ai l'impression compte tenu d'une certaine complexité de cette opération et
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


Bonjour,

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:
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











G.Genier
Le #6089851
Non tu n'empiètes pas sur mon temps ;), je le fais par plaisir si je peux
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:
J'ai l'impression compte tenu d'une certaine complexité de cette opération
et

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


Bonjour,

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:
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













FFO
Le #6089741
nouveau paramétrage "Microsoft DAO XX Object Library" Ok
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





Non tu n'empiètes pas sur mon temps ;), je le fais par plaisir si je peux
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:
J'ai l'impression compte tenu d'une certaine complexité de cette opération
et

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


Bonjour,

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:
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


















G.Genier
Le #6089711
Je sens comme de l'ironie dans tes messages...

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:
nouveau paramétrage "Microsoft DAO XX Object Library" Ok
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





Non tu n'empiètes pas sur mon temps ;), je le fais par plaisir si je
peux


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:
J'ai l'impression compte tenu d'une certaine complexité de cette
opération



et
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


Bonjour,

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:
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




















Publicité
Suivre les réponses
Poster une réponse
Anonyme