|
[ORA-OLEDB] HCréation ne crée pas toutes les tables |
Iniciado por a.germain, jun., 21 2005 8:44 PM - 6 respostas |
| |
| | | |
|
| |
Publicado em junho, 21 2005 - 8:44 PM |
Bonjour à tous, Je souhaite connecter mon appli à une base Oracle via OLEDB (oraOLEDB.Oracle).
Pour ce faire, j'utilise HChangeConnexion, et ensuite HCreationSiInexistant("*") pour créer toutes les tables décrites dans l'analyse.
=> Bien que HCréation ne renvoie pas d'erreur, 4 tables ne sont pas créées, et je ne voie pas d'explication. Toutes les autres sont créées correctement.
Afin de voir un peu plus en détails, j'ai abandonné le paramètre "*" de HCréationSiInexistant, pour parcourir la liste des fichiers et les créer 1 par 1. Pareil : tout fonctionne, sauf pour 4 tables.
J'ai ensuite voulu faire moi même le test de l'existance de chaque table, c'est le code qui suit. Idem : 4 de mes tables ne sont pas crées.
i est un entier chReq,table sont des chaines
ListFic est une chaine = HListeFichier() POUR i=1 A ChaîneOccurrence(ListFic,RC)
table=ExtraitChaîne(ListFic, i, RC) //nom de la table
//requête sur la liste des tables de la base chReq ="SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='"+Majuscule(table)+"'" SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable") SI HEnDehors("ReqSelTable") ALORS //la table n'existe pas SI PAS HCréation(table) ALORS //création de la table => renvoie tjs vrai ! Erreur(HErreurInfo(hErrComplet)) FIN FIN HAnnuleDéclaration("ReqSelTable")
//On Vérifie que la nouvelle table apparait dans la liste des tables SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable") SI HEnDehors("ReqSelTable") ALORS Erreur("La création de "+table+" a échouée") //erreur sur mes 4 tables "problématiques" FIN
FIN
Pour info, les tables "problématiques" contiennent des colonnes de type date, numérique et texte, rien de bien particulier par rapport aux autres tables qui n'ont pas posé de problèmes.
Si quelqu'un a la moindre suggestion, je le remercie d'avance.
Cordialement, Arnaud |
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 11:07 AM |
Bonjour,
Il est possible que vos tables portent un nom physique identique à d'autres tables. Vérifiez que le nom physique (Nom de la table dans la base de données externe) décrit dans l'éditeur d'analyse ne correspond pas au nom d'une autre table. Cette information est disponible dans la fenêtre de description des fichiers.
-- Ed en Ligne
"Arnaud" <a.germain@diags.fr> a écrit dans le message de news: 42b8394b$1@news.pcsoft.fr...
Bonjour à tous, Je souhaite connecter mon appli à une base Oracle via OLEDB (oraOLEDB.Oracle).
Pour ce faire, j'utilise HChangeConnexion, et ensuite HCreationSiInexistant("*") pour créer toutes les tables décrites dans l'analyse.
=> Bien que HCréation ne renvoie pas d'erreur, 4 tables ne sont pas créées, et je ne voie pas d'explication. Toutes les autres sont créées correctement.
Afin de voir un peu plus en détails, j'ai abandonné le paramètre "*" de HCréationSiInexistant, pour parcourir la liste des fichiers et les créer 1 par 1. Pareil : tout fonctionne, sauf pour 4 tables.
J'ai ensuite voulu faire moi même le test de l'existance de chaque table, c'est le code qui suit. Idem : 4 de mes tables ne sont pas crées.
i est un entier chReq,table sont des chaines
ListFic est une chaine = HListeFichier() POUR i=1 A ChaîneOccurrence(ListFic,RC)
table=ExtraitChaîne(ListFic, i, RC) //nom de la table
//requête sur la liste des tables de la base chReq ="SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='"+Majuscule(table)+"'" SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable") SI HEnDehors("ReqSelTable") ALORS //la table n'existe pas SI PAS HCréation(table) ALORS //création de la table => renvoie tjs vrai ! Erreur(HErreurInfo(hErrComplet)) FIN FIN HAnnuleDéclaration("ReqSelTable")
//On Vérifie que la nouvelle table apparait dans la liste des tables SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable") SI HEnDehors("ReqSelTable") ALORS Erreur("La création de "+table+" a échouée") //erreur sur mes 4 tables "problématiques" FIN
FIN
Pour info, les tables "problématiques" contiennent des colonnes de type date, numérique et texte, rien de bien particulier par rapport aux autres tables qui n'ont pas posé de problèmes.
Si quelqu'un a la moindre suggestion, je le remercie d'avance.
Cordialement, Arnaud
|
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 12:17 PM |
Bonjour, et merci pour votre réponse.
Avant de faire HCréation(table), je commence par vérifier si la table existe déjà, en sélectionnant, parmi la liste de toutes les tables de la base externe, une éventuelle table qui porte le même nom :
//requête sur la liste des tables de la base chReq ="SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='"+Majuscule(table)+"'" SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable")
C'est seulement si cette requête ne renvoie pas de résultat que je fais HCréation(table) :
SI HEnDehors("ReqSelTable") ALORS //la table n'existe pas SI PAS HCréation(table) ALORS //création de la table => renvoie tjs vrai ! Erreur(HErreurInfo(hErrComplet)) SINON Info("HCréation("+table+") ","n'a pas renvoyé d'erreur.") FIN FIN HAnnuleDéclaration("ReqSelTable")
Suite à votre suggestion, j'ai de plus vérifier manuellement qu'il n'y avait pas, dans la base externe, de tables portant le nom des tables à créer. Il n'y en a pas.
=> En fait, je pense qu'il n'y a pas de problème pour la détection de l'existance de la table. Mais c'est bien la création de la table qui ne se fait pas avec HCréation (mais renvoie quand même vrai !).
J'espère que quelqu'un aura une autre idée. Arnaud |
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 12:49 PM |
Bonjour,
Dans l'éditeur d'analyse, pour chaque fichier décrit avec un nom logique, il est possible de lui donner un nom physique différent. Par exemple : le fichier client à un nom physique : CLIENT_SQL et le fichier Fournisseur à un nom physique : CLIENT_SQL. Ce nom donné par erreur aura pour conséquence que la commande HCreation(Fournisseur) ne fera rien car HCréation(client) a déjà créé CLIENT_SQL.
Dans votre cas, vous devez vérifier que le nom physique(pas le nom logique) décrit dans l'analyse n'existe pas pour un autre fichier.
-- Ed en Ligne
"Arnaud" <a.germain@diags.fr> a écrit dans le message de news: 42b91418$1@news.pcsoft.fr...
Bonjour, et merci pour votre réponse.
Avant de faire HCréation(table), je commence par vérifier si la table existe déjà, en sélectionnant, parmi la liste de toutes les tables de la base externe, une éventuelle table qui porte le même nom :
//requête sur la liste des tables de la base chReq ="SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='"+Majuscule(table)+"'" SI PAS HExécuteRequêteSQL("ReqSelTable",chReq) ALORS Erreur(HErreurInfo(hErrComplet)) FIN HLitPremier("ReqSelTable")
C'est seulement si cette requête ne renvoie pas de résultat que je fais HCréation(table) :
SI HEnDehors("ReqSelTable") ALORS //la table n'existe pas SI PAS HCréation(table) ALORS //création de la table => renvoie tjs vrai ! Erreur(HErreurInfo(hErrComplet)) SINON Info("HCréation("+table+") ","n'a pas renvoyé d'erreur.") FIN FIN HAnnuleDéclaration("ReqSelTable")
Suite à votre suggestion, j'ai de plus vérifier manuellement qu'il n'y avait pas, dans la base externe, de tables portant le nom des tables à créer. Il n'y en a pas.
=> En fait, je pense qu'il n'y a pas de problème pour la détection de l'existance de la table. Mais c'est bien la création de la table qui ne se fait pas avec HCréation (mais renvoie quand même vrai !).
J'espère que quelqu'un aura une autre idée. Arnaud
|
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 1:03 PM |
Vérifiez le nom des colonnes des tables en question, ces noms pourrait correspondre a des nom systemes d'oracle du genre todate ou autre |
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 2:12 PM |
Merci pour ces précisions. Toutefois, pour une base Oracle, il ne me semble pas qu'il y ait cette distinction nom physique / nom logique. En effet, il ne s'agit alors pas de fichiers, mais bien de tables. La fonction HCréation(nomLogiqueTable) est, je pense, une simple requête "CREATE TABLE nomLogiqueTable ...;".
Suite à votre message précédent, j'avais tout de même vérifier l'unicité des noms physiques des fichiers de l'analyse. Je vous remercie car c'est grâce à votre suggestion que j'ai trouvé un moyen de contourner (mais pas de comprendre) le problème :
=> J'ai renommé les tables problématiques (noms logiques), généré l'analyse, puis j'ai remis les noms initiaux et regénéré l'analyse, et depuis, HCréation fonctionne aussi sur ces tables. Cependant, je n'ai pas d'explication.
Merci encore
Arnaud |
| |
| |
| | | |
|
| | |
| |
Publicado em junho, 22 2005 - 2:18 PM |
Merci pour votre suggestion, j'ai vérifié les noms des colonnes, il n'y a pas de "mot-clé" Oracle. En fait, en utilisant des requêtes SQL de création de table tout fonctionne : CREATE TABLE... mais à la moindre modification de l'analyse, il faut reécrire les requètes !
J'ai cependant réussi à contourner (mais pas à comprendre) le problème :
=> J'ai renommé les tables problématiques, généré l'analyse, puis j'ai remis les noms initiaux et regénéré l'analyse, et depuis, HCréation fonctionne aussi sur ces tables. Cependant, je n'ai pas d'explication !
Arnaud |
| |
| |
| | | |
|
| | | | |
| | |
|