AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird und query.recordcount
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird und query.recordcount

Ein Thema von mato · begonnen am 12. Dez 2007 · letzter Beitrag vom 12. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von mato
mato

Registriert seit: 24. Nov 2004
Ort: Lutherstadt Eisleben
19 Beiträge
 
Delphi 6 Professional
 
#1

Firebird und query.recordcount

  Alt 12. Dez 2007, 15:53
Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: query
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.

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
Er dachte..., ' Schlimmer kanns nicht mehr kommen !!!' Und es kam schlimmer...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:03
.RecordCount scheint nur die gefetchten Datensätze zu berücksichtigen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mato
mato

Registriert seit: 24. Nov 2004
Ort: Lutherstadt Eisleben
19 Beiträge
 
Delphi 6 Professional
 
#3

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:06
Danke erstmal. Gibts eine Möglichkeit an dieser Stelle des Codes an die Anzahl ranzukommen?
Er dachte..., ' Schlimmer kanns nicht mehr kommen !!!' Und es kam schlimmer...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:08
Extra abfragen, BDE stilllegen!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mato
mato

Registriert seit: 24. Nov 2004
Ort: Lutherstadt Eisleben
19 Beiträge
 
Delphi 6 Professional
 
#5

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:12
Na gut, muß mal sehen. Danke nochmal.

Mato
Er dachte..., ' Schlimmer kanns nicht mehr kommen !!!' Und es kam schlimmer...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#6

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:14
Hallo erstmal...

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 ?
  Mit Zitat antworten Zitat
Benutzerbild von mato
mato

Registriert seit: 24. Nov 2004
Ort: Lutherstadt Eisleben
19 Beiträge
 
Delphi 6 Professional
 
#7

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:21
Zitat von haentschman:
Hallo erstmal...

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 ?

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
Er dachte..., ' Schlimmer kanns nicht mehr kommen !!!' Und es kam schlimmer...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#8

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:35
...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 ?
  Mit Zitat antworten Zitat
Benutzerbild von mato
mato

Registriert seit: 24. Nov 2004
Ort: Lutherstadt Eisleben
19 Beiträge
 
Delphi 6 Professional
 
#9

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:44
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
Er dachte..., ' Schlimmer kanns nicht mehr kommen !!!' Und es kam schlimmer...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#10

Re: Firebird und query.recordcount

  Alt 12. Dez 2007, 16:58
du durchläufst die Schleife 6 mal... bei jedem Durchlauf ist RecordCount 1 höher...
--> obwohl du jedesmal die Query neu absetzt

...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...

[/edit]
  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 08:07 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