Datenbanken in Lazarus

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Datenbanken in Lazarus

Beitrag von Teekeks »

Also: ich würde sagen (nachdem ich mich jetzt 3h bei MySQL belesen habe), nimm Firebird.

Die Vorteile sind das Firebird
A) Auch bei Kommerziellen Projekten kostenlos eingesetzt werden kann
B)z.B. die Datumsfunktionen von Firebird deutlich besser sind als die von MySQL

Im Zusammenhang damit solltest du gleich auf die ZEOS übergehen.
Vorteile:
-Weniger Fehler
-mehr Einstellungsmöglichkeiten
-schneller

@baba: Danke nochmals wegen des Hinweises, das wusste ich echt nicht :shock:

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datenbanken in Lazarus

Beitrag von Hercules »

Hallo an Alle und danke für die vielen Antworten.
Ich habe mich jetzt für FireBird entschieden und glaube, dass ich alles richtig gemacht habe.
Um eine neue FDB-Datei zu erstellen habe ich folgendes programmiert:

procedure TForm1.Button1Click(Sender: TObject);
begin
IBConnection1.DatabaseName:='TEST.FDB';
IBConnection1.UserName:='willy';
IBConnection1.Password:='password';
IBConnection1.CreateDB;
end;

Immer wenn ich den IBConnection1.CreateDB mache kommt eine Fehlermeldung, dass mein
USER-NAME und mein PASSWORD nicht definiert sind, obwohl ich beides in IBConnection1
hinterlegt habe. Kann mir jemand sagen, was ich falsch mache ?
Vielen Dank schon mal, Hercules.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Datenbanken in Lazarus

Beitrag von Bora4d »

hercules:
Hast du denn den Benutzer willy schon erstellt z.b. mit FlameRobbin?
Solange du keinen neuen Benutzer für Firebird-Server erstellt hast mußt du Standardbenutzer nehmen.
Standardbenutzer:
name: SYSDBA
passwort: MASTERKEY

Ich finde viel bessere Weg ist die Datenbank mit Tools wie Flamerobbin zu erstellen und dann im Programm zu verwenden. Dann braucht man sich nicht mit DB-Erstellung quälen und mann kann auch dort leichter Triggers, Views erstellen.
Ich finde du hast richtige Wahl getroffen. Ich habe auch früher BDE verwendet dann sofort zu Firebird mit ZEOS gewechselt und Jahrelang Firebird erfolgreich verwendet. Man kann es auch als Embedded-DB benutzen dann brauchen die Benutzer gar nicht mehr um die Einstellungen zu kümmern.

Vor ein paar Tagen haben ich hier ein Link gesehen. Da ist alles sehr gut beschrieben guck das mal an:
http://lazarus.intern.es/firebird_lazarus.html

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datenbanken in Lazarus

Beitrag von Hercules »

Hallo Bora4d,
ich glaube ich habe verstanden, werde es probieren.
Hercules

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datenbanken in Lazarus

Beitrag von Hercules »

Hallo Bora, hat funktioniert mit sysdba und masterkey, vielen Dank. :D
Jetzt schau ich mir nochmal deinen Link an.

MmVisual
Beiträge: 1582
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Datenbanken in Lazarus

Beitrag von MmVisual »

Diese Beschreibungen über Firebird hören sich doch ganz nett an, also hab ich mal das geladen und installiert.

Das ist der SQL-Code der Tabelle:

Code: Alles auswählen

CREATE TABLE PARAM (
  "ID" INTEGER NOT NULL,
  "ParNr" INTEGER DEFAULT NULL,
  "ParName" VARCHAR(40) CHARACTER SET UTF8 DEFAULT NULL,
  "Land" VARCHAR(5) CHARACTER SET UTF8 DEFAULT NULL,
  "ValInt" INTEGER DEFAULT NULL,
  "ValFloat" double precision DEFAULT NULL,
  "ValText" VARCHAR(250) CHARACTER SET UTF8 DEFAULT NULL,
  "AendDatum" TIMESTAMP DEFAULT 'NOW',
  CONSTRAINT PARAM_ID_PX PRIMARY KEY ("ID")
);
CREATE GENERATOR PARAM_ID_GEN;
COMMIT WORK;
SET TERM ^ ;
CREATE TRIGGER PARAM_ID_SET FOR PARAM BEFORE INSERT AS
BEGIN
  IF ((NEW.ID IS NULL) OR (NEW.ID = 0)) THEN
    NEW.ID = GEN_ID(PARAM_ID_GEN, 1);
END^
SET TERM ; ^
COMMIT WORK;
INSERT INTO PARAM ("ParNr", "ParName", "Land", "ValInt", "ValFloat", "ValText") VALUES
(1, 'DB-Version', NULL, NULL, NULL, 'V0.0.10A21');
COMMIT WORK;
Die Tabelle ist da und mit einer Zeile gefüllt.

Nun gebe ich der TZQuery (ZEOS) den Code:

Code: Alles auswählen

q.SQL.Text := 'SELECT ValText FROM param WHERE ParNr=1';
  q.Open;
Und die geht nicht auf, Ich kann die Tabelle und Felder mit " ` ' usw. Klammern, aber der meckert immer zu.

Allerdings habe ich Firebild V2.5 Installiert. Macht das was?

Irgendwie stehe ich mächtig auf dem Schlauch. Ich habe schon mal vor 5 Jahren Interbase programmiert, daher weiß ich dass die Verbindung zu Firebird korrekt hergestellt ist, nur habe ich mit dem Öffnen der Tabellen probleme.

Schlussendlich habe ich eine Applikation (ca. 200 SQL-Abfragen im Code), die läuft derzeit mit MySQL und mit SQLite. Nun wollte ich das ganze auch mit Firebird hin bekommen.

Vielen Dank für eure Hilfe.

Gruß Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1582
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Datenbanken in Lazarus

Beitrag von MmVisual »

Ich habe nun den SQL Script abgeändert, alle " entfernt und alle Buchstaben groß geschrieben und die Datenbank neu erstellt.

Jetzt gibt es eine andere Fehlermeldung, siehe Bild.

Hat jemand eine Idee was ich ändern kann damit es geht?

gruß Markus
Dateianhänge
Bild2.png
EleLa - Elektronik Lagerverwaltung - www.elela.de

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Datenbanken in Lazarus

Beitrag von Teekeks »

Kannst du bitte mal den gesamte Code von dir zeigen?

Es scheint so, als ob du nicht alle Verknüpfungen erstellt hast, die nötig sind.

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Datenbanken in Lazarus

Beitrag von baba »

Moin, Moin,

Ich arbeite zwar ausschließlich mit Postgres, aber 2 Tips hätte ich.

Versuche mal mit Flamerobin auf die Datenbank zuzugreifen, funktioniert das?
Speichere nur ein Feld und versuche dieses wieder auszulesen, immer nur auf einer Baustelle werkeln.

Baba.

Versuche dich mal an die SQL-Konvention zu halten. Schlüsselwort GROSS und Bezeichner/Variablen klein schreiben, so kannst du schon mal Fehler ausschließen, die aufgrund falscher Schreibweisen entstehen.

SELECT plz, ort, strasse FROM meinedb WHERE id=1;

MmVisual
Beiträge: 1582
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Datenbanken in Lazarus

Beitrag von MmVisual »

Flamerobin klappt.

Anbei der Code und die Datenbank. Ich habe ein Testprojekt mit 3 Programmzeilen geschrieben, in dem der Fehler auftritt.
Das eigentliche Programm ist ca. 15000 Zeilen lang, ich denke damit hat niemand eine Freude.

Benötigt wird:
- Lazarus mit ZEOS Komponente
- fbclient.dll

Vielen Dank für eure Hilfe.

Gruß Markus
Dateianhänge
Test_Zeos.zip
(185.28 KiB) 114-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Datenbanken in Lazarus

Beitrag von Bora4d »

MmVisual:
Dein Program funktioniert bei mir einwandfrei.
Ich habe noch DATASource und DBGRid hinzugefügt und die Ausgabe war das gleiche wie unter FlameRobin.

Bei mir meldete fb dass deine DB mit neuere Version erstellt wurde. Dann habe ich mein FB auf neueste 2.5 aktualiesiert dann lief es ohne Probleme. Manchmal meldet Lazarus-IDE merkwürdige Fehler das mit dem Program nichts zu tun hat. Hast du es auch außerhalb der IDE gestartet. Bei mir lief es ohne Fehler sowohl unter IDE als auch außerhalb.

Und noch eins bei Programmieren sollte man nicht embedded Version benutzen da gibts Probleme. Embedded Version von FB erst bei fertigen Progamm also außerhalb IDE verwenden.

Getestet mit:
Winxp sp3, Lazarus 0.9.29. 2010-09-06 SVN 27275, fpc 2.4.3, Zeos 7.0.0 alpha

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datenbanken in Lazarus

Beitrag von Hercules »

Hallo, darf ich nochmal ne Frage stellen ?
Ich habe mit FlameRobin eine neue Datenbank angelegt, hat gut funktioniert!
Wie teile ich die jetzt in einzelne Felder auf und wie kann ich diese Feldr dann füllen ?
Beispiel:
Die Felder sollen heißen: ANREDE NAME ORT STRASSE
und da soll dann rein: Herr Müller Testort Teststrasse.
M.f.G Hercules

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Datenbanken in Lazarus

Beitrag von Bora4d »

Hercules:
Wenn du im Flamerobin DB-Öffnest dann:
1. Rechtsklick auf [TAbles] -> [Create New]
2. Dann Tabelle und Spalten definieren

Code: Alles auswählen

CREATE TABLE ADRESSE (
  ID INTEGER DEFAULT 0 NOT NULL,
  ANREDE CHAR(20),
  NAME CHAR(40),
  STRASSE CHAR(40),
  ORT CHAR(40) NOT NULL);
3. Dann [Execute Statements F4] ausführen.
4. Commit ausführen
5. Um Daten einzufügen Rechtsklick auf neu erstellte Tabelle "Adressen" dann [instert in to ] auswählen
Das einfügen:

Code: Alles auswählen

INSERT INTO ADRESSE (ID, ANREDE, NAME, STRASSE, ORT)
 VALUES (
0, 
'Herr', 
'Müller', 
'Teststr', 
'Testort'
)
Dann wieder Execute.. und Commit... klicken.

Was mir einfällt is dass FlameRobin Fehler meldet obwohl im Statement kein Fehler ist. Nimm lieber ems-sql-manager-lite das Tool ist wie Delphis DB-Explorer sehr einfach:
http://www.download32.com/ems-sql-manag ... 51826.html

Vielleicht sollstest dich über Datenbanken informieren z.B.:
http://de.wikipedia.org/wiki/Datenbank
http://de.wikipedia.org/wiki/Relationale_Datenbank
Und googel mal nach " Relationale Datenbanken" da gibt es sehr gut online Tutorials und Bücher auch auf Deutsch.
Meistens für MySQL aber da SQL-Standard ist, kan man 99% auf FB übertragen.

MmVisual
Beiträge: 1582
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Datenbanken in Lazarus

Beitrag von MmVisual »

Eigentlich sollte ein Firebird SQL Code immer so aussehen:

Code: Alles auswählen

CREATE TABLE ADR (
  ID INTEGER NOT NULL,
  BEZEICHNUNG VARCHAR(50) CHARACTER SET UTF8 NOT NULL,
  AENDDATUM TIMESTAMP DEFAULT 'NOW',
  CONSTRAINT ADR_ID_PX PRIMARY KEY (ID)
);
CREATE GENERATOR ADR_ID_GEN;
 
COMMIT WORK;
 
SET TERM ^ ;
 
CREATE TRIGGER ADR_ID_SET FOR ADR BEFORE INSERT AS
BEGIN
  IF ((NEW.ID IS NULL) OR (NEW.ID = 0)) THEN
    NEW.ID = GEN_ID(ADR_ID_GEN, 1);
END^
 
SET TERM ; ^
COMMIT WORK;
Leider gibt es in Firebird keine AutoInc Felder, daher muss ein Generator / Trigger hinzugefügt werden. Ansonsten muss sich die EXE selbst um die richtige ID kümmern. (Dann noch ein Trigger BEFORE UPDATE damit AendDatum immer mit 'NOW' beschrieben wird.

Wegen meinem Problem, ich habe ZEOS V6.6Stable. Vieleicht ist ja das das Problem? Denn mit der V6.6 kann nur bis zur FB Version 2.1 auswählen. Ich werden mal FB2.1 installieren und dann das ganze nochmals versuchen. Mein Lazarus kommt vom 23.08.10.
Kann man in der ZEOS V7.0 FB2.5 auswählen?
Zuletzt geändert von MmVisual am Fr 22. Okt 2010, 18:14, insgesamt 1-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datenbanken in Lazarus

Beitrag von Hercules »

Hallo Bora, hallo MmVisual,
vielen Dank für Eure Hilfe. Ich glaube, da komm ich der Sache schon etwas näher.
Ich wünsche Euch und allen anderen Anwesenden ein schönes Wochenende.
M.f.G. Hercules

Antworten