Ver Mensaje Individual
  #4  
Antiguo 17-09-2018
carnace carnace is offline
Miembro
 
Registrado: feb 2008
Ubicación: Yopal, Casanare, Colombia
Posts: 27
Reputación: 0
carnace Va por buen camino
Buenas noches

A mi si me ha funcionado en Delphi 10.2 Community Edition en windows 10 de las dos formas, tanto en código como en el DataExplorer, aunque si ha sido confuso la forma de instalar el driver, sobre todo dónde colocar el archivo dbx4fb.dll.
Resumo cómo lo instalé por si le sirve a alguien:
1. Descargué la versión dbxFirebird.4.1.v56 y la descomprimí, aparecen tres carpetas: Demo, Win32 y Win64
2. En la carpeta 'C:\Program Files (x86)\Embarcadero\Studio\19.0\bin' copié el archivo dbx4fb.dll que estaba en la carpeta Win32 descomprimida (este es el que yo uso porque el Firebird que tengo instalado es el de 32 bits)
En la carpeta 'C:\Program Files (x86)\Embarcadero\Studio\19.0\bin64' se copia el archivo dbx4fb.dll que está en la carpeta Win64 (este no lo copié porque sólo uso Firebird 32 bits)
3. En la carpeta Demo hay otra carpeta llamada project.d18 y dentro ésta hay otra carpeta llamada bin. Ahí se encuentra el archivo dbxdrivers.ini, el cual contiene la información que hay que adicionarle al archivo dbxdrivers.ini que se encuentra en C:\Users\Public\Documents\Embarcadero\Studio\dbExpress\19.0. NOTA: no reemplazar el archivo, sino editar y adicionar las lineas del archivo en la sección correspondiente, es decir, no borrar la información de los drivers que ya están. También hay que cambiar la línea correspondiente en VendorLib=C:\Program Files (x86)\Firebird\Firebird_3_0\fbclient.dll
4. Una vez hecho esto ya se puede entrar al IDE y se puede ejecutar el demo de la carpeta dbxFirebird.4.1.v56\Demo\project.d18
5. El demo no va a funcionar, pero se puede modificar de la siguiente manera:
Al ejemplo le coloqué un objeto TSQLConnection y en el Data Explorer le adicioné una nueva conexión de FirebirdConnection, la cual se configura de la forma tradicional y el código lo modifiqué adicionándole otro TButton:
Código:
unit uMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SqlExpr, WideStrings, DB;

type
  TMainForm = class(TForm)
    Button1: TButton;
    SQLConnection1: TSQLConnection;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation
uses
  DBXDynalink;   { esto es por el error de Unknown driver: FirebirdConnection de acuerdo con Support de la página
                https://groups.google.com/forum/#!searchin/dbxfirebird/Unknown$20driver$3A$20FirebirdConnection%7Csort:date/dbxfirebird/dcjOBhc-0rQ/2ZjElVd4HNUJ }
{$R *.dfm}

procedure TMainForm.Button1Click(Sender: TObject);
var C: TSQLConnection; i: integer;
begin
  C := TSQLConnection.Create(Self);
  try
    C.DriverName := 'FirebirdConnection'; //'FirebirdConnection';
    C.LibraryName := 'dbx4fb.dll';
    C.VendorLib := 'C:\Program Files (x86)\Firebird\Firebird_3_0\fbclient.dll';
    C.GetDriverFunc := 'getSQLDriverFIREBIRD';
  //  C.Params.Clear;
  //  C.Params.Add('User_Name=sysdba');
  //  C.Params.Add('Password=masterkey');
  //  C.Params.Add('Database=C:\BDFirebird\HVEQUIPOS3.fdb');
    for i:= 0 to C.Params.Count - 1 do
    begin
      if (Copy(C.Params[i],1,Length('VendorLib='))='VendorLib=') then
        C.Params[i]:= 'VendorLib=C:\BDfirebird\fbclient.dll'
      else if (Copy(C.Params[i],1,Length('Database='))='Database=') then
        C.Params[i]:= 'Database=C:\BDFirebird\HVEQUIPOS3.fdb'

    end;
    C.Open;
    if C.Connected then
      ShowMessage('Connection is active')
  finally
    C.Free;
  end;
end;

procedure TMainForm.Button2Click(Sender: TObject);
var i, Cont: integer; s: string;
begin
  SQLConnection1.Open;
  s := ''; Cont := 0;
  for i := 0 to SQLConnection1.Params.Count - 1 do
    if Copy(SQLConnection1.Params[i],1,Length('Database='))='Database=' then
      s :=  s + SQLConnection1.Params[i];
  for i:= 0 to  SQLConnection1.DataSetCount - 1 do
    Cont := Cont + 1;
  s := s + ' --- Contador datasets: ' + IntToStr(Cont);
  if SQLConnection1.Connected then
    ShowMessage('Connection is active to : ' + s);
end;

end.
https://ibb.co/knSXsK

Última edición por carnace fecha: 17-09-2018 a las 09:38:04.
Responder Con Cita