Einzelnen Beitrag anzeigen

Benutzerbild von Alien426
Alien426

Registriert seit: 21. Dez 2005
146 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Firebird Datenbank erzeugen mit Bordmitteln und autoinc

  Alt 29. Apr 2007, 13:14
Zitat von mkinzler:
Zitat:
Zu erwähnen gibt es noch, dass man bei den uses "DB" hinzufügen muss, da sonst ftInteger, ftString etc. nicht bekannt sind. Zumindest ist das so, wenn man Turbo Delphi Explorer einsetzt und alles "zu Fuß" einbauen muss. Vielleicht wäre auch zu überlegen, ob man diesen manuellen Weg noch etwas mit zusätzlichem Quelltext erleichtert.
Liegt aber nicht an FB. Nimmt man einen lowlevel-Wrapper entfällt die VCL-DB-Abhängigkeit.
Hab ich ja auch nicht behauptet. Wenn man aber den Code für eigene Tests übernimmt und der Compiler meckert, dann ist man erst mal am Suchen.
Zitat von mkinzler:
Zitat:
Andererseits habe ich jetzt ein Datenbank-System gefunden, das mir tausend mal lieber ist als Firebird
Und warum?
Gute Dokumentation, einfache Handhabung, Command Line Interface für Linux und Windows.

Wie die Geschwindigkeit und Zuverlässigkeit im Vergleich zu anderen DBMS ist, weiß ich nicht aus eigener Erfahrung. Die Dokumentation lässt aber auf Gutes hoffen.

Man trägt die Pfade zum Wrapper in Delphi ein. Man kopiert die DLL ins Programmverzeichnis. Fertig.

Codebeispiel aus dem Wrapper:
Delphi-Quellcode:
uses
  ... SQLiteTable3 ...;

procedure TForm1.btnDisplayImageClick(Sender: TObject);
var
  slDBpath: String;
  sldb: TSQLiteDatabase;
  sltb: TSQLiteTable;
  iID: Integer;
  ms: TMemoryStream;
  pic: TJPegImage;
begin
  slDBPath := ExtractFilePath(Application.ExeName) + 'test.db';
  if not FileExists(slDBPath) then
  begin
    MessageDlg('test.db does not exist.',
     mtInformation,[mbOK],0);
    Exit;
  end;
  sldb := TSQLiteDatabase.Create(slDBPath);
  try
    sltb := slDb.GetTable('SELECT ID FROM testtable');
    try
      if not sltb.Count = 0 then
      begin
        MessageDlg('No rows in the test database.',
         mtInformation,[mbOK],0);
   Exit;
      end;
    iID := sltb.FieldAsInteger(sltb.FieldIndex['ID']);
  finally
    sltb.Free;
  end;
  sltb := sldb.GetTable('SELECT picture FROM testtable WHERE ID=' + IntToStr(iID));
  try
    ms := sltb.FieldAsBlob(sltb.FieldIndex['picture']);
    if (ms = nil) then
    begin
      MessageDlg('No image in the test database.',
       mtInformation,[mbOK],0);
      Exit;
    end;
    ms.Position := 0;
    pic := TJPEGImage.Create;
    pic.LoadFromStream(ms);
    self.Image1.Picture.Graphic := pic;
    pic.Free;
  finally
    sltb.Free;
  end;
  finally
    sldb.Free;
  end;
end;
Zitat von mkinzler:
Zitat:
Es gibt nur eine DLL, die man im Programmverzeichnis ablegen muss und der Zugriff ist ... ein Kinderspiel.
Gilt doch auch für die anderen embedded-DBs
Na dann entpack mal Firebird 2.0.1 Embedded Win32:
10x DLL, 3x CONF. Insgesamt 26 Dateien in 3 Ordnern.

Wo diese Dateien liegen dürfen, welche man überhaupt braucht und wie diese heißen müssen ("Just copy fbembed.dll into the directory with your application. Then rename it to either fbclient.dll or gds32.dll depending on your database connectivity software." -- Artikel zu FB Emb 1.5) ist mir unklar.
  Mit Zitat antworten Zitat