Bonjour,
Voici un code pour installer le driver ODBC hyperfile par programmation afin de pouvoir lire un fichier .fic depuis JAVA (ou autre), sans forcément avoir Windev d'installé sur sa machine.
Le code à été testé sous Windev 15.
Tout d'abord, il faut disposer de 5 fichiers .dll fournis par PC-Soft (Remplacer le 15 par votre version de Windev) :
-WD150HF.DLL
-WD150HFO.DLL
-WD150SQL.DLL
-WD150UNI.DLL
-WD150VM.DLL
A partir de la version 140026, les DLL se trouvent dans le répertoire "Program Files\Common Files\PC Soft\15.0\ODBC".
Pour les versions précédentes, elles se trouvent dans "Windows\system32".
Si vous ne disposez pas de ces fichiers, vous devriez pouvoir récupérer le pack d'installation "ODBC sur HyperFileSQL" sur le site de PC-Soft, dans l'espace de téléchargement des modules communs correspondant à votre version de Windev (Rechercher "odbc hyperfile modules communs") :
http://www.pcsoft.fr/recherche.htm?s...6language%3DFR
1/Installation du driver HyperfileSQL par programmation
-sRepDLL correspond au répertoire dans lequel se trouvent les 5 fichiers .DLL du driver.
Attention : Sous Windows Vista, il faut désactiver le contrôle d'accès utilisateur (UAC) de l'utilisateur courant pour pouvoir écrire dans le registre.
2/Installation de la source de donnée (DSN) par programmation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 LOCAL sKey est une chaine sKeyHF est une chaine sRepDLL est une chaine sKey = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI" sKeyHF = sKey+"\HyperFileSQL\" sRepDLL = "C:\Program Files\Common Files\PC SOFT\15.0\ODBC\" SI PAS RegistreCréeClé(sKeyHF) ALORS SI ErreurDétectée ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN FIN SI PAS RegistreEcrit(sKeyHF,"APILevel","1",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"ConnectFunctions","NYN",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"Driver",sRepDLL+"WD150HFO.DLL",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"DriverODBCVer","02.10",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"FileExtns","*wdd",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"FileUsage","0",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"Language","0",RegistreTypeEntier_8) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"Setup",sRepDLL+"WD150HFO.DLL",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"SQLLevel","0",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyHF,"UsageCount","0",RegistreTypeEntier) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN
Cette installation peut être faite en utilisant l'administrateur de données ODBC (ODBCAD32.EXE), comme expliqué ici :
http://doc.pcsoft.fr/fr-FR/?3044273
Par programmation, cela donne :
-sRepDLL correspond au répertoire dans lequel se trouvent les 5 fichiers .DLL du driver.
-sDSN correspond au nom que vous souhaitez donner à la source de données HyperFileSQL.
Ce nom permettra d'identifier la base de données HyperFileSQL dans les programmes externes.
-sWDD correspond au chemin complet de l'analyse hyperfile (Fichier *.WDD).
-sRepFic correspond au répertoire des fichiers hyperfile correspondants à l'analyse (Fichiers *.FIC).
3/Accès à la source de données depuis JAVA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 LOCAL sKey est une chaine sKeyDSN est une chaîne sDSN est une chaine sWDD est une chaine sRepFic est une chaine sDSN = "HELLODBC" sWDD = "C:\ODBC_TEST\Analyse.WDD" sRepFic = "C:\ODBC_TEST\" sKey = "HKEY_CURRENT_USER\Software\ODBC\ODBC.INI" sKeyDSN = sKey+"\"+sDSN SI PAS RegistreCréeClé(sKeyDSN) ALORS SI ErreurDétectée ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN FIN SI PAS RegistreEcrit(sKeyDSN,"Analyse",sWDD,RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyDSN,"Driver",sRepDLL+"WD150HFO.DLL",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyDSN,"Encryption","",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyDSN,"PWDXX","",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreEcrit(sKeyDSN,"RepFic",sRepFic,RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN SI PAS RegistreCréeClé(sKey+"\ODBC Data Sources") ALORS SI ErreurDétectée ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN FIN SI PAS RegistreEcrit(sKey+"\ODBC Data Sources",sDSN,"HyperFileSQL",RegistreTypeChaîne) ALORS Erreur(ErreurInfo(errMessage)) RENVOYER Faux FIN
Des infos complémentaires sur la doc PC-Soft :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ODBC_TEST { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String jURL = "jdbc:odbc:HELLODBC"; try { Connection Con = DriverManager.getConnection(jURL); Statement jRequete = Con.createStatement(); ResultSet Resultat = jRequete.executeQuery("SELECT * FROM FI_CLIENT"); ResultSetMetaData jMetaData= Resultat.getMetaData(); int i = 0; while(Resultat.next()){ i++; System.out.println(""); System.out.println("-------------------------"); System.out.println("Enregistrement "+i); System.out.println(""); for(int c = 1;c<=jMetaData.getColumnCount();c++){ System.out.println("Nom de colonne "+c+" : " + jMetaData.getColumnLabel(c)); System.out.println("Valeur : " + Resultat.getString(c)); } } Resultat.close(); jRequete.close(); Con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
http://doc.pcsoft.fr/fr-FR/?3044273
Merci au logiciel RegShot :
http://www.clubic.com/telecharger-fi...0-regshot.html
qui m'a permis de voir les modifications effectuées dans le registre lors de la création de sources de données ODBC par le biais de l'exécutable ODBCAD32.EXE.
Bonne prog
Partager