Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RecordCount bei gefiltertem Dataset (https://www.delphipraxis.net/81541-recordcount-bei-gefiltertem-dataset.html)

Der Jan 29. Nov 2006 09:04

Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus 6.4

RecordCount bei gefiltertem Dataset
 
Hallo miteinander,

ich muß mal wieder das leidige Thema bemühen: Wie zähle ich die Anzahl der gefilterten Records in einem DataSet (TpFIBDataSet) ? Ich weiß, es gab hierzu schon den ein oder anderen Thread, ich habe alle gelesen , die ich gefunden habe, aber ein Lösungsansatz für mein Problem war leider nicht dabei.

Allllso: Ich habe eine LookupComboBox, das verknüpfte DataSet holt seine Werte aus paar Tabellen und wird gefiltert. Diese Methode ist nicht gerade populär, ich weiß. Aber in diesem Fall durchaus sinnvoll, denn der Filter wird (im Rahmen einer inkrememtellen Suche) ziemlich oft verändert.
Ich dachte zuerst an die Methode TpFIBDataSet.VisibleRecordCount, aber die liefert aus mir unbekannten Grund immer "8", egal wie viele Records "sichtbar" (also in der LokkupCombo angezeigt) sind. Das berühmte select count(*) mag ich eben wegen der häufigkeit der veränderung auch nicht machen.

So bleibt mein Frage: Wie zähle ich die Anzahl der gefilterten Records oder die Anzahl der angezeigten Items in der LookupCombo (ist ja in dem Fall das selbe) ? :gruebel:

Reinhard Kern 29. Nov 2006 09:39

Re: RecordCount bei gefiltertem Dataset
 
Zitat:

Zitat von Der Jan
Hallo miteinander,

ich muß mal wieder das leidige Thema bemühen: Wie zähle ich die Anzahl der gefilterten Records in einem DataSet (TpFIBDataSet) ? Ich weiß, es gab hierzu schon den ein oder anderen Thread, ich habe alle gelesen , die ich gefunden habe, aber ein Lösungsansatz für mein Problem war leider nicht dabei.

Allllso: Ich habe eine LookupComboBox, das verknüpfte DataSet holt seine Werte aus paar Tabellen und wird gefiltert. Diese Methode ist nicht gerade populär, ich weiß. Aber in diesem Fall durchaus sinnvoll, denn der Filter wird (im Rahmen einer inkrememtellen Suche) ziemlich oft verändert.
Ich dachte zuerst an die Methode TpFIBDataSet.VisibleRecordCount, aber die liefert aus mir unbekannten Grund immer "8", egal wie viele Records "sichtbar" (also in der LokkupCombo angezeigt) sind. Das berühmte select count(*) mag ich eben wegen der häufigkeit der veränderung auch nicht machen.

So bleibt mein Frage: Wie zähle ich die Anzahl der gefilterten Records oder die Anzahl der angezeigten Items in der LookupCombo (ist ja in dem Fall das selbe) ? :gruebel:

Hallo,

ich verstehe das Problem nach dieser Schilderung überhaupt nicht - warum willst du unbedingt abfragen, weiviele Zeilen gleichzeitig angezeigt werden? das ist doch völlig irrelevant; und es ist auch klar, dass die Standardantwort 8 heisst, das ist die Voreinstellung dafür, wieviele Einträge beim Aufklappen angezeigt werden.

Wieviele Einträge gesamt vorhanden sind, entspricht doch dem, was die Abfrage geliefert hat - und das steht ganz einfach in der Combobox als Items.Count.

Gruss Reinhard

Der Jan 29. Nov 2006 10:12

Re: RecordCount bei gefiltertem Dataset
 
Der Hintergrund ist, das diese Lookupcombo bei der Eingabe ein Pflichtfeld ist, natürlich nur, wenn auch Werte drinstehen.
Bei einer LookupComboBox gibt es leider kein "Items" Property und so auch kein "Count", sonst hätte ich das ganze Problem nicht.

Darkchild 29. Nov 2006 12:40

Re: RecordCount bei gefiltertem Dataset
 
Hallo,

habe da etwas das mir Dataspider gepostet hat in meinem Thread vieleicht hilft es:

Zitat:

Delphi-Quellcode:
 procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
  ID: Integer;
begin
  with cxGridView.DataController do
  begin
    for i := 0 to FilteredRecordCount - 1 do
    begin
      // ID ermitteln anhand des Index
      ID := GetRecordId(FilteredRecordIndex[i]);
      // Jetzt am Besten eine SP zum Setzen von gesperrt auf Feld mit dieser ID
    end;
    // und jetzt ein Refresh auf die Table
    // das Refresh ist ausreichend, wenn die Table mit der Query eine gemeinsame Transaction benutzt.
    // Sonst wäre ein CommitRetaining der SP und der Table notwendig.
  end;
end;
Voraussetzung ist, dass du das Feld mit der eindeutigen ID in der Grid einträgst:
Delphi-Quellcode:
cxGridView.DataController.KeyFieldNames := 'zeiterfassung_id';

Gruss
Darkchild

Der Jan 29. Nov 2006 12:54

Re: RecordCount bei gefiltertem Dataset
 
Danke dir, hilft aber leider auch nicht, ich habe ja kein Grid, in dem ich die Daten darstelle, sondern nur das "nackte" Dataset....

Darkchild 29. Nov 2006 15:32

Re: RecordCount bei gefiltertem Dataset
 
Hm,

bin da selber nicht so firm in diesem LookupCombobox Datenbank gedrisse, aber ich habe da eine Idee in meinem umständlichen verwirrten Kopf von der ich selbst nicht weis ob es klappt, aber in meinem Kopf scheint es Theoretisch zu funktionieren, also die Idee ist folgende:

Wenn Du die sachen filterst, kannst Du dabei nicht in den Tabellen ein Feld "Filter Aktiv" oder wie Du es auch nennen magst einen wert von 1 oder 0 reinschreiben, 1 heist wird gefiltert und 0 wird nicht gefiltert, so nachdem Du dann dieses Flag gesetzt hast kannst Du doch einen Count durchführen für alle Datensätze in denen "Filter Aktiv" auf 0 steht (über SQL oder so).

Würde das nicht klappen (zwar wieder umständlich und vieleicht auch nicht elegant aber was anderes fällt mir dazu jetzt nicht ein) ?

Gruss
Darkchild

P.S : Kann auch sein das dies eine ziemlich dämliche Idee ist die jenseits von gut und böse ist, aber "versuch macht kluch".

dataspider 29. Nov 2006 17:04

Re: RecordCount bei gefiltertem Dataset
 
Zitat:

Zitat von Der Jan
select count(*) mag ich eben wegen der häufigkeit der veränderung auch nicht machen.

Da ich mit IBO arbeite, habe ich das Problem zum Glück nicht, da IBO den Filter auf dem Server ausführt und somit RecordCount immer den richtigen Wert liefert.

Ich denke, dass du um das count(*) nicht herumkommst.
Eine Recordanzahl kann dir das DataSet ja nur liefern, wenn alle Records geladen sind.
Du könntest natürlich auch selbst zählen.
Stichwörter:
DisableControls...GetBookMark...while not eof...EnableControls...GotoBookmark...FreeBookMark ...

Cu, Frank

Der Jan 30. Nov 2006 07:54

Re: RecordCount bei gefiltertem Dataset
 
Hallo,

danke für die Antworten.
Ich habe es inzwischen über eine zusätzliche select-query gemacht. Gefällt mir zwar nicht, aber es funktioniert erstmal. Ich bin auch der Meinung, das nach dem Beitrag von Darkchild schon gepostet zu haben, aber irgendwie..... :gruebel: Entweder hab ich nicht auf Absenden geklickt oder der Beitrag ist im Halbleiter-Nirwana untergegangen...
Falls ich noch eine andere Lösung finden sollte, werde ich die auf jeden Fall hier posten...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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 by Thomas Breitkreuz