GARANTIR DESCONTO

Fórum Verificar se já tem o BDE Instalado. Alguem sabe como? #356642

05/04/2008

0

Eu preciso verificar se o BDE já esta instalado na máquina
Alguem sabe como???

Desde já agradeço a colaboração de todos ^^


Mortify

Mortify

Responder

Posts

05/04/2008

Martins

Eu preciso verificar se o BDE já esta instalado na máquina Alguem sabe como??? Desde já agradeço a colaboração de todos ^^


Essa dica eu nunca testei, pois faz tempo q deixei de usar BDE, mas existe em truques e dicas sobre Delphi e vc pode encontrá-la pela NET.

procedure Verifica_BDE; 
const 
Key_Root = HKEY_LOCAL_MACHINE; 
Key_Data : Array[00..05, 01..03] Of String = ((´Software\Borland\Database Engine´, ´BDE_EXTERNAL´, ´0´), 
(´Software\Borland\Database Engine´, ´DLLPATH´ , ´0´), 
(´Software\Borland\Database Engine´, ´CONFIGFILE01´, ´1´), 
(´Software\Borland\BLW32´ , ´BLAPIPATH´ , ´0´), 
(´Software\Borland\BLW32´ , ´LOCALE_LIB1´ , ´5´), 
(´Software\Borland\BLW32´ , ´LOCALE_LIB2´ , ´6´)); 
BDE_Files : Array[01..10] Of String = (´idapi32.cfg´, ´idapi32.dll´, ´idr20009.dll´, ´blw32.dll´, ´usa.btl´, ´europe.btl´, ´idpdx32.dll´, ´idasci32.dll´, ´iddbas32.dll´, ´idodbc32.dll´); 
var 
Status : Boolean; 
Index : Integer; 
Ind_Files : Integer; 
BDE_Dir : String; 
Registro : TRegIniFile; 
begin 
Try 
Registro := TRegIniFile.Create(); 
Registro.RootKey := Key_Root; 
If (Not Registro.KeyExists(Key_Data[0,1])) Or (( Registro.KeyExists(Key_Data[0,1])) And (Registro.ReadString(Key_Data[0,1], Key_Data[0,2], ´FALSE´) = ´TRUE´)) Then 
Begin 
For Index := 1 To 3 Do 
Begin 
Case Index Of 
1 : BDE_Dir := ExtractFileDrive(ParamStr(0)) + ´\BDE\´; 
2 : BDE_Dir := ExtractFileDir(ParamStr(0)) + ´\BDE\´; 
3 : BDE_Dir := ExtractFilePath(ParamStr(0)); 
End; 
Status := DirectoryExists(BDE_Dir); 
If Status Then 
For Ind_Files := Low(BDE_Files) To High(BDE_Files) Do 
Status := Status And FileExists(BDE_Dir + BDE_Files[Ind_Files]); 
If Status Then 
Break; 
End; 
For Index := Succ(Low(Key_Data)) To High(Key_Data) Do 
Begin 
If Key_Data[Index,3] = ´0´ Then 
Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir) 
Else 
Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir + BDE_Files[StrToInt(Key_Data[Index,3])]); 
End; 
Registro.WriteString(Key_Data[0,1], Key_Data[0,2], ´TRUE´); 
End; 
Finally 
Registro.Free; 
End; 
end; 


Detalhe, coloque no USES a unit [b:afdf8d189a]Registry[/b:afdf8d189a]

Boa sorte e bons códigos.


Responder

Gostei + 0

05/04/2008

Mortify

Cara esse código verifica pelo registro
Eu já tinha dado uma olhada nele no guia do hardware:
[url]http://www.guiadohardware.net/comunidade/executavel-delphi/179899/[/url]
Só que ele é sugeito a erros (pelo menos para o qe eu quero)

>> Se o cara deleta o BDE na mão e não apagar o Registro não vai funcionar <<

Eu achei esse código aqui:
IsBDEExist := Check(dbiInit(nil))


Esse código tenta inicializar o BDE
So que aqui não está funcionando
Deve ter que declara alguma coisa na unit
E eu não sei o que é.. =\

Se alguem souber
por favor Help Me


Responder

Gostei + 0

05/04/2008

Emerson Nascimento

declare as units BDE e Dbtables na cláusula uses.


Responder

Gostei + 0

05/04/2008

Mortify

[b:aa2a68d0e5]Eu declarei BDE e Dbtables.[/b:aa2a68d0e5]
E ainda continuou dando o mesmo erro:

[Error] Principal.pas(138): Undeclared identifier: ´IsBDEExist´
:cry:


Responder

Gostei + 0

05/04/2008

Emerson Nascimento

IsBDEExist é uma variável do tipo boolean que você precisa declarar.
na verdade a variável pode ter qualquer nome:

var
  BDEInstalado: boolean;
begin
  BDEInstalado := Check(dbiInit(nil));

  if not BDEInstalado then
    ShowMessage(´O BDE não está instalado nesta estação!´);
end;



Responder

Gostei + 0

06/04/2008

Mortify

[b:8f2b8a241e]Aff
E eu pensando q era comando
huahuahuahuahuahu

Um dia eu chego lá xD

Brigadão[/b:8f2b8a241e]


Responder

Gostei + 0

06/04/2008

Mortify

[b:c83437bc31]Não de certo
Deu incompatibilidade de tipos
Olha o erro ai:[/b:c83437bc31]
[Error] Principal.pas(138): Incompatible types: ´LongBool´ and ´procedure, untyped pointer or untyped parameter´


[b:c83437bc31]Mais eu consegui fazer da seguinte forma:[/b:c83437bc31]
   If DbiInit(nil) <> DBIERR_NONE Then
   Begin
      ShowMessage(´O BDE não está instalado nesta estação!´);
   End;


[b:c83437bc31]Valeuzão ai mano
Brigado pela força
Vou posta depois o codigo todo
Sempre tem um noob = eu precisando
(O código serve para instalar o aliase quando abre o programa)

UM DIA EU CHEGO LÁ [size=18:c83437bc31][color=red:c83437bc31]0/[/color:c83437bc31][/size:c83437bc31][/b:c83437bc31]


Responder

Gostei + 0

07/04/2008

Martins

O código que não deu certo, deveria estar assim:

var
 IsBDEExist : LongBool;
begin
  IsBDEExist := (dbiInit(nil) = 0);
  If IsBDEExist = true then
    Edit1.Text := ´BDE já instalado!!!´
  else
    Edit1.Text := ´BDE não instalado!!!´;
end;

Pelo menos dessa forma sei q funcionou aqui, desculpe não ter ajudado antes, é q não uso mais BDE.

Mas vc já conseguiu a solução, deixaremos então os dois códigos para q sirva para outros colegas.


Responder

Gostei + 0

26/05/2008

Jlsmendes

Opa, eu utilizei esses comandos ae no form_create do meu form principal, ou seja, o primeiro form criado e consegui fazer uma coisa legal.

Declaro uma função no form:

function DllRegisterServer:integer; stdcall; external ´BdeInst.dll´;

Testo se o BDE está instalado com a função que vocês passaram e chamo a função de instalação caso o BDE não esteja instalado, é bem simples, mas funcionou.

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
If DbiInit(nil) <> DBIERR_NONE Then
Begin
ShowMessage(´O BDE não está instalado nesta estação clique OK para instalar!´);
DllRegisterServer;
End;
end;

E mais uma vez obrigado pelas dicas!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar