|
Iniciado por olivier.naudeau, jul., 06 2005 1:01 PM - 5 respostas |
| |
| | | |
|
| |
Publicado em julho, 06 2005 - 1:01 PM |
bonjour, je voudrais savoir s'il est possible de convertir une base HyperFile en une base Oracle. En effet, j'ai développé une application qui repose sur Hyperfile mais je doit maintenant migrer sur Oracle. Toutes les informations à ce sujet sont les bienvenues |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 06 2005 - 2:38 PM |
Oui, c'est possible.
Personnellement, j'avais développé une appli ne fonctionnant que sous HyperFile, et aujourd'hui elle est également disponible pour Oracle (ainsi que pour MySql, et SQLServer) par un simple paramétrage : au lancement de l'appli, il faut utiliser la fonction HChangeConnexion, HCréation, etc... Je n'ai pas modifié mon analyse.
Je vous suggère d'utiliser l'accès via le provider OLEDB fournit gratuitement par Oracle (et non pas celui installé par défaut avec Windows).
Sinon, vous pouvez aussi acheter l'accès natif Oracle, soit disant plus rapide, mais surtout payant ! Notez que la version d'évaluation gratuite de cet accès natif est inutilisable, car des lettres sont volontairement échangées dans les résultats des requêtes.
Notez aussi qu'il n'existe pas de type 'idantifiant automatique' sous Oracle, et qu'il faut, pour palier ce manque, créer des séquences et des déclencheurs (triggers).
Les types heures HyperFile et Oracle ne sont pas compatibles. Personnellement, au lancement de mon application, je modifie toutes les rubriques définies en types dates ou heures dans l'analyse hyperfile, en rubrique de type texte.
Cordialement, Arnaud GERMAIN |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 06 2005 - 6:22 PM |
Merci, cela me rassure que ca soit possible bien que cela me semble un peu compliqué pour le moment, je vais me pencher davantage sur le sujet en suivant vos conseils. Si vous avez des documentations sur la technique à utiliser, vous pouvez me les faire parvenir.
Cordialement Olivier Naudeau. |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 07 2005 - 12:26 AM |
Puis je avoir ton trigger pour ID automatique ou ine idée sur comment proceder , en cas fichier, envoyer àHerve_paul@yahoo.fr |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 07 2005 - 1:11 PM |
Voici les étapes de connexion à la BD Orcale, à l'ouverture de l'appli :
//---------- INITIALISATION DU PROJET ------------- HFermeConnexion("CNX") SELON BD CAS "Oracle" : SI PAS HOuvreConnexion("CNX","scott","tiger","NomBase","","OraOLEDB.Oracle") ALORS FinProgramme(HErreurInfo()) FIN SI PAS HChangeConnexion("*","CNX") ALORS FinProgramme(HErreurInfo()) FIN SI PAS HCréationSiInexistant("*",hOuvertureDifférée) ALORS FinProgramme(HErreurInfo()) FIN InitBdOra() CAS "SQL Server" : ... CAS "MySQL" : ... CAS "HyperFile" : ... }
//----------------------------------------------------------- PROCEDURE InitBdOra()
chReq,ligneRub,ListFic,listRub,champ,table est une chaîne i,j est un entier
ListFic = HListeFichier() //Parcours des tables POUR i=1 A ChaîneOccurrence(ListFic,RC) table=ExtraitChaîne(ListFic, i, RC) listRub=HListeRubrique(table,hLstDétail) //parcours des rubriques POUR j=1 A ChaîneOccurrence(listRub,RC) ligneRub=ExtraitChaîne(listRub,j,RC) champ=ExtraitChaîne(ligneRub,1,TAB) chReq="" SELON ExtraitChaîne(ligneRub,3,TAB) // type de la rubrique CAS 1,28 : //auto-incréments CreateTrigger(table,champ) CAS 11 : //heure chReq="ALTER TABLE "+table+" MODIFY "+champ+" VARCHAR(4)" SI PAS HExécuteRequêteSQL("ReqAutoIncr","CNX",hRequêteSansCorrection,chReq) ALORS FinProgramme(HErreurInfo()) FIN HAnnuleDéclaration("ReqAutoIncr") FIN FIN FIN
//-------------------------------------------------------- PROCEDURE CreateTrigger(table,champ)
chReq est une chaîne
//SEQUENCE // On commence par vérifier si la séquence existe déjà chReq="SELECT SEQUENCE_NAME FROM ALL_SEQUENCES WHERE SEQUENCE_NAME='"+Majuscule("seq_"+table)+"'" SI PAS HExécuteRequêteSQL("ReqSeq","CNX",hRequêteSansCorrection,chReq) ALORS Erreur(HErreurInfo()) SINON HLitPremier("ReqSeq") SI HEnDehors("ReqSeq") ALORS // si la séquence n'existe pas, on la crée chReq="CREATE SEQUENCE seq_"+table SI PAS HExécuteRequêteSQL("ReqSeq","CNX",hRequêteSansCorrection,chReq) ALORS Erreur(HErreurInfo()) FIN FIN FIN HAnnuleDéclaration("ReqSeq")
//TRIGGER // On commence par vérifier si le trigger existe déjà chReq="SELECT TRIGGER_NAME FROM ALL_TRIGGERS WHERE TRIGGER_NAME='"+Majuscule("trig_"+table)+"'" SI PAS HExécuteRequêteSQL("ReqTrig","CNX",hRequêteSansCorrection,chReq) ALORS Erreur(HErreurInfo()) SINON HLitPremier("ReqTrig") SI HEnDehors("ReqTrig") ALORS // si le trigger n'existe pas, on le crée chReq="CREATE TRIGGER trig_"+table+RC chReq+="BEFORE INSERT ON "+table+" FOR EACH ROW"+RC chReq+="BEGIN"+RC chReq+=TAB+"SELECT seq_"+table+".NEXTVAL INTO :NEW."+champ+" FROM DUAL;"+RC chReq+="END;" SI PAS HExécuteRequêteSQL("ReqTrig","CNX",hRequêteSansCorrection,chReq) ALORS Erreur(HErreurInfo()) FIN FIN HAnnuleDéclaration("ReqTrig") FIN
//-------------------------
Voilà, je ne pense pas que ce soit parfait, mais ça fonctionne pour moi.
En expérant vous avoir aidé, Arn;o) |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 07 2005 - 1:44 PM |
| |
| |
| | | |
|
| | | | |
| | |
|