AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Select-Abfrage mit TQuery
Thema durchsuchen
Ansicht
Themen-Optionen

Select-Abfrage mit TQuery

Ein Thema von RWarnecke · begonnen am 1. Mai 2008 · letzter Beitrag vom 3. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Select-Abfrage mit TQuery

  Alt 1. Mai 2008, 23:20
Datenbank: Firebird • Version: 2.0.3 • Zugriff über: Zeos
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Select-Abfrage mit TQuery

  Alt 1. Mai 2008, 23:25
Ich würde das nicht in eine DLL auslagern aber wenn müsstest du Funktionen/Prozeduren für First, Next, Prior, Last usw. implementieren
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Select-Abfrage mit TQuery

  Alt 1. Mai 2008, 23:41
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 08:09
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 08:16
Aber was ist dann der Zweck der Auslagerung?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 08:21
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 10:02
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 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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 10:22
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:

function GET_PERS_DATA(indat:integer):Tstringlist; Gruß
K-H
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 11:08
Zitat von RWarnecke:
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 von RWarnecke:
Das möchte ich eigentlich nicht, ...
Dann mußt du eine C-Kompatible DLL-Schnittstelle (aufwand) Entwickeln.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Select-Abfrage mit TQuery

  Alt 2. Mai 2008, 13:26
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 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.) ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
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