Autor Beitrag
NOS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 10:54 
Hallo zusammen,

ich versuche einen Connect zu Firebird 3 embedded in der aktuellen Version unter Delphi 10.2 via Code.
Das Firebird DBMS liegt in einem Subfolder der App.
Dies funktioniert leider überhaupt nicht und ich bekomme eine merkwürdige Fehlermeldung, die mich leider überhaupt nicht weiterbringt.
Weiterhin ist es so, dass wenn eine TFDPhysFBDriverLink mit entsprechend gesetzter VendorLib und eine TFDConnection mit entsprechenden Parametern auf ein Form droppe und dann den FDConnection Editor nutze alles funktioniert. Nur halt nicht via Coe.

Für den PhysFBDriverLink nutze ich folgenden Code

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
if ReleaseCreatorIIDataModule.FDPhysFBDriverLink = nil then
 ReleaseCreatorIIDataModule.FDPhysFBDriverLink := TFDPhysFBDriverLink.Create(self);
with ReleaseCreatorIIDataModule.FDPhysFBDriverLink do
begin
 Embedded := true;
 VendorHome := '';
 VendorLib := TPath.Combine(ExtractFileDir(Application.ExeName),'dbms\fbclient.dll');
end;


und für die Connection diesen hier

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
with ReleaseCreatorIIDataModule.FDReleaseDBConnection do
begin
 DriverName := 'FB';
 ConnectionName := 'Release DB Access';
 Params.UserName := '';
 Params.Password := '';
 Params.Pooled := false;
 Params.Database := edReleaseDBFilename.Text;
 Params.Add('OSAuthent=No');
 Params.Add('CharacterSet=UTF8');
 Params.Add('OpenMode=OpenOrCreate');
 Params.Add('PageSize=16384');
 Params.Add('DropDatabase=No');
 Params.Add('Protocol=Local');
 Params.Add('CreateDatabase=Yes');
 Params.Add('Server=');
 Connected := true;
end;


Im Prinzip nur die Umsetzung der Parameter aus dem FDConnection Editor.
Was mache ich falsch?

Grüße,

Andreas
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 14.11.18 14:30 
Vorweg ich benutze Delphi nicht habe aber allgemeine Firebird Embedded Erfahrung.

Setzen des Server Parameters sieht problematisch aus. Das vorhanden sein davon könnte Firebird verwirren. Das solltest du weglassen.
OSAuthent würde ich auch weglassen. Das sollte bei embedded keine Wirkung haben. Erst recht nicht mit Firebird 3.

Wenn du irgendwo in deinem Code an den wirklichen ConnectionString kommst zeig den mal den kann ich besser interpretieren als den Delphi/FireDAC Code.

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 15:09 
Hallo Ralf,

hier der Connectionstring direkt vor dem "connecten"

'DriverID=FB;Pooled=False;Database=E:\Projekte II\ReleaseCreator II\bin\databases\release.db;CharacterSet=UTF8;OpenMode=OpenOrCreate;PageSize=16384;DropDatabase=No;Protocol=Local;CreateDatabase=Yes'


Sieht aus meiner Sicht vollkommen ok aus.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 14.11.18 15:35 
Sieht für mich nach einem FireDac spezifischen ConnectionString aus keinen den Firebird direkt versteht.
Mir fehlt da zumindest ein
server type=Embedded
client library=meinLieberPfad\fbclient.dll
und DriverID kennt Firebird selbst nicht.

Möglicherweise bastelt das FireDAC später rein. Zumindest kann ich mir nicht vorstellen wie das ohne Angabe der fbclient.dll funktionieren sollte.

Was mir einfällt was du tun könntest

a.) Explizit mal Username/Passwort setzen. Auch wenn Firebird 3 die ignoriert schadet ein senden von SYSDBA/masterkey nicht. Möglicherweise weiß FireDAC noch nicht das man das seit der 3er Version keine Authentifizierung mehr brauch.
b.) Setz mal ein "localhost:" vor den Datenbank Pfad. Das sollte FireDAC dazu zwingen nicht XNET als Protokol zu nutzen (TCP anstatt Shared Memory). XNET hat auf älteren Windows Versionen schon mal Probleme.

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 16:14 
Hallo Ralf,

habe ich so gemacht ... ändert leider nichts am Ergebnis


'DriverID=FB;User_Name=SYSDBA;Password=masterkey;Pooled=False;Database=localhost:E:\Projekte II\ReleaseCreator II\bin\databases\release.db;CharacterSet=UTF8;OpenMode=OpenOrCreate;PageSize=16384;DropDatabase=No;Protocol=Local;CreateDatabase=Yes'
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 14.11.18 16:18 
Liegt in dem Ordner in dem die fbclient.dll liegt eine firebird.conf rum?
Wenn ja benenn die mal um. Für den Embedded betrieb ist die meist unnötig da könnten aber weitere Einstellungen drin sein die dir hier in die Quere kommen.

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 16:26 
Daran lag es leider auch nicht
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 16:49 
Habe nun nochmal die Parameter ergänzt


'DriverID=FB;User_Name=SYSDBA;Password=masterkey;Pooled=False;Database=localhost:E:\Projekte II\ReleaseCreator II\bin\databases\release.db;CharacterSet=UTF8;OpenMode=OpenOrCreate;PageSize=16384;DropDatabase=No;Protocol=Local;CreateDatabase=Yes;client library=E:\Projekte II\ReleaseCreator II\bin\dbms\fbclient.dll;server type=Embedded'
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 17:26 
Ich habe es nun auch aus dem kompletten Projekt ausgekoppelt in ein neues projekt .... gleiches problem

ausblenden volle Höhe Delphi-Quelltext
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:
68:
69:
70:
71:
72:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
  FireDAC.Phys.FBDef, FireDAC.Phys.IBBase, FireDAC.Phys.FB, Data.DB,
  FireDAC.Comp.Client, IOUtils;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    FDConnection: TFDConnection;
    FDPhysFBDriverLink: TFDPhysFBDriverLink;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 // ############################################################################
 // firedac physical driver link - TFDPhysFBDriverLink
 // ############################################################################
 if FDPhysFBDriverLink = nil then
  FDPhysFBDriverLink := TFDPhysFBDriverLink.Create(self);
 with FDPhysFBDriverLink do
 begin
  Embedded := true;
  VendorHome := '';
  VendorLib := TPath.Combine(ExtractFileDir(Application.ExeName),'dbms\fbclient.dll');
 end;
 // ############################################################################
 // firedac database connections - TFDConnection
 // ############################################################################
 if FDConnection = nil then
  FDConnection := TFDConnection.Create(self);
 with FDConnection do
 begin
  DriverName := 'FB';
  ConnectionName := 'Release DB Access';
  Params.UserName := 'SYSDBA';
  Params.Password := 'masterkey';
  Params.Pooled := false;
  Params.Database := 'localhost:' + TPath.Combine(ExtractFileDir(Application.ExeName),'database\testdb.db');
  //Params.Add('OSAuthent=No');
  Params.Add('CharacterSet=UTF8');
  Params.Add('OpenMode=OpenOrCreate');
  Params.Add('PageSize=16384');
  Params.Add('DropDatabase=No');
  Params.Add('Protocol=Local');
  Params.Add('CreateDatabase=Yes');
  Params.Add('client library=' + TPath.Combine(ExtractFileDir(Application.ExeName),'dbms\fbclient.dll'));
  Params.Add('server type=Embedded');
  Connected := true;
 end;


end;

end.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 14.11.18 20:26 
Mit meinen reinen Firebird Kenntnissen kommen wir da wohl nicht weiter :(

In der Firebird Doku gibts noch einen interessanten Tipp (die blaue Box am Ende der Seite) wenn es zwar in Delphi klappt aus der Anwendung aber nicht. Sollte sich ja leicht überprüfen lassen wenn du deine Anwendung mal ohne Debugger und ohne laufendes Delphi ausprobierst.

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 20:30 
Hallo Ralf,

das ist es auch nicht .... übrigens mit der FB 2.5 Embedded überhaupt kein Problem ... nur mit 3 halt nicht ...
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mi 14.11.18 22:28 
Es ist gelöst ...

was eine Hexerei ... unglaublicherweise ist hier das Problem zu finden

ausblenden Delphi-Quelltext
1:
Params.Add('Protocol=Local');					


Diese Zeile erzeugt das Problem, obwohl der Protocol Parameter hier aufgelistet ist und bei FB 2.5 notwendig war.

firebirdsql.org/file...edac-connparams.html