Delphi hyperfile par odbc


Contenu du snippet

La procédure suivante permet d'installer le pilote ODBC pour HyperFile7 sans avoir
à installer Windev ou une application distribuée Windev, et de créer l'"alias" de base
de donnée de l'application. Testé sous xp et vista.

Ici l'"alias" est créé en source de données système, ce qui permet de ne pas avoir à
le créer pour chaque utilisateur.

Je vais encore me faire gronder par Julio qui va me dire qu'un .Reg aurait suffit,
mais, je préfère gérer ça dans mon application (Qu'est-ce qui va empêcher l'utilisateur
final de double-cliquer 5 fois de suite sur le .Reg en croyant qu'il va démarrer
l'application ?). Et puis là, c'est tout fait, ça marche, y'a plus qu'à copier coller.
L'intérêt de cette "source" est plus dans son côté pratique que technique. J'espère que ça pourra servir à d'autres.

NB : Delphi gère impécablement l'hyperfile à condition de tout gérer en SQL. (avec D5
en tout cas)

Source / Exemple :


procedure TForm1.FormCreate(Sender: TObject);
var
{--------------------------------}
   LSL_Values   : TStrings;
{--------------------------------}
   LREG_TMP     : TRegistry;
{--------------------------------}
   LS_AppKey,
   LS_DrvKey,
   LS_ODBCKey,
   LS_HF7Key,
   LS_SysDir,
   LS_RepWin,
   LS_Ressources,
   LS_Analyse,
   LS_MonPilote,
   LS_RepAppli  : string;
{--------------------------------}
   LIni_Temp    : TIniFile;
{--------------------------------}
begin
     LS_RepAppli   := ExtractFilePath(Application.ExeName);
     LS_MonPilote  := 'NOM DU PILOTE';
     LS_Analyse    := 'MonAnalyse.WDD';
     LS_SysDir     := GetWindowsSystemFolder;      // ! Ces deux fonctions sortent de JclSysInfo !
     LS_RepWin     := GetWindowsFolder;            //
     LS_SysDir     := PathAddSeparator(LS_SysDir);
     LS_RepWin     := PathAddSeparator(LS_RepWin);
     LS_RepAppli   := PathAddSeparator(LS_RepAppli);
     LS_Ressources := LS_RepAppli +'Ressources\'; // Dossier dans lequel se trouvent les 3 DLL windev
                                                  // necessaires à l'installation du pilote odbc
                                                  // On peut les trouver sur le net...
                                                  // Attention, normalement, on ne peut les distribuer
                                                  // que si on est en possession d'une licence Windev
     LS_HF7Key  := 'SOFTWARE\ODBC\ODBCINST.INI\Hyper File 7';
     LS_ODBCKey := 'SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers';
     LS_DrvKey  := 'SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources';
     LS_AppKey  := 'SOFTWARE\ODBC\ODBC.INI\'+ LS_MonPilote;
     LREG_TMP   := TRegistry.Create;
     with LREG_TMP do begin
          RootKey := HKEY_LOCAL_MACHINE;
          if not KeyExists(LS_HF7Key) then begin
             // CREATION DU DRIVER ODBC
             // Copie des dll de "Ressources" dans le dossier système du pc
             WinExec(PChar('cmd.exe /c "Copy /Y "'+ LS_Ressources +'WD110*.dll" "'+ LS_SysDir +'WD110*.dll""'), SW_HIDE);
             Application.ProcessMessages;
             OpenKey(LS_HF7Key, True);
             // Enregistrement du pilote hyperfile dans la liste des pilotes ODBC
             WriteString('APILevel', '1');
             WriteString('ConnectFunctions', 'NYN');
             WriteString('Driver', LS_SysDir +'WD110HFO.DLL');
             WriteString('DriverODBCVer', '02.10');
             WriteString('FileExtns', '*.wdd');
             WriteString('FileUsage', '0');
             WriteInteger('Language', 0);
             WriteString('Setup', LS_SysDir +'WD110HFO.DLL');
             WriteString('SQLLevel', '0');
             WriteInteger('UsageCount', 0);
             CloseKey;
             OpenKey(LS_ODBCKey, True);
             // Installation du pilote
             WriteString('Hyper File 7', 'Installed');
             CloseKey;
          end;
          if not KeyExists(LS_AppKey) then begin
             // CRÉATION DE L'ALIAS HYPERFILE
             OpenKey(LS_AppKey, True);
             // Enregistrement du fichier d'analyse WinDev
             WriteString('Analyse', LS_RepAppli + LS_Analyse);
             WriteString('Driver', LS_SysDir +'WD110HFO.DLL');
             // Repertoire où se trouvent les fichiers de base de données
             WriteString('RepFic', LS_RepAppli);
             CloseKey;
             OpenKey(LS_DrvKey, True);
             LSL_Values := TStringList.Create;
             GetValueNames(LSL_Values);
             if LSL_Values.IndexOf(LS_MonPilote) = -1
                then WriteString(LS_MonPilote, 'Hyper File 7');
             LSL_Values.Free;
             CloseKey;
             LIni_Temp := TIniFile.Create(LS_RepWin + 'ODBC.INI');
             LIni_Temp.WriteString('ODBC 32 bit Data Sources', LS_MonPilote, 'Hyper File 7 (32 bits)');
             LIni_Temp.WriteString(LS_MonPilote, 'Driver32', LS_SysDir +'WD110HFO.DLL');
             LIni_Temp.Free;
          end;
     End;
     LREG_TMP.Free;
end;

Conclusion :


-

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.