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.

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
2/Installation de la source de donnée (DSN) par programmation

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).

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
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
 
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();
		}
	}
}
Des infos complémentaires sur la doc PC-Soft :
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