Hallo,
kann mir jemand die Zusammenhänge dbgrid, datasource, dataset und zquery genau erklären?
Bitte ausführlich wenn es geht.
Danke
Definition 2
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Definition 2
Nur Versandkosten
http://www.buecherbillig.de/product_inf ... s_id=40034" onclick="window.open(this.href);return false;
http://www.buecherbillig.de/product_inf ... s_id=40034" onclick="window.open(this.href);return false;
-
- 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
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.
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.
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;
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
-
- 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
@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.
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
Michael Springwald
- 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
Als Ergänzung dazu seien auch noch die LazInfos erwähnt.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;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).