Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird und query.recordcount (https://www.delphipraxis.net/104905-firebird-und-query-recordcount.html)

mato 12. Dez 2007 15:53

Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: query

Firebird und query.recordcount
 
Hallo Leute

War ein langer Tag, ich kapiere es einfach nicht.

Delphi-Quellcode:
procedure seite_schreiben(ueberarray: array of integer);
var i :integer;
begin
for i := 0 to length(ueberarray) -1 do
 begin
  form1.queryinsert.Active := false;
  form1.trans.Active := false;
  form1.base.Connected := false;
  form1.base.Connected := true;
  form1.trans.Active := true;
  form1.queryinsert.SQL.Clear;
  form1.queryinsert.SQL.Add('select * from LESER where nummer =' +quotedstr(inttostr(ueberarray[i]))+'');
  form1.queryinsert.active := true;
  zeile := zeilereal;
  excel.cells[zeile,spalte].value := inttostr(ueberarray[i]) + '/' + inttostr(form1.queryinsert.RecordCount);
  inc(zeile);
  while not form1.queryinsert.Eof = true do
   begin
    showmessage(inttostr(form1.queryinsert.RecordCount));
    anzahlzeitungen := anzahlzeitungen +1;
    excel.cells[zeile,spalte].value := form1.queryinsert.Fields.Fields[0].AsString + '/' + form1.queryinsert.Fields.Fields[2].AsString;
    inc(zeile);
    form1.queryinsert.Next;
    if form1.queryinsert.Eof = true then spalte := spalte + 1;
   end;//end while
  form1.queryinsert.Active := false;
  form1.trans.Active := false;
  form1.base.Connected := false;
 end;//end for
end;
Die Zeile meine ich.

Delphi-Quellcode:
excel.cells[zeile,spalte].value := inttostr(ueberarray[i]) + '/' + inttostr(form1.queryinsert.RecordCount);
Er zeigt mir immer 1 an, obwohl es mehr sein sollten. Ansonsten funtzt alles wunderbar.
Die Showmessage() in der --While_Schleife-- habe ich nur eingefügt um zu kontrollieren wann er auf die volle Anzahl kommt. Sollte --Recordcount-- nicht die gesamte
Anzahl der Datensätze aus der Query zurückgeben, und zwar sofort und nicht erst wenn ich die gesamten Datensätze durchlaufen habe.
Danke im Voraus

mato

mkinzler 12. Dez 2007 16:03

Re: Firebird und query.recordcount
 
.RecordCount scheint nur die gefetchten Datensätze zu berücksichtigen

mato 12. Dez 2007 16:06

Re: Firebird und query.recordcount
 
Danke erstmal. Gibts eine Möglichkeit an dieser Stelle des Codes an die Anzahl ranzukommen?

mkinzler 12. Dez 2007 16:08

Re: Firebird und query.recordcount
 
Extra abfragen, BDE stilllegen!

mato 12. Dez 2007 16:12

Re: Firebird und query.recordcount
 
Na gut, muß mal sehen. Danke nochmal.

Mato

haentschman 12. Dez 2007 16:14

Re: Firebird und query.recordcount
 
Hallo erstmal... :-D

wenn ich das richtig sehe möchtest du z.B. 1/10 angezeigt bekommen.

...da du bei jedem Schleifendurchlauf die Query neu absetzt hast du jeweils nur 1 Datensatz (RecordCount) als Ergebnis (Übereinstimmung mit Nummer)

...die maximale Anzahl der Datensätze gibt dir doch length(ueberarray) -1 an, oder ? :gruebel:

mato 12. Dez 2007 16:21

Re: Firebird und query.recordcount
 
Zitat:

Zitat von haentschman
Hallo erstmal... :-D

wenn ich das richtig sehe möchtest du z.B. 1/10 angezeigt bekommen.

...da du bei jedem Schleifendurchlauf die Query neu absetzt hast du jeweils nur 1 Datensatz als Ergebnis (Übereinstimmung mit Nummer)

...die maximale Anzahl der Datensätze gibt dir doch length(ueberarray) -1 an, oder ? :gruebel:


Ne, nicht ganz. Kurze Erklärung. In --üeberarray-- stehen Hausnummern. Unter jeder Hausnummer stehen dann verschiedene Namen, welche ich dann für jede Nummer haben möchte. In der ersten Abfrage stehen dann also 6 Datensätze, die ich dann vor der Ausgabe der einzelnen Namen haben möchte, nicht erst danach. Muß mal sehen wie ich das mache und in der Exceltabelle nicht mit den Zeilennummern nicht durcheinander komme.

Mato

haentschman 12. Dez 2007 16:35

Re: Firebird und query.recordcount
 
...ich glaube nicht so ganz, daß in der ersten Abfrage 6 Datensätze stehen, dann wäre RecordCount = 6 :???:

...visualisiere mal die Query in einem Grid und kontrolliere das Ergebnis der Abfrage...
...ich denke, das die SQL Abfrage wirklich nur einen Datensatz liefert.

wie sehe denn der Wert von inttostr(ueberarray[i]) ausgeschrieben aus ?

mato 12. Dez 2007 16:44

Re: Firebird und query.recordcount
 
Also. Die Anzahl der Datensätze ist 6. Ausgeschrieben ist es eine '81', eben die Hausnummer. Die Exceltabelle in die ich alles reinschreibe zeigt mir alle Namen korrekt an, alle schön untereinander. Über diesen Namen hätte ich aber gerne die Anzahl der Namen stehen, da steht aber nur jedesmal eine 1, nicht 6.
Mit dem --showmessage-- in der while-schleife lasse ich mir bei jedem Durchlauf (while) die recordcount anzeigen. Zählt wunderbar hoch, bis sechs. Die 6 erreicht er aber erst wenn ich alle durchlaufen habe, also bei --EOF--. Ich verstehe es ja auch nicht, ist aber so.

mato

haentschman 12. Dez 2007 16:58

Re: Firebird und query.recordcount
 
du durchläufst die Schleife 6 mal... bei jedem Durchlauf ist RecordCount 1 höher...
--> obwohl du jedesmal die Query neu absetzt :wiejetzt:

...warum holst du nicht alle Werte mit einer Query und durchläufst die Ergebnismenge mit der Schleife zum Eintragen in die Tabelle ?

wie sehen die Werte von inttostr(ueberarray[i]) bei jedem Schleifendurchlauf aus ?
wie ist der Aufbau von LESER ?

[edit]
..fast übersehen...
form1.queryinsert.Active := false; -- kann weg.
ersetzen von form1.queryinsert.active := true; durch form1.queryinsert.open;

Zitat:

Also. Die Anzahl der Datensätze ist 6.
...ist die Anzahl der Datensätze in der DB... heißt aber noch lange nicht, daß diese auch in der Query ankommen... :roll:

[/edit]


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