Definition 2

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Zet_Bonton
Beiträge: 39
Registriert: Di 7. Apr 2009, 17:11

Definition 2

Beitrag von Zet_Bonton »

Hallo,

kann mir jemand die Zusammenhänge dbgrid, datasource, dataset und zquery genau erklären?
Bitte ausführlich wenn es geht.

Danke

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Definition 2

Beitrag von creed steiger »

Nur Versandkosten

http://www.buecherbillig.de/product_inf ... s_id=40034" onclick="window.open(this.href);return false;

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Definition 2

Beitrag von ralli »

Also mal eben auf die Schnelle ist das kein leichtes Unterfangen...
weil eben auch einige Vorkenntnisse hilfreich wären.

DBGrid ist eine visuelle Datenbankkomponente mit der Datensätze in Tabellenform dargestellt werden. Die Verbindung zur eigentlichen Datenbank wird durch eine TDatasoure Komponente realisiert.

DataSource ist ein Bindeglied zwischen der verwendeten Datenbank und dem Dataset als Vorfahre der TQuery oder der TQuery selbst und den sichtbaren Datenbankkomponenten, wie DBgrid, DBEdit usw. Ein TDataset oder eine TQuery ist alleine nicht in der Lage, eine Datenmenge darzustellen. Erst wenn sie geöffnet oder aktiviert wird und ein SQL Befehl eine Ergebnismenge anfordert, insofern die Bedingungen zutreffen, wird sie, wenn eine Verbindung zur Datenbank besteht, das Dataset mit Daten befüllen.

Und hier lauert auch schon eine böse Falle für jeden Anfänger. Hat eine TQuery nach dem Absenden einer SQL Abfrage eine Ergebnismenge erfolgreich zurückbekommen, so wird sie zwar in einem DBGrid angezeigt, benötigst Du aber die Feldnamen oder einzelne Werte aus den Feldern eines Datensatzes, so musst Du quasi die TQuery als Datenmenge in einer Schleife durchlaufen durchlaufen und abfragen.

Hier ein Beispiel aus meinem FBmaker, der eine angezeigte Ergebnismenge in einem DBGrid in eine Datei exportiert, die dann als Inhalt in die erste Zeile die Feldnamen anzeigt und darunter die Inhalte der einzelnen Datenfelder, als praktisch Datensatz für Datensatz. Eine solche Datei kann dann mit jeder Tabellenkalulation eingelesen und weiterverarbeitet werden.

Folgende Komponente werden benötigt:

TIBConnection (Die stellt die Verbindung zu einem Firebird Datenbankserver und einer Datenbank her)

In meinem Beispiel Datenbank genannt.

TSQLQuery ( die wird mit der TIBConnection verbunden und ist das Dataset, das Abfragen an den SQL Server sendet)

In meinem Beispiel Abfrage genannt.

TDatasource (Das Bindeglied zwischen dem Dataset (der TSQLQery) und den visuellen DB Kompos wie das DBGrid zum Anzeigen der Datensätze.

TDBGrid (zum Anzeigen der Datensätze) wird mit der TDatasource verbunden.

TSaveFileDialog (Zum Abspeichern der Exportdatei)

Selbstverständlich benötigst Du einen einsatzbereiten und zuvor installierten Datenbankserver Firebird.

Code: Alles auswählen

procedure TForm1.BitBtn8Click(Sender: TObject);
var ExportDatei : TextFile;
var Counter : Integer;
var ExportString : String;
 
begin
 
// Wenn und nur wenn Du mit dem Firebird Server und einer DB verbunden
bist dann starte den Export
 
If Datenbank.Connected then
 
begin
 
// ausserdem muss vorher eine Tabelle mit einer Abfrage gefüllt worden
sein, denn eine leere Tabelle kann und muss nicht exportiert werden
 
If Abfrage.Active then
 
begin
 
// dann öffne den Dateidialog zum Auswählen des Pfades und Abspeichern
der CSV Datei
 
If Savedialog3.Execute then
 
begin
 
// SaveDialog3. Filename ist der vorher gewählte Pfad und der Dateiname
 
AssignFile(ExportDatei,SaveDialog3.FileName);
 
rewrite(ExportDatei);
 
// Hier werden die Feldnamen aus dem Dataset ermittelt
 
for Counter := 0 to (Abfrage.Fields.Count - 1) do
 
ExportString := ExportString + Trim(Abfrage.Fields[Counter].FieldName) +
';';
 
// Hier werden die Feldnamen in die Exportdatei geschrieben
 
WriteLn(Exportdatei, ExportString);
 
// Variable leeren
 
ExportString := '';
 
// gehe zum ersten Datensatz
 
Abfrage.First;
 
// Und hier dynamisch und flexibel alle Datensaetze und Feldinhalte
 
// Arbeite alle Datensätze ab, solange nicht das Ende der Datei erreicht
wurde
 
while not Abfrage.Eof do
 
begin
 
// String leeren
 
ExportString := '';
 
// Durchlaufe alle Datensätze bis zum Ende der Tabelle
 
for Counter := 0 to (Abfrage.Fields.Count - 1) do
 
// Achtung, für die Funktion VarToStr muss die Unit Variants eingebunden
werden!
 
ExportString := ExportString +
Trim(VarTostr(Abfrage.Fields[Counter].Value)) + ';';
 
// Hier wird der Datensatz (ExportString) in die Exportdatei geschrieben
 
Writeln(ExportDatei,ExportString);
 
// gehe zum nächsten Datensatz, wenn das Dateiende noch nicht erreicht
wurde.
 
Abfrage.next;
 
end;
 
// Schliessen der Datei
 
Closefile(ExportDatei);
 
// Erfolgsmeldung
 
showmessage('CSV Export erfolgreich beendet');
 
end;
 
end;
 
end;
 
end;
Also das habe ich jetzt mal alles aus dem Kopf gemacht, ich hoffe, das das verständlich war, aber je nach Erfahrung und Kenntnisstand nicht ganz einfach.

Und es fehlt noch die Fehlerbehandlung mit Try ... Except, falls mal etwas schief gehen sollte beim Abspeichern.

Vielleicht hat es Dir ein wenig geholfen.

Ansonsten schreibe ich an einem Buch für die Lazarus Datenbankprogrammierung, das im Frühjahr 2010 fertig werden soll. Dies beinhaltet auch ein komplettes Admintool für den Firebird Datenbankserver mit einer Einführung in SQL und vielen anderen Extras. So ist ein Berichtsgenerator eingebaut, sowie die Möglichkeit Serienmails zu verschicken. Dies ist mein Beitrag, um Lazarus auch in Schulen populärer zu machen. Der Quellcode wird dabei sein.

Das war nur ein kleiner Ausblick

Viel Spass.
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Definition 2

Beitrag von pluto »

@Zet_Bonton
Es gibt hier ein sehr gutes DB Tutorial von af0815. Hier der Link:
http://www.lazarusforum.de/viewtopic.php?f=51&t=386" onclick="window.open(this.href);return false;

Dieser Link ist auch sehr Hilfreich:
http://www.delphi-treff.de/" onclick="window.open(this.href);return false;
Schau dir mal die seite an. Da geht es zwar nur um Delphi, aber das meiste dürfte auch unter Lazarus so gehen. Im DB Bereich könnte dies auch der Fall sein oder ?

Es gibt im Lazarus Verzeichnis auch noch verschiedene Demos/Beispiele. Evlt. Helfen die auch schon weiter.
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Definition 2

Beitrag von af0815 »

pluto hat geschrieben:@Zet_Bonton
Es gibt hier ein sehr gutes DB Tutorial von af0815. Hier der Link:
http://www.lazarusforum.de/viewtopic.php?f=51&t=386" onclick="window.open(this.href);return false;
Als Ergänzung dazu seien auch noch die LazInfos erwähnt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten