AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Count und RecordCount liefert "-1"
Thema durchsuchen
Ansicht
Themen-Optionen

Count und RecordCount liefert "-1"

Ein Thema von Zigster · begonnen am 3. Mär 2004 · letzter Beitrag vom 3. Mär 2004
Antwort Antwort
Zigster

Registriert seit: 27. Jan 2004
2 Beiträge
 
Delphi 7 Personal
 
#1

Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 08:24
Hallo allerseits,

habe da unter Delphi ein Problem, dass das Zählen von Datensätzen aus einem SQL-Query betrifft.

ich lasse mir über ein SQL-Query eine bestimmte Datenmenge auf einem DBGrid anzeigen (Suchfunktion). Die Anzahl der Ergebnisse soll in einem Label angezeigt werden.

Das Problem ist, dass sowohl count als auch recordcount einen falschen Wert (nämlich -1) im Label anzeigt, sobald die Anzahl der Treffer grösser 9 ist. Solange die Anzahl der Treffer unter 10 ist funktioniert die Sache ohne Probleme...!

Ist dieses Problem bekannt ? Ich habe jedenfalls trotz Suchens noch keine Lösung gefunden.

Ich benutze BDE und ODBC!

Vielen Dank für Hilfe

Zigster
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 08:51
Wie kannst du in einer Personal überhaupt DB-Kompos verwenden?

Nachtrag:
Ganz übersehen (1. Beitrag) - > Herzlich Willkommen in der Delphi-PRAXIS!
Wenn du eine Delphi-Version angibst, verlassen sich andere, die dir helfen wollen darauf. Du wirst also mit so manchem Tipp nichts anfangen können, wenn du die falsche Version angibst.
  Mit Zitat antworten Zitat
Zigster

Registriert seit: 27. Jan 2004
2 Beiträge
 
Delphi 7 Personal
 
#3

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 08:55
Bevor hier irgendwelche Fragen auftauchen...ich benutze die aktuelle Trial-Version von Delphi 7!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 09:32
Hallo Zigster,
soweit ich mich erinnere, funktioniert Count mit Queries nicht immer richtig, da die Anzahl der Sätze u.a. ja auch vom "Read-Buffer" abhängt.
Um die Anzahl der Sätze einer Tabelle zu erhalten kannst Du ja auch SQL benutzen:
Delphi-Quellcode:
VAR
RecCount :Integer;
...
  query.SQL.Clear;
  query.SQL.Text :=
    (
    'SELECT COUNT(*) ' +#10+
    'FROM ' +#10+
    'DeineTabelle'
    );
  query.Execute; // oder query.open;
  RecCount := query.Field(0);
[EDIT]
Auf besonderen Wunsch von "Schurli G" "#10er TAGS" für den OracleMonitor eingefügt
p.s. Habe die PlugInDoc noch immer nicht gelesen
[/EDIT]
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 09:36
Du musst natürlich exakt die gleixhe Where/Having-Clause verwenden, umm auf die gleiceh Anzahl von Datensätzen zu kommen.

OT: @Armin
Sieht schon besser aus ( nur guck dir das mal im OracleMonitor an )
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 09:41
Count bzw. RecordCount werden kann man auch ermittelt in dem man

MoveLast bzw Last aufruft. Denn dann sind erst alle Daten im Speicher.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 09:56
Hallo Neo,
Zitat von neolithos:
MoveLast bzw Last aufruft. Denn dann sind erst alle Daten im Speicher.
so rein vom Gefühl her (ich bin kein DB-Guru) ist Deine Variante sehr Ressourcen-Aufwändig, dann
wenn die DB groß ist und eine C/S Variante ist, da in der DB jeder Satz "berührt" und lokal upgedatet
wird. Bei einem SQL Statement aber, wird dieses am Server ausgeführt und belastet den Client wenig, da z.B.
als Ergebnis nur, wie bei obigem Beispiel, der Count an den Client geliefert wird.

Falls ich falsch liege, bitte um Klarstellung
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 10:06
In einer "richtigen" DB mit vernünftigem Optimizer und Query plan geht ein "SELECT Count(*)" rucki zucki.
Mit der MoveLast - RecordCount Variante bist du darauf angewiesen, dass wirklich die gesamt Datenmenge im Cache bleibt.
Wenn ich so etwas mit DOA (nicht ADO!) mache habe ich generell nur 25 - 100 Einträge auf dem Client, die anderen werden autom. von der DB geholt, wenn sie gebraucht werden.
Ein MoveLast (falls es das bei meinen Kompos überhaupt gibt ) würde dann entweder nur 100 liefern oder eine komplette Übertragung auslösen.
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Count und RecordCount liefert "-1"

  Alt 3. Mär 2004, 11:29
Also, um das was implizit schon in vielen Antworten enthalten ist, noch mal ganz deutlich zu sagen:
Die Methode recordcount des Datasets gibt üblicherweise (jeder Entwickler eines speziellen TDataset - Derivates kann das ja machen wie er will) nicht die Anzahl der Datensätze zu einer Query in der Datenbank sondern die Anzahl der aktuell auf den Client geladenenen Datensätze wieder. Man sollte also die Methode verwenden, die der Entwickler vorgesehen hat (select count für Datensätze in der DB, oder recordcount für Datensätze aktuell im TDataset), sonst baut man gefährliche Tretminen in sein Programm ein.

Wenn also die Anzahl der der Datensätze im Client wirklich ist was Du suchst, dann füge ich noch hinzu, das das recordcount bei TQuery und TTable bei mir im Laufe der immer das Ergebnis geliefert hat, das ich erwartet habe, das con Dir beschriebene Phänomen kenne ich nicht.

Grüße
Woki
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:21 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