Lazarus Database Tutorial/de

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) Bahasa Indonesia (id) italiano (it) 日本語 (ja) Nederlands (nl) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Überblick

Dieses Tutorial handelt darüber, wie Lazarus mit einer Auswahl von existierenden Datenbanken zusammenarbeiten kann.

Bitte erweitern sie diesen Bereich.

Lazarus und MySQL

MySQL zum Laufen bringen unter Linux oder Windows

Folgen sie den Anweisungen im MySQL Benutzerhandbuch. Stellen sie sicher, daß der mysqld Daemon zuverlässig läuft (zumindest bei Linux), und daß alle potentiellen Benutzer (inclusive root, mysql, sie selbst und jeder sonst, der es benötigen könnte) soviele Rechte (privileges) wie nötig hat, von so vielen Hosts wie nötig (inclusive 'localhost', dem lokalen Host Namen, jedem anderen Host in ihrem Netzwerk) so weit es mit der Sicherheit vereinbar ist. Auch haben viele benötigte Dateien im fpcsrc- und im lazarus-Ordner stark eingeschränkte Schreibrechte, die root erst ändern muss, wenn andere User damit arbeiten sollen. Mangelnde Schreibrechte in Units zeigt Lazarus durch die Fehlermeldung "Error while linking" an. Es ist wünschenswert, daß alle Benutzer inclusive root Passwörter haben. Testen sie die Wirkung des Datenbanksystems bei der Benutzung der Beispiele aus dem Handbuch, und prüfen sie daß alle Benutzer wirklich einen zuverlässigen Zugriff haben.

MySQL zum Laufen bringen für FPC im Textmodus

Es gibt ein Verzeichnis mit einem Beispielprogramm in $(fpcsrcdir)/packages/base/mysql/. Sie können das FPC Quellverzeichnis in Lazarus wie folgt finden: Environment menu -> Environment Options -> Paths tab -> FPC source directory. Mögliche Pfade für das mysql Verzeichnis sind /usr/share/fpcsrc/packages/base/mysql/ (rpm Installation) oder C:\lazarus\fpcsrc\packages\base\mysql\ (Windows). Dieses Verezichnis enthält auch die Units mysql.pp, mysql_com.pp und mysql_version.pp. Bevor sie das Testscript starten, müssen sie eine Datenbank mit dem Namen testdb anlegen: Tun sie dies, indem sie sich in den mysql Monitor einloggen (als root mit allen Rechten (privileges)) und das folgende SQL Statement eingeben

CREATE DATABASE testdb;

Dann müssen sie sicherstellen, daß alle relevanten Benutzer einen passenden Zugriff darauf haben

GRANT ALL ON testdb TO johnny@localhost IDENTIFIED BY 'johnnyspassword'; 

Es gibt ein Script namens mkdb, welches sie nun starten sollten:

sh ./mkdb

Dies wird wahrscheinlich fehlschlagen, weil das System keinem anonymen Benutzer den Zugriff auf die Datenbank erlauben wird. Ändern sie deshalb das Script mit einem Editor, so daß die Zeile, in der mysql aufgerufen wird, wie folgt aussieht:

mysql -u root -p  ${1-testdb} << EOF >/dev/null

und versuchen sie es erneut zu starten. Geben sie ihr Passwort ein, wenn danach verlangt wird. Mit etwas Glück ist es ihnen gelungen, die Testdatenbank anzulegen: testen sie es (während sie im mysql Monitor eingeloggt sind) unter Verwendung des mysql Statements

select * from FPdev;

Sie sollten eine Tabelle sehen, welche die ID, den Benutzernamen und die Emailadresse von einem der FPC Entwickler enthält.

Nun versuchen sie das Testprogramm testdb.pp zu starten (dieses muß evtl. noch kompiliert werden, und wird beinahe sicher beim ersten Versuch fehlschlagen!!).

Ich habe herausgefunden, daß das Programm aus verschiedenen Gründen nicht mit mysql verbinden konnte:

  • Mein System (SuSE Linux v9.0) installiert mysql v4.0.15, nicht die Version 3, für welche das Package bestimmt war.
  • Das Programm benötigt Benutzernamen und Passwörter um Zugriff auf die Datenbank zu erhalten.
  • Der Compiler muß wissen, wo die mysql Bibliotheken zu finden sind. (Wenn sie die mysql Entwicklungs-Bibliotheken nicht installiert haben, dann tun sie es jetzt!)

Ich erzeugte eine Kopie von testdb.pp mit dem Namen trydb.pp, eher als das Original zu bearbeiten - das bedeutet, daß die originalen Dateien noch bereinigt werden in späteren CVS Updates. Ich kopierte auch die Dateien aus dem Unterverzeichnis mysql/ver40/ in das Haupt- mysql/ Unterverzeichnis, benannte sie in mysql_v4.pp, mysql_com_v4.pp und mysql_version_v4.pp um, um sicher zu sein, die Units mit jeder Datei entsprechend umzubenennen. Ich änderte die uses Anweisung in trydb.pp zu

uses mysql_v4

und die Anweisung in mysql_v4.pp zu

uses mysql_com_v4

Ich fügte eine Zeile zu /etc/fpc.cfg hinzu, um auf meine Bibliotheken zu zeigen:

-Fl/lib;/usr/lib

Der folgende Schritt mag nicht notwendig sein, wenn die devel-Biblitheken installiert sind wie die Links für sie erzeugt sind, aber es kann nie schaden, es zu prüfen. Ich mußte den tatsächlichen Namen der mysqlclint Bibliothek finden im /usr/lib Verzeichnis und in meinem Fall mußte ich das shell Kommando eingeben:

ln -s libmysqlclient.so.12.0.0 lmysqlclient

um einen symbolischen Link zu erstellen, um FPC zu erlauben die Bibliothek zu finden. Für ein gutes Maß erzeugte ich auch den Link

ln -s libmysqlclient.so.12.0.0 mysqlclient

und plazierte einfache Links in verschiedenen anderen Verzeichnissen: nicht unbedingt notwendig, aber für den Fall ...! Einige Benutzer müssen evtl. den folgenden Link hinzufügen:

ln -s libmysqlclient.so.12.0.0 libmysqlclient.so

Ich modifizierte trydb.pp um Benutzerdetails einzubeziehen, zunächst durch Hinzufügen von host, Benutzer und Passwort als Konstanten:

const
  host : Pchar= 'localhost';
  user : Pchar= 'myusername';
  passwd: Pchar = 'mypassword';

Ich habe auch herausgefunden, daß ich keine Verbindung bekam zu mysql mit der Benutzung des mysql_connect() Aufrufs, aber mit mysql_real_connect(), welches mehr Parameter hat. Um die Dinge weiter zu komplizieren, scheint die Anzahl der Parameter geändert werden zu müssen zwischen Version3 (wo es sieben sind) und Version4 (wo es acht sind). Vor der Benutzung von using mysql_real_connect mußte ich mysql_init() verwenden, welche nicht in der originalen mysql.pp zu finden ist aber in mysql_v4.pp.

Daher ist der Code für die Verbindung zur Datenbank jetzt:

{ einige extra Variablen}
var
  alloc : PMYSQL;
 
{Teil des Hauptprogramms}
 
begin
 if paramcount=1 then
   begin
   Dummy:=Paramstr(1)+#0;
   DataBase:=@Dummy[1];
   end;
 
Writeln ('Allocating Space...');
 alloc := mysql_init(PMYSQL(@qmysql));
 Write ('Connecting to MySQL...');
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
   Writeln (stderr,'Couldnt connect to MySQL.');
   Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
   halt(1);
   end;
 Writeln ('Done.');
 Writeln ('Connection data:');
{$ifdef Unix}
 writeln ('Mysql_port      : ',mysql_port);
 writeln ('Mysql_unix_port : ',mysql_unix_port);
{$endif}
 writeln ('Host info       : ',mysql_get_host_info(sock));
 writeln ('Server info     : ',mysql_stat(sock));
 writeln ('Client info     : ',mysql_get_client_info);
 
 Writeln ('Selecting Database ',DataBase,'...');
 if mysql_select_db(sock,DataBase) < 0 then
   begin
   Writeln (stderr,'Couldnt select database ',Database);
   Writeln (stderr,mysql_error(sock));
   halt (1);
   end;
{... wie die Originalinhalte von testdb.pp}


Jetzt - sind sie bereit, um die Kompilierung von trydb.pp zu starten?

 fpc trydb

Erfolg! Jetzt starten sie es:

 ./trydb

whoopee! Ich erhielt die Auflistung der FPC Entwickler!

Einige zusätzliche Feinheiten: Machen sie die Eingabe der Benutzerdetails und der mysql Befehle interaktiv, benutzen sie eher Variablen als Konstanten, und erlauben sie die Eingabe verschiedender SQL Befehle, bis wir den quit Befehl geben: schauen sie in der vollen Programmauflistung nach, wo Benutzerdetails von der Konsole aus eingegeben werden, und das Programm in eine Schleife geht, wo SQL Befehle von der Konsole aus eingegeben werden (ohne das abschliessende Semikolon) und die Antworten ausgedruckt werden, bis 'quit' über die Tastatur eingegeben wird.

Siehe Einfaches Konsole Listing .

Verbindung zu MySQL von einer Lazarus Anwendung aus

Dieses Tutorial zeigt, wie man Lazarus bei einer MySQL Datenbank anmelden kann, und einfache Abfragen ausführen kann, lediglich unter Verwendung der Lazarus Grundkomponenten; es benutzt keine datensensitiven Komponenten, aber es illustriert die Prinzipien der Kopplung mit der Datenbank.

Erzeugen sie ein neues Projekt in Lazarus:

Projekt -> Neues Projekt -> Anwendung

Ein neues automatisch erzeugtes Formular wird erscheinen.

Vergrößern sie das Formular bis es etwa die Hälfte ihres Bildschirms ausfüllt, dann benennen sie das Formular und seine Titelzeile (caption) in 'TryMySQL' um.

Von der Standard Komponenten Palette plazieren sie drei Edit Felder oben links auf dem Formular, und plazieren sofort über jedem Feld ein Label. Ändern sie die Namen und Captions zu 'Host' (und HostLLabel,HostEdit), 'UserName' (und UserLabel, UserEdit) und 'Password' (mit PasswdLabel und PasswdEdit). Alternativ können sie LabelledEdit Komponenten von der Additional Palette benutzen.

Wählen sie das Passwd Editfeld und finden sie die PasswordChar Eigenschaft: ändern sie diese dies auf * oder ein anderes Zeichen, so dass ihrer Eingaben in diesem Feld nicht erscheinen, sondern nur eine Reihe von * erscheint. Stellen sie sicher, dass die Eigenschaft Text für jedes Editfeld leer ist.

Nun plazieren sie eine neues Edit Feld und Label oben rechts auf ihrem Formular. Ändern sie die Label Caption zu 'Enter SQL Command' und nennen sie es CommandEdit.

Platzieren sie drei Buttons auf dem Formular: zwei links unter den Edit Feldern, und einen rechts unter dem command Feld.

Benennen sie die Buttons auf der linken Seite 'Connect to Database' (ConnectButton) und 'Exit' (ExitButton) und den auf der rechten Seite 'Send Query' (QueryButton).

Plazieren sie ein großes Memo Feld mit Label und Namen 'Results' (ResultMemo) unten rechts, um den meisten verfügbaren Platz auszufüllen. Finden sie seine ScrollBars Eigenschaft und wählen sie ssAutoBoth, so daß die Bildlaufleisten automatisch erscheinen wenn Text die Leerstellen füllt. Setzen sie die WordWrap Eigenschaft auf True.

Plazieren sie eine Status Bar (von der Common Controls Palette) am unteren Ende des Formulars, und setzen seine SimpleText Eigenschaft auf 'TryMySQL'.

Ein Screenshot des Formulars ist hier zu sehen: Mysql Beispiel Screenshot

Nun müssen wir einige Ereignis handler schreiben.

Die drei Edit Boxen auf der linken sind für die Eingabe von Hostnamen, Benutzernamen und Passwort. Wenn diese zufriedenstellend eingegeben wurden, wird der Connect Button angeklickt. Der OnCLick Ereignis handler für diesen Button beruht auf Teilen des Textmodus FPC Programms oberhalb.

Die Antworten von der Datenbank können jetzt nicht mit den Pascal write oder writeln Anweisungen geschrieben werden: stattdessen, die Antworten müssen in Strings konvertiert und in einem Memo Feld angezeigt werden. Wohingegen die Pascal write und writeln Anweisungen geeignet sind, eine Menge von Typumformungen 'on the fly' durchzuführen, die Benutzung eines Memo Felds für die Textausgabe erfordert die explizite Konvertierung von Datentypen in die korrekte Form eines string, daher müssen Pchar Variablen in Strings konvertiert werden mit StrPas, und Integers müssen mit IntToStr konvertiert werden.

Strings werden im Memo Feld angezeigt unter Verwendung von

procedure ShowString (S : string);
(* zeigt einen String in einem Memo Feld an *)
begin
       trymysqlForm1.ResultsMemo.Lines.Add (S)
end;

Der ConnectButton Ereignis handler wird daher:

procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
(* Verbinden zu MySQL unter Verwendung der Benutzerdaten von den Texteingabefeldern auf Main Form *)
var strg: string;
 
begin
 
 dummy1 :=  trymysqlForm1.HostEdit.text+#0;
 host := @dummy1[1];
 dummy2 := trymysqlForm1.UserEdit.text+#0;
 user := @dummy2[1] ;
 dummy3 := trymysqlForm1.PasswdEdit.text+#0;
 passwd := @dummy3[1] ;
 alloc := mysql_init(PMYSQL(@qmysql));
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
     strg :='Couldnt connect to MySQL.'; showstring (strg);
     Strg :='Error was: '+ StrPas(mysql_error(@qmysql)); showstring (strg);
  end
   else
   begin
     trymysqlForm1.statusBar1.simpletext := 'Connected to MySQL';
     strg := 'Now choosing database : ' + database; showstring (strg);
{$ifdef Unix}
     strg :='Mysql_port      : '+ IntToStr(mysql_port); showstring (strg);
     strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port); showstring (strg);
{$endif}
     Strg :='Host info       : ' + StrPas(mysql_get_host_info(sock));
     showstring (strg);
     Strg :='Server info     : ' + StrPas(mysql_stat(sock)); showstring (strg);
     Strg :='Client info     : ' + Strpas(mysql_get_client_info);  showstring (strg);
 
     trymysqlForm1.statusbar1.simpletext := 'Selecting Database ' + DataBase +'...';
 if mysql_select_db(sock,DataBase) < 0 then
 begin
   strg :='Couldnt select database '+ Database; ShowString (strg);
   Strg := mysql_error(sock); ShowString (strg);
 end
 end;
end;


Das Textfeld zur rechten erlaubt die Eingabe einer SQL Anweisung, ohne einem abschließenden Semikolon; wenn sie mit seinem Inhalt oder Schreibweise zufrieden sind, drücken sie den SendQuery Button, und die Abfrage wird abgearbeitet, mit den Ergebnissen, die in das ResultsMemo Feld geschrieben sind.

Der SendQuery Ereignis handler basiert wieder auf der FPC Textmodus Version, ausgenommen that once again explicit type-conversion has to be done bevor Strings in der Box angezeigt werden.

Ein Unterschied zu dem Textmodus FPC Programm ist, daß wenn eine Fehlerbedingung entdeckt wird, das Programm nicht stoppt und MySQL nicht geschlossen wird; stattdessen, control is returned to the main form und eine Gelegenheit wird gegeben, den Eintrag zu berichtigen, bevor das Kommando neu eingereicht wird. Die Anwendung wird schließlich beendet (mit Schliessen von MySQL), wenn der Exit Button angeklickt wird.

Der Code für SendQuery folgt:

procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
var
 dumquery, strg: string;
begin
     dumquery := TrymysqlForm1.CommandEdit.text;
     dumquery := dumquery+#0;
     query := @dumquery[1];
     trymysqlForm1.statusbar1.simpletext := 'Executing query : '+ dumQuery +'...';
     strg := 'Executing query : ' + dumQuery; showstring (strg);
     if (mysql_query(sock,Query) < 0) then
     begin
       Strg :='Query failed '+ StrPas(mysql_error(sock)); showstring (strg);
     end
     else
     begin
       recbuf := mysql_store_result(sock);
       if RecBuf=Nil then
       begin
         Strg :='Query returned nil result.'; showstring (strg);
       end
       else
       begin
         strg :='Number of records returned  : ' + IntToStr(mysql_num_rows (recbuf));
         Showstring (strg);
         Strg :='Number of fields per record : ' + IntToStr(mysql_num_fields(recbuf));
         showstring (strg);
         rowbuf := mysql_fetch_row(recbuf);
         while (rowbuf <>nil) do
         begin
              Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+ ', Email : ' +
               rowbuf[2] +')';
              showstring (strg);
              rowbuf := mysql_fetch_row(recbuf);
         end;
       end;
     end;
end;


Speichern sie ihr Projekt, und drücken Start -> Start

Download des MYSQL Quelltextes

Eine volle Auflistung des Programms ist hier verfügbar Beispiel Quellcode

Lazarus und Postgresql

Bitte schreiben sie mir!

siehe auch TPSQL

Lazarus und SQLite

von Luiz Américo

Einführung

TSqliteDataset und TSqlite3Dataset sind eine TDataset Abkömmling Klasse, welche jeweils auf sqlite 2.8.x und 3.2.x Datenbanken zugreift. Nachstehend befindet sich eine Liste der hauptsächlichen Vorteile und Nachteile:

Vorteile:

  • Flexibilität: Programmier können wählen, ob sie die SQL Sprache verwenden oder nicht, erlaubt ihnen mit einfachen Tabellenlayouts zu arbeiten oder jedem komplexen Layout, welches SQL ermöglicht.
  • Automatisches Datenbank Update: Kein Bedarf, die Datenbank manuell mit SQL Anweisungen zu updaten, eine einzelne Methode erledigt dies.
  • Schnelligkeit: Es puffert die Daten im Arbeitsspeicher, was das Browsen im Datenbestand schnell macht.
  • Keine Server Installation/Konfiguration: einfach zusammen verfrachten mit der sqlite dynamic Bibliothek.

Nachteile

  • Benötigt externe Datei (sqlite Bibliothek)

Voraussetzungen

  • Für sqlite2 Datenbanken:
    • fpc 2.0.0
    • Lazarus 0.9.10
    • sqlite Laufzeitbibliothek 2.8.15 oder höher (von www.sqlite.org)
  • Für sqlite3 Datenbanken:
    • fpc 2.0.2
    • Lazarus 0.9.11 (SVN Revision 8443 oder höher)
    • sqlite Laufzeitbibliothek 3.2.1 oder höher (von www.sqlite.org)

Bevor sie ein Lazarus Projekt beginnen, stellen sie sicher daß:

  • die sqlite Bibliothek im Systempfad (PATH) ist oder im Verzeichnis des executable
  • unter Linux, bringen sie cmem als erste Unit in den uses Abschnitt des Hauptprogramms

Anwendung (grundlegende Verwendung)

Installieren sie das Package aus dem /components/sqlite Verzeichnis (siehe Instruktionen hier)

Zur Entwicklungszeit setzen sie die folgenen Eigenschaften:

  • FileName: Pfad der sqlite Datei [benötigt]
  • TableName: Name der Tabelle, die in der SQL Anweisung benutzt wird [benötigt]
  • Sql: eine SQL select Anweisung [optional]

Erzeugen einer Tabelle (Dataset)

Klicken sie doppelt auf das Komponenten Icon oder benutzen sie den 'Create Table' Punkt im Popup Menü, das erscheint, wenn sie mit der rechten Maustaste klicken. Ein einfacher selbsterklärender Tabellen Editor wird eingeblendet.

 Hier sind alle Feldtypen, die von TSqliteDataset und TSqlite3Dataset unterstützt werden: 
 
 Integer
 AutoInc
 String
 Memo
 Bool 
 Float
 Word
 DateTime
 Date
 Time
 LargeInt
 Currency
 

Abrufen der Daten

Nach dem Erzeugen der Tabelle oder mit einer vorher erzeugten Tabelle, öffnen sie die Datenmenge mit der Open Methode. Wenn die SQL Eigenschaft nicht gesetzt wurde, dann werden alle Datensätze von allen Feldern abgerufen, das selbe passiert, wenn sie SQL auf:

 SQL:='Select * from TABLENAME'; 

setzen.

Anwendung von Änderungen zur grundlegenden Datendatei

Um die ApplyUpdates Funktion zu benutzen, muß der Datenbestand mindestens ein Feld enthalten, das die Anforderungen für einen Primary Key erfüllt (Werte müssen UNIQUE und nicht NULL sein).

Es ist möglich, dies auf zwei Wegen zu erreichen:

  • Setzen sie die PrimaryKey Eigenschaft auf den Namen eines Primary Key Feldes.
  • Fügen sie ein AutoInc Feld hinzu (dies ist einfacher seit TSqliteDataSet es automatisch als Primary Key behandelt)

Wenn eine oder zwei Bedingungen gesetzt sind rufen sie

 ApplyUpdates;

auf.

PS1: Wenn beide Bedingungen gesetzt sind, wird das Feld entsprechend dem PrimaryKey genutzt, um die Updates anzuwenden.

PS2: Setzen von PrimaryKey auf ein Feld, das kein Primary Key ist, wird zu einem Verlust von Daten führen, wenn ApplyUpdates aufgerfen wird, daher stellen sie sicher, daß das gewählte Feld keinen Null Wert und Unique values enthält, bevor sie es benutzen.

Bemerkungen

  • Obwohl es getestet wurde mit 10000 Datensätzen und problemlos funktionierte, TSqliteDataset hält alle Daten im Arbeitsspeicher, daher denken sie daran nur die notwendigen Daten abzurufen (hauptsächlich mit Memo Feldern).
  • Die selbe Datendatei (Filename Eigenschaft) kann verschiedene Tabllen/Datasets hosten.
  • Verschiedene Datasets (unterschiedliche Kombinationen von Feldern) können erzeugt werden unter simultaner Nutzung der selben Tabelle.
  • Es ist möglich die Daten zu filtern mit der WHERE Anweisung in SQL, das Dataset zu schliessen und wieder zu öffnen (oder die RefetchData Methode aufrufen). Aber in diesem Fall müssen die Reihenfolge und Anzahl der Felder gleich bleiben.
  • Es ist auch möglich, komplexe SQL Anweisungen zu verwenden mittels Aliasen, Joins, Views bei mehrfachen Tabellen (denken sie daran, daß sie sich in der selben Datendatei befinden müssen), aber in diesem Fall wird ApplyUpdates nicht funktionieren. Wenn jemand komplexe Abfragen benutzen will und die Updates in die Datendatei einsetzen, soll er mir Schreiben und ich werde einige Hinweise geben, wie man das tut.
  • Es ist erlaubt, den Dateinamen zu einer sqlite2.x Datendatei zu setzen, welche nicht von TSqliteDataset erzeugt wurde, aber einige Felder werden nicht den korrekten Feldtyp ermitteln. Diese werden als String Felder behandelt.

Allgemeine Beispiele sind zu finden im fpc/fcl/db/sqlite CVS Verzeichnis

Luiz Américo pascalive(at)bol(dot)com(dot)br

Lazarus und MSSQL

Bitte schreiben sie mir!

Lazarus und Interbase / Firebird

Schauen sie auf Installation von Packages nach. Auf dieser Seite befindet sich ein erstes kleines Beispiel und Beschreibung, wie man eine Verbindung zu einem IB oder FB Server herstellt.

Funktioniert auch mit der neuesten Zeoslib (aus dem cvs).

FBLib Firebird Library

[1] ist eine Open Source Bibliothek (nicht datensensitiv) für direkten Zugriff auf die Firebird relationale Datenbank von Borland Delphi / Kylix, Freepascal und Lazarus aus.

Gegenwärtig sind folgende Features enthalten:

  • Direkter Zugriff auf Firebird 1.0.x 1.5.x Classic oder SuperServer
  • Multiplattform [Win32,Gnu/Linux,FreeBSD)
  • Automatische Auswahl der Client Bibliothek 'fbclient' oder 'gds32'
  • Abfragen (Queries) mit Parametern
  • Unterstützt SQL Dialekt 1/3
  • LGPL Lizenzvertrag
  • Extrahieren von Metadaten
  • Simple Script Parser
  • Nur 100-150 KB werden zur finalen EXE hinzugefügt
  • Unterstützt BLOB Felder
  • Export von Daten als HTML SQL Script
  • Service manager (backup,restore,gfix...)
  • Events Alerter

