| Autor | Beitrag | 
| NOS 
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 09: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
 		                       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
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 
 | with ReleaseCreatorIIDataModule.FDReleaseDBConnection dobegin
 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 
          Beiträge: 4708
 Erhaltene Danke: 991
 
 
 VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
 
 | 
Verfasst: Mi 14.11.18 13: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  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 14: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 
          Beiträge: 4708
 Erhaltene Danke: 991
 
 
 VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
 
 | 
Verfasst: Mi 14.11.18 14: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  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 15: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 
          Beiträge: 4708
 Erhaltene Danke: 991
 
 
 VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
 
 | 
Verfasst: Mi 14.11.18 15: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  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 15:26 
 
Daran lag es leider auch nicht | 
|  | 
| NOS  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 15: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  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 16:26 
 
Ich habe es nun auch aus dem kompletten Projekt ausgekoppelt in ein neues projekt .... gleiches problem
 												| 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
 
 public
 
 FDConnection: TFDConnection;
 FDPhysFBDriverLink: TFDPhysFBDriverLink;
 end;
 
 var
 Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 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;
 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('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 
          Beiträge: 4708
 Erhaltene Danke: 991
 
 
 VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
 
 | 
Verfasst: Mi 14.11.18 19: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  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 19:30 
 
Hallo Ralf,
 das ist es auch nicht .... übrigens mit der FB 2.5 Embedded überhaupt kein Problem ... nur mit 3 halt nicht ...
 | 
|  | 
| NOS  
          Beiträge: 183
 Erhaltene Danke: 2
 
 Win XP, Win Vista Ultimate, Win 7 Ultimate
 Delphi 19.4 - Sydney
 
 | 
Verfasst: Mi 14.11.18 21:28 
 
Es ist gelöst ...
 was eine Hexerei ... unglaublicherweise ist hier das Problem zu finden
 		                       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 | 
|  |