Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query gibt nur 1 Zeile zurück (https://www.delphipraxis.net/7228-query-gibt-nur-1-zeile-zurueck.html)

theomega 6. Aug 2003 10:24


Query gibt nur 1 Zeile zurück
 
Hallo Leute
ich versuche mich gerade daran, mit den Interbase-Kompos auf eine Firebird Datenbank zuzugreifen. Ich habe schon viel mit MySQL auch unter Delphi gearbeitet.

Ich habe jetzt diesen Code hier konstruiert:
Delphi-Quellcode:
procedure execquery(str:string;passv:boolean);
begin;
form1.qrmain.Close;
form1.qrmain.SQL.Clear;
form1.qrmain.SQL.Add(str);
if (passv) then form1.qrmain.Open
else form1.qrmain.ExecSQL;
end;



procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
execquery('SELECT * FROM sachbuch sb, gliederung gl WHERE (sb.sbid = gl.sbid)',true);
for i:= 0 to qrmain.RecordCount-1 do begin;
  qrmain.RecNo := i;
  showmessage(qrmain.fieldbyname('SBNR').asstring+'->'+qrmain.fieldbyname('GLNR').asstring);
end;
end;
Auf meinem Formular sitzt:
qrmain : TIBQuery
dbmain : TIBDatabase
trmain : TIBTransaction

Wenn ich jetzt auf den Button klicke kommt nur der erste Datensatz heraus. "qrmain.recordcount" enthält ja auch nur 1. Obwohl, wenn ich im "IB Expert" (Admin-Tool) das Query ausführe ich 3 Zeilen als Result bekomme. Es muß also an meinem Code liegen, aber wo?

Danke und Grüße
TO

Sharky 6. Aug 2003 10:39

Re: Query gibt nur 1 Zeile zurück
 
Hai theomega,

Zitat:

Zitat von theomega
Delphi-Quellcode:
...
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
execquery('SELECT * FROM sachbuch sb, gliederung gl WHERE (sb.sbid = gl.sbid)',true);
for i:= 0 to qrmain.RecordCount-1 do begin;
  qrmain.RecNo := i;
  showmessage(qrmain.fieldbyname('SBNR').asstring+'->'+qrmain.fieldbyname('GLNR').asstring);
end;
end;

Mit RecNo kannst Du glaube ich nur die Nummer des aktiven DS abfragen.

Probiere mal das:
Delphi-Quellcode:
...
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
execquery('SELECT * FROM sachbuch sb, gliederung gl WHERE (sb.sbid = gl.sbid)',true);
while NOT (qrmain.eof) do
 begin
  showmessage(qrmain.fieldbyname('SBNR').asstring+'->'+qrmain.fieldbyname('GLNR').asstring);
  qrmain.next;
 end;
end;
Was mich noch wundert: Du möchtest die Felder "SBNR" und "GLNR" anzeigen hast sie aber nicht in der SELECT Anweisung stehen?

r_kerber 6. Aug 2003 11:31

Re: Query gibt nur 1 Zeile zurück
 
Zitat:

Zitat von Sharky
Was mich noch wundert: Du möchtest die Felder "SBNR" und "GLNR" anzeigen hast sie aber nicht in der SELECT Anweisung stehen?

dafür hat er ja den Stern, das heißt alle Felder!
@theomega: RecordCount funktioniert bei SQL-Datenbanken nicht immer. Laß Dir das Ergebnis doch mal in einem DBGrid anzeigen. Der Fehler liegt aber glaube ich an dem Semikolon nach den begin.
Ansonsten würde ich deine for-Schleife durch folgenden Code ersetzen:
Delphi-Quellcode:
qrmain.First;
while not qrmain.Eof do
begin
  showmessage(qrmain.fieldbyname('SBNR').asstring+' >'+qrmain.fieldbyname('GLNR').asstring);
  qrmain.Next;
end;

Sharky 6. Aug 2003 11:39

Re: Query gibt nur 1 Zeile zurück
 
Zitat:

Zitat von r_kerber
dafür hat er ja den Stern, das heißt alle Felder!

Okay, Ich mache jetzt Feierabend und kaufe mir eine neue Brille.
Ist ja furchtbar was ich alles übersehe :shock:

r_kerber 6. Aug 2003 11:42

Re: Query gibt nur 1 Zeile zurück
 
Zitat:

Zitat von Sharky
Okay, Ich mache jetzt Feierabend und kaufe mir eine neue Brille.

Versuch's doch erst mal mit dem Putzen des Monitors. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 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