Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ZEOS-Query gibt falschen Recordcount zurück (https://www.delphipraxis.net/146404-zeos-query-gibt-falschen-recordcount-zurueck.html)

TheJeed 19. Jan 2010 11:44

Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: ZEOS

ZEOS-Query gibt falschen Recordcount zurück
 
Hallo zusammen!

Bisher hatte ich kaum mal echte Probleme bei der Verwendung der ZEOS-Komponenten. Doch nun stehe ich vor einem kleinen Rätsel. Ich möchte aus einer ganz einfachen Tabelle sämtliche Datensätze holen. Das mache ich so:
Delphi-Quellcode:
    lcon:=TZConnection.Create(nil);
    lcon.Protocol:='...';
    lcon.HostName:='...';
    lcon.Port:=5432;
    lcon.User:='...';
    lcon.Database:='...';
    lcon.Password:='...';
    lcon.Properties.Values['codepage']:='UTF8';
    lcon.Properties.Values['client_encoding']:='UTF8';
    lcon.Connect;

    lroq:=TZQuery.Create(nil);
    lroq.Options:=[doOemTranslate,doCalcDefaults];
    lroq.Connection:=con;

    lroq.SQL.Clear;
    lroq.SQL.Add('SELECT * FROM basket;');
    lroq.ExecSQL;

    lroq.Open;

Direkt danach frage ich ab, wieviele Ergebnis-Datensätze ich bekommen habe:
Delphi-Quellcode:
 c:=lroq.RecordCount;
Ich habe ganz exakt eine Zeile in der Datenbank, allerdings ist c gleich 2. Wenn ich die Ergebnisse in der nun folgenden Schleife abfrage, dann bekomme ich auch zwei Mal den Inhalt der einen, tatsächlich existierenden Zeile aus der DB. Und ja, ich rufe lroq.Next auf.

Kann mich jemand mit der Nase in meinen Fehler reindrücken, den ich noch nicht sehe? Oder ist das vielleicht ein bekanntes Problem der ZEOS Library?

Besten Dank :)

DeddyH 19. Jan 2010 12:00

Re: ZEOS-Query gibt falschen Recordcount zurück
 
Und wenn Du die Zeile mit ExecSQL mal weglässt?

TheJeed 19. Jan 2010 12:12

Re: ZEOS-Query gibt falschen Recordcount zurück
 
Danke für Deine Antwort. Leider ändert sich dadurch nichts.

hoika 19. Jan 2010 12:20

Re: ZEOS-Query gibt falschen Recordcount zurück
 
Hallo,

bei einer SQL-Datenbank sollte man RecordCount nicht verwenden.
Es kann sein, dass ZEOS hier was falsch macht.

Dafür gibt es Select Count(*)

Delphi-Quellcode:
Wozu brauchst du das überhaupt ?

with Query do
begin
  Open;
  try
    while not Eof do
    begin

    // Datensatz lesen und verwenden

      Next;
    end;
  finally
    Close;
  end;
end;

Heiko

TheJeed 19. Jan 2010 12:29

Re: ZEOS-Query gibt falschen Recordcount zurück
 
Ah, interessant. Dann werde ich mich künftig an Deine Methode halten.

Aber mir ist gerade die Lösung meines Problems aufgefallen: Meine Query geht an die falsche Datenbank - und zwar wegen der mir angeborenen Blödheit.
Delphi-Quellcode:
 lroq.Connection:=con;
Da ich ein Stück Quelltext kopiert und nicht korrekt angepasst habe, geht meine Query an die falsche Datenbank raus, nämlich an "con", nicht "lcon".

Tut mir Leid, die Pferde scheu gemacht zu haben!

Nix für ungut :cheers:

hoika 19. Jan 2010 12:31

Re: ZEOS-Query gibt falschen Recordcount zurück
 
Hallo,

argzzzzzz, was für Variablen-Namen ;)

lcon, local con ?


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.

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