Sie können die Dokumentation von der Webseite downloaden.

Lazarus und dBase

Tony Maro

Sie können auch mit dem Besuch der TDbf Tutorial Seite anfangen.

FPC enthält eine einfache Datenbank Komponente, welche ähnlich funktioniert wie die Delphi TTable Komponente, genannt "TDbf" (TDbf Webseite), die eine sehr elementare Teilmenge von Features für dBase Dateien bietet. Sie wird inzwischen standardmäßig installiert, so daß sie das Lazarus Package aus dem "lazarus/components/tdbf" Verzeichnis nicht mehr manuell installieren und ihre Lazarus IDE neu aufbauen müssen (rebuild). Sie erscheint neben 'TDatasource' in ihrer Komponentenpalette.

Die TDbf Komponente hat einen Vorteil gegenüber anderen Datenbank Komponenten darin, daß sie keine Art von Datenbank-Laufzeit-engines benötigt, aber sie ist nicht die beste Option für große Datenbankanwendungen.

Sie ist sehr einfach zu benutzen. Nehmen sie einfach eine TDbf und legen sie sie auf ihrem Formular ab, setzen den Laufzeit Pfad auf das Verzeichnis, wo sich ihre Datenbank Dateien befinden, setzen den Tabellennamen und verbinden sie mit ihrer TDatasource Komponente.

Wirkliche Funktionalität benötigt ein bißchen mehr Aufwand, wie auch immer. Wenn eine Tabelle nicht bereits schon existiert, müssen sie sie programmatisch erzeugen, es sei denn, es gibt einen kompatiblen Tabellen Designer, mit dem ich nicht vertraut bin.

Der Versuch, eine nicht existierende Tabelle zu öffnen, wird einen Fehler erzeugen. Tabellen können programmatisch erzeugt werden durch die Komponente nachdem der Laufzeit Pfad und der Tabellenname gesetzt wurden.

Zum Beispiel, um eine Tabelle mit dem Namen "dvds" zu erzeugen um ihre DVD Kollektion zu speichern würden sie sie auf ihrem Formular ablegen, den Laufzeit Pfad setzen und den Tabellennamen auf "dvds" setzen. Die resultierende Datei heißt "dvds.dbf".

Fügen sie das Folgende in ihren Code ein:

   Dbf1.FilePathFull = '/Pfad/zu/meiner/Datenbank';
   Dbf1.TableName = 'dvds';
   With Dbf1.FieldDefs do begin
       Add('Name', ftString, 80, True);
       Add('Description', ftMemo, 0, False);
       Add('Rating', ftString, 5, False);
   end;
   Dbf1.CreateTable;

Wenn dieser Code läuft, wird ihre DVD Kollektion Tabelle erzeugt. Danach werden alle datensensitiven Komponenten, die durch TDatasource mit dieser Komponente verbunden sind, einen einfachen Zugang zu den Daten erlauben.

Das Hinzügen von Indexen ist einwenig unterschiedlich von ihrer typischen TTable. Es muß getan werden nachdem die Datenbank geöffnet wurde. Es ist auch die selbe Methode, die sie zum Erneuern der Indexe verwenden. Zum Beispiel:

   Dbf1.Exclusive := True;
   Dbf1.Open;
   Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]);
   Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]);
   Dbf1.Close;

Der erste (primary) Index ist eine Datei mit dem Namen "dvdsname.mdx" und der zweite ist die Datei "rating.ndx", daher müssen sie sorgfältig sein in einer Mehrfach Tabellen Datenbank, nicht den selben Dateinamen erneut zu verwenden.

Ich will versuchen, ein detaillierteres Beispiel zu einem späteren Zeitpunkt hinzuzufügen, aber hoffentlich wird dies jene 'alten' Delphi Programmierer in Gang bringen mit Datenbanken in Lazarus!

Übersetzungen von dieser Seite

Verwandte Links

Startseite für Datenbankanwendungen mit Lazarus
Erstellung einer Datenbankanwendung unter Verwendung von MySQL
Verwendung der Zeos Komponenten

Mitwirkende und Änderungen

Diese Seite wurde konvertiert von der epikwiki Version.