PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Oracle
Oracle
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
Merci je vais tester cà.