Problème d'initialisation du BDE

Signaler
Messages postés
2
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
8 février 2006
-
Messages postés
23
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
22 février 2008
-
j'ai un problème avec le module de base de donnée de delphi en windows xp. lorsque je le lance, un message d'erreur me dise qui'il y a un problème d'initialisation de bde. y'a t il une solution. merci

10 réponses

Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
Ce problème est récurrent.



Tu as tout simplement oublié d'installer le BDE sur la machine de
destination. Utilise InstallShield ou un équivalent certifié par
Borland pour installer le BDE correctement.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
Messages postés
4
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 novembre 2009

Salut
Pour déployer le BDE, sans install, trés simple (je l'utilise depuis des années, même en réseau):
1) créer un dossier BDE
par exemple:
D:\monApplic
D:\monApplic\BDE
D:\monApplic\MesBases

2) copier les fichiers suivant, en respectant les recommandations Borland:
3.2 BDE Redistributable Files
-----------------------------
When creating the installation program for a BDE-using application, Borland-certified installation
programs allow selection of only those BDE files that can be redistributed. So the ability to select a
given file is indication that the particular file can legally be redistributed.

BDE files that may be redistributed with an application include those listed below. Not all files are
included in the BDE for all Borland programming tools. Not all files are required for any given
installation (see "3.3 Partial BDE Installs").

Core BDE Files
--------------
IDASCI32.DLL For accessing ASCII files
IDBAT32.DLL For batch movement of data
IDDA3532.DLL For accessing Microsoft Access databases
IDDAO32.DLL For accessing Microsoft Access databases
IDDBAS32.DLL For accessing dBASE databases
IDDR32.DLL For Data Repository (Paradox only)
IDODBC32.DLL For BDE access to ODBC drivers
IDPDX32.DLL For accessing Paradox databases
IDQBE32.DLL QBE query engine
IDR20009.DLL BDE resources
IDAPI32.DLL Main BDE system DLL
IDSQL32.DLL SQL query engine (including local SQL)

Language Driver Files
---------------------
BANTAM.DLL Internationalization engine
*.CVB Character set conversion files
*.BTL Locales
BLW32.DLL Expression engine

Files for Microsoft Transaction Server (MTS)
--------------------------------------------
DISP.DLL MTS dispensor DLL
DISP.PAK

Auxiliary Tools/Utilities
-------------------------
BDEADMIN.* BDE Administrator utility
DATAPUMP.* Data Pump data migration tool
3) Rajouter Idapi32.cfg (gestion des params / alias de tables)
4) Modifier la BdR avec un .REG ou par Delphi:
-> par un fichier Reg: (par ex, chemin défini par D:\\MonApplic\\BDE)
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine]
* "DLLPATH"="D:\\MonApplic\\Bde"
* "CONFIGFILE01"="D:\\MonApplic\\Bde\\IDAPI32.CFG"
"SaveConfig"="WIN32"
"UseCount"="3"
"RESOURCE"="0009"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System]

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\INIT]
"VERSION"="3.0"
"LOCAL SHARE"="FALSE"
"MINBUFSIZE"="512"
"MAXBUFSIZE"="4096"
"LANGDRIVER"="intl"
"MAXFILEHANDLES"="48"
"SYSFLAGS"="0"
"LOW MEMORY USAGE LIMIT"="64"
"AUTO ODBC"="FALSE"
"DEFAULT DRIVER"="PARADOX"
"SHAREDMEMSIZE"="4096"
"SHAREDMEMLOCATION"=""
"DATA REPOSITORY"=""
"MEMSIZE"="32"
"SQLQRYMODE"=""
"MTS POOLING"="FALSE"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\FORMATS]

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\FORMATS\DATE]
"SEPARATOR"="/"
"MODE"="1"
"FOURDIGITYEAR"="TRUE"
"YEARBIASED"="FALSE"
"LEADINGZEROM"="TRUE"
"LEADINGZEROD"="TRUE"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\FORMATS\TIME]
"TWELVEHOUR"="FALSE"
"AMSTRING"="AM"
"PMSTRING"="PM"
"SECONDS"="TRUE"
"MILSECONDS"="FALSE"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\FORMATS\NUMBER]
"DECIMALSEPARATOR"=","
"THOUSANDSEPARATOR"="."
"DECIMALDIGITS"="2"
"LEADINGZERON"="TRUE"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\DRIVERS]

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\DRIVERS\PARADOX]

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\DRIVERS\PARADOX\INIT]
* "NET DIR"="D:\\MonApplic\\BDE"
"VERSION"="3.0"
"TYPE"="FILE"
"LANGDRIVER"="intl"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\DRIVERS\PARADOX\TABLE CREATE]
"LEVEL"="4"
"BLOCK SIZE"="4096"
"FILL FACTOR"="95"
"STRICTINTEGRTY"="TRUE"

-> Ou par Prog:
// écrire une chaine dans la BdR:
function bEcrireStringReg(const csRoot, csClef, csSection: string; sValeur: string): boolean;
var
Reg: TRegistry;
begin
// ex bEcrireString('\Clef', 'Section', sValeurChaine)
// par défaut, csRoot = HKU
Result := false;
Reg := TRegistry.Create;
TRY
if csRoot = 'HKLM' then
Reg.RootKey := HKEY_LOCAL_MACHINE;
// true pour la créer si elle n'existe pas
if Reg.OpenKey(csClef, true) then begin
Reg.WriteString(csSection, sValeur);
Result := true;
end;
FINALLY
Reg.CloseKey;
Reg.Free;
END;
end;
// créer le chemin du fichier .net

function CreateNetDir(Session: TSession; sDirBde: string): boolean;

begin

Session.NetFiledir := sDirBde; //sNetDir;

Result := true;

end;

// Init du BDE:
function BDEInit(sDirBDE: string): boolean;
begin
CreateNetDir(Session, sDirBDE); // function au dessus
TRY
bEcrireStringReg('', csBDEDir, 'DLLPATH', sDirBDE);
bEcrireStringReg('', csBDEDir, 'CONFIGFILE01', sDirBDE + '\IDAPI32.CFG');
bEcrireStringReg('', csBDEDir, 'SAVECONFIG', 'WIN31');
bEcrireStringReg('', csBDEDir, 'UseCount', '1');
bEcrireStringReg('', csBDEDir, 'RESOURCE', '000C');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'LOCAL SHARE', 'FALSE');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'VERSION', '3.0');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'MINBUFSIZE', '512');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'MAXBUFSIZE', '4096');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'LANGDRIVER', 'intl');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'MAXFILEHANDLES', '48');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'SYSFLAGS', '0');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'LOW MEMORY USAGE LIMIT', '64');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'AUTO ODBC', 'FALSE');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'DEFAULT DRIVER', 'PARADOX');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'SHAREDMEMSIZE', '4096');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'SHAREDMEMLOCATION', '');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'DATA REPOSITORY', '');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'MEMSIZE', '32');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'SQLQRYMODE', '');
bEcrireStringReg('', csBDEDirFormat + '\INIT', 'MTS POOLING', 'FALSE');

bEcrireStringReg('', csBDEDirFormat + '\DATE', 'MTS POOLING', 'FALSE');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'SEPARATOR', '/');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'MODE', '1');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'FOURDIGITYEAR', 'TRUE');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'YEARBIASED', 'FALSE');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'LEADINGZEROM', 'TRUE');
bEcrireStringReg('', csBDEDirFormat + '\DATE', 'LEADINGZEROD', 'TRUE');

bEcrireStringReg('', csBDEDirFormat + '\TIME', 'TWELVEHOUR', 'FALSE');
bEcrireStringReg('', csBDEDirFormat + '\TIME', 'AMSTRING', 'AM');
bEcrireStringReg('', csBDEDirFormat + '\TIME', 'PMSTRING', 'PM');
bEcrireStringReg('', csBDEDirFormat + '\TIME', 'SECONDS', 'TRUE');
bEcrireStringReg('', csBDEDirFormat + '\TIME', 'MILSECONDS', 'FALSE');

bEcrireStringReg('', csBDEDirFormat + '\NUMBER', 'DECIMALSEPARATOR', '.');
bEcrireStringReg('', csBDEDirFormat + '\NUMBER', 'THOUSANDSEPARATOR', '.');
bEcrireStringReg('', csBDEDirFormat + '\NUMBER', 'DECIMALDIGITS', '2');
bEcrireStringReg('', csBDEDirFormat + '\NUMBER', 'LEADINGZERON', 'TRUE');

bEcrireStringReg('', csBDEDirDriver + '\INIT', 'NET DIR', sDirBDE);
bEcrireStringReg('', csBDEDirDriver + '\INIT', 'VERSION', '3.0');
bEcrireStringReg('', csBDEDirDriver + '\INIT', 'TYPE', 'FILE');
bEcrireStringReg('', csBDEDirDriver + '\INIT', 'LANGDRIVER', 'intl');

bEcrireStringReg('', csBDEDirDriver + '\TABLE CREATE', 'LEVEL', '4');
bEcrireStringReg('', csBDEDirDriver + '\TABLE CREATE', 'BLOCK SIZE', '4096');
bEcrireStringReg('', csBDEDirDriver + '\TABLE CREATE', 'FILL FACTOR', '95');
bEcrireStringReg('', csBDEDirDriver + '\TABLE CREATE', 'STRICTINTEGRTY', 'TRUE');
Result := true;
EXCEPT
Result := false;
END;
end;

// Pour tester si BDE existe:
function BDEExist: boolean;
var
Reg: TRegistry;
sFileIdapi: string;
begin
Result := false;
Reg := TRegistry.Create;
with Reg do begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Borland\Database Engine', False);
TRY
sFileIdapi := ReadString('CONFIGFILE01');
// BDE installed
if sFileIdapi <> '' then begin
if FileExists(sFileIdapi) then
Result := true;
end;
FINALLY
CloseKey;
END;
end; // with
end;

Avec Delphi, on peut aussi créer les Allias des tables à la volée...
// recherche de l'alias, le crée éventuellement, recherche des tables existantes
function ChercheAliasTable(Session: TSession; csTableName, csAlias, csTypeTable: string; var sDirBDE: string): boolean;
// TSession fournit par la session en cours
// csTableName: le nom de la table (ex table.db)
// csAlmias: des bases de données (ex: MesTables)
// sDirBDE: retour du chemin du BDE
function CreeAlias(const sAlias: string): string;
begin
with Session do begin
ConfigMode := cmAll;
Result := sChercheBD(csTableName);
if Result = #0 then begin
ShowMessagePos('Installation incomplète, manque les bases de données !', 100, 100);
Exit;
end; // if
AddStandardAlias(csAlias, Result, csTypeTable); // crée en memoire le nouvel Alias
SaveConfigFile;
end; // with
end;

var
bCreate: boolean;
AParams: TStringList;
sDir, sDirBd: string;
begin
Result := false;
bCreate := false;
with Session do begin
if not IsAlias(csAlias) then begin // 1ère création, cherche BD
sDir := CreeAlias(csAlias);
if sDir = #0 then
Exit;
bCreate := true;
end; // if
if not Assigned(AParams) then begin
AParams := TStringList.Create;
TRY
// Actualiser les paramètres de l'alias pour le BDE
Session.GetAliasParams(csAlias, AParams);
sDirBd := Copy(AParams.Strings[0], 6, 255);
if not FileExists(sDirBd + '\' + csTableName) then begin
// Alias pas bon, on le crée
DeleteAlias(csAlias);
SaveConfigFile;
AParams.Clear;
sDir := CreeAlias(csAlias);
bCreate := true;
end; // if
AParams.Clear;
if bCreate then begin
AParams.Add('PATH=' + sDir);
sBDDir := sDir; // pour mémo
end
else begin
AParams.Add('PATH=' + sDirBd);
sBDDir := sDir;
end;
ModifyAlias(csAlias, AParams);
SaveConfigFile;
Result := true;
FINALLY
AParams.Free;
END;
end;
if not CreateNetDir(Session, sDirBDE) then
Result := false;
end; // with
end;

Voilà pour un petit tour, cela paraît compliqué, mais il faut essayer...
@+
Fabrice

MFDev - Delphi 7 Pro
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
OK, mais si une autre version ou instance du BDE est déjà installée sur la machine de l'utilisateur, tu fais comment ?
C'est en cela que des logiciels comme InstallShield sont utiles car ils prennent en compte l'existant.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 novembre 2009

Salut
Au lancement de mes applics, je vais tester l'existence du BDE avant l'ouverture d'une table... tout simplement:
_ recherche dans la BDR si BDE installé:
- > si oui, vérif si le dossier et le fichier Idapi32.cfg existent réellement...
-> si oui, pas de modif de l'existant, on vérifie juste les Alias.
-> si non, le signaler à l'utilisateur, pour définir le chemin ou proposer d'essayer de le trouver sur les disques.
et si inexistant , il faut le ré-installer, donc fin de l'application.

>> Bien sur je ne parle pas d'une 1ere intallation, cette méthode peut être utile en cas de ré-installation de Windows (si pas sur le disque C: évidemment).
Pour ma part, dans le cas d'une 1ere installation, avec InstallShield ou autre, il suffit de recenser le dossier du BDE avec l'application à installer, et au lancement de l'applic, celle ci initialise le BDE et les Alias requis.
En tout cas, je procède comme cela, et je n'ai jamais rencontré de problèmes.
@+

MFDev - Delphi 7 Pro
Messages postés
1
Date d'inscription
mercredi 11 janvier 2006
Statut
Membre
Dernière intervention
6 décembre 2006

salut....
utiliser les etape suivent :
- démarée
- Panneau de configuration
- options régionales et linguistiques


- options avancées


- sélectionnez une lanque "remplacer la langue arab
par français "
Messages postés
63
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
15 décembre 2009

Il y a une façon trés simple d'installer BDE

va dans Program Files\Fichiers Communs\Borland
Shared\BDE et dézippe le fichier BDEINST.CAB
ensuite exécute cette commande

regsvr32.exe BDEINST.DLL


Fabien FERT
Messages postés
4
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 novembre 2009

La solution que je propose est trés souple, car cela est totalement transparent pour l'utilisateur.
On fait le test de la BdR, et du dossier du BDE.
En copiant l'arborescence du programme  + du dossier Bde, au lancement du programme, on restore le Bde automatiquement, et on s'affranchit de la procédure via .cab trop lourde.
@+
Fabrice

MFDev - Delphi 7 Pro
Messages postés
23
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
22 février 2008

Hello Delphistes

Je reviens sur cet ancien post parce que je trouve intéressante la solution de MFDev.

Voilà pour un petit tour, cela paraît compliqué, mais il faut essayer...

Ce que j'ai fait.
Mais la compilation provoque une erreur parce que les variables csBDEDir, csBDEDirFormat et csBDEDirDriver ne sont pas déclarée.

D'où viennent ces variables ?


Merci de faire avancer le Schmilblick en éclairant cette imprécision.

defluc
Messages postés
4
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 novembre 2009

Salut,
Hmm cela fait longtemps que je n'utilise plus le Bde...

Pour les constantes, c'était une façon de simplifier l'écriture des chaines...
csBDEDir, csBDEDirFormat et csBDEDirDriver dans:

function BDEInit(sDirBDE: string): boolean;
begin
CreateNetDir(Session, sDirBDE); // function au dessus
TRY
bEcrireStringReg('', csBDEDir, 'DLLPATH', sDirBDE);

Ce sont les déclarations du Bde dans la Bdr, de mémoire:
csBDEDir = Software\Borland\Database Engine
csBDEDirFormat = Software\Borland\Database Engine\Settings\System\FORMATS
csBDEDirDriver = Software\Borland\Database Engine\Settings\DRIVERS

En finalité, cela doit donner dans la Bdr:

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine]
"DLLPATH"="chemin réso\\Bde"
"CONFIGFILE01"="chemin réso\\Bde\\IDAPI32.CFG"
"SaveConfig"="WIN32"
"UseCount"="3"
"RESOURCE"="0009"

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System]

[HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\System\INIT]
"VERSION"="3.0"
"LOCAL SHARE"="FALSE"
...


J'ai commencé à avoir des problèmes avec le Bde avec Vista, donc j'ai essayé un autre moteur, et après de nombreux essais, j'ai fini par utiliser un moteur multi-user intégré à l'EXE:
Absolute DB

Bon dév...
@+
MFDev - Delphi 2009 Pro
Messages postés
23
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
22 février 2008

Cela m'a l'air génial

merci à toi


defluc