Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select-Abfrage mit TQuery (https://www.delphipraxis.net/113050-select-abfrage-mit-tquery.html)

RWarnecke 1. Mai 2008 22:20

Datenbank: Firebird • Version: 2.0.3 • Zugriff über: Zeos

Select-Abfrage mit TQuery
 
Hallo,

ich kann ja über den folgenden Code, eine Select-Abfrage ausführen und das Ergebnis in normale TEdit-Felder einfügen :
Delphi-Quellcode:
Query.SQL.Text := "Select ort from orte where plz='<Wert>'";
Query.SQL.Open;
Query.Active := true;
while not EOF do
begin
  Listbox1.Items.Add(Fields[0].AsString);
end;
Query.Active := false;
Mit diesem Codeschnipsel kann ich ja die Listbox1 mit dem Ergebnis füllen. Da ich gerade an einer DLL schreibe, möchte ich die While-Schleife in meinen Eigentlichen Sourcecode packen und den Rest in die DLL. Was muss ich in der Funktion als Rückgabewert mitgeben, dass ich alle Datensätze übergeben bekomme und auch abfragen kann ?

Die Funktion zum Abrufen Sie wie folgt aus :
Delphi-Quellcode:
function Query(SQLCommand : string):TFields;
begin
  Query.SQL.Text := "Select ort from orte where plz='<Wert>'";
  Query.SQL.Open;
  Query.Active := true;
  result := Query.Fields;
end;
Wenn ich nur ein Ergebnis herausbekomme, funktioniert es wunderbar. Wenn ich aber mehrere Ergbenisse habe, dann komme ich zwar an den ersten Wert dran aber nicht an die restelichen. Wie komme ich an die restlichen Werte, wenn das Ergebnis > 1 ist ?

mkinzler 1. Mai 2008 22:25

Re: Select-Abfrage mit TQuery
 
Ich würde das nicht in eine DLL auslagern aber wenn müsstest du Funktionen/Prozeduren für First, Next, Prior, Last usw. implementieren

Bernhard Geyer 1. Mai 2008 22:41

Re: Select-Abfrage mit TQuery
 
Dazu müsstest du "gemeinsame Laufzeitpackages" verwenden oder eine richtige BPL. Anonsten wird das sehr aufwendig den "lebende" Delphi-Objekt ohne gemeinsame Laufzeitpackages werden früher oder später Probleme verursachen.

RWarnecke 2. Mai 2008 07:09

Re: Select-Abfrage mit TQuery
 
Kann ich da nichts über TDataSource oder TDataSet machen ? Ich könnte doch TDataSource als Rückgabewert nehmen und dann an ein TDBEdit oder TDBListBox übergeben oder nicht ?

mkinzler 2. Mai 2008 07:16

Re: Select-Abfrage mit TQuery
 
Aber was ist dann der Zweck der Auslagerung?

Bernhard Geyer 2. Mai 2008 07:21

Re: Select-Abfrage mit TQuery
 
Zitat:

Zitat von RWarnecke
Kann ich da nichts über TDataSource oder TDataSet machen ? Ich könnte doch TDataSource als Rückgabewert nehmen und dann an ein TDBEdit oder TDBListBox übergeben oder nicht ?

Ja kannst du: Mit gemeinsammen Laufzeitpackages/als BPL.

RWarnecke 2. Mai 2008 09:02

Re: Select-Abfrage mit TQuery
 
Zitat:

Zitat von mkinzler
Aber was ist dann der Zweck der Auslagerung?

Ich möchte das zukünftig als Modul nutzen, wenn ich weitere Datenbankanwendungen schreibe.
Zitat:

Zitat von Bernhard Geyer
Ja kannst du: Mit gemeinsammen Laufzeitpackages/als BPL.

Dann muss ich ja verschiedene Dateien von Delphi noch mitgeben. Das möchte ich eigentlich nicht, da ich schon andere Programme mit solchen Dateien installiert habe und habe nur schlechte Erfahrungen gemacht damit.

p80286 2. Mai 2008 09:22

Re: Select-Abfrage mit TQuery
 
Hallo RWarnecke,

Wenn Du die DB-Zugriffe auslagern willst, dann nimm doch TDataModule. Das ist zwar nur ein Source-Modul aber ich habe bisher ganz gute Erfahrungen damit gemacht.
Ich habe alles was mit DB-Zugriffen zu tun hat in ein DataModule gepackt und diese Daten dann meist per Stringlist weiter gereicht.

also etwa so:

Delphi-Quellcode:
function GET_PERS_DATA(indat:integer):Tstringlist;
Gruß
K-H

Bernhard Geyer 2. Mai 2008 10:08

Re: Select-Abfrage mit TQuery
 
Zitat:

Zitat von RWarnecke
Zitat:

Zitat von mkinzler
Aber was ist dann der Zweck der Auslagerung?

Ich möchte das zukünftig als Modul nutzen, wenn ich weitere Datenbankanwendungen schreibe.

Bridge-Pattern und alles in die Exe kompilieren. Pro DBMS wirst du auf einen Overload (je nach eingesetzter Kompos) von ein paar 0-500 kByte Exegröße kommen
Zitat:

Zitat von RWarnecke
Das möchte ich eigentlich nicht, ...

Dann mußt du eine C-Kompatible DLL-Schnittstelle (aufwand) Entwickeln.

RWarnecke 2. Mai 2008 12:26

Re: Select-Abfrage mit TQuery
 
Ich habe im Grunde genommen folgendes gemacht. Ich habe eine DLL erstellt und dazu noch ein DataModul mit in die DLL gegeben. Die Funktion aus dem ersten Beitrag habe ich in die DLL geschrieben und exportiert. Wenn die DLL erstellt wird, hat sie eine Größe von 1,4MB. Ich lade dann dynamisch die DLL und stelle die Verbindung zu Datenbank her und schliesse auch die Verbindung und entlade die DLL wieder.

Das mal als Hintergrund zu meiner Frage. Klar kann ich über eine StringList gehen, nur möchte ich das als letzten Ausweg nehmen. Ich müsste dann ja immer das ganze dementsprechend konvertieren oder bearbeiten lassen im Hauptprogramm. Daher suche ich noch nach einer anderen Lösung.
Es muss doch irgendeine Klasse geben, die ich in der Funktion als Rückgabewert mit übergebe, die alle relevanten Daten (Anzahl Datensätze u.s.w.) und den Inhalt der Datensätze enthält ?

Zitat:

Zitat von Bernhard Geyer
Dann mußt du eine C-Kompatible DLL-Schnittstelle (aufwand) Entwickeln.

Da ich kein C kann, fällt auch diese Variante für mich flach.

Wie funktioniert das denn mit dem DataSource bei den TDBEdit-Feldern oder den anderen DB-Komponenten (TDBListbox, TDBLabel u.s.w.) ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz