Entwickler-Ecke
Datenbanken - Connect zu Firebird 3 embedded Fehler
NOS - Mi 14.11.18 10:54
Titel: Connect zu Firebird 3 embedded Fehler
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 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
Ralf Jansen - 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.
NOS - 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 - 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.
NOS - 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 - 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.
NOS - Mi 14.11.18 16:26
Daran lag es leider auch nicht
NOS - 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 - Mi 14.11.18 17:26
Ich habe es nun auch aus dem kompletten Projekt ausgekoppelt in ein neues projekt .... gleiches problem
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 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. |
NOS - 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 ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!