AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi RecordCount bei gefiltertem Dataset
Thema durchsuchen
Ansicht
Themen-Optionen

RecordCount bei gefiltertem Dataset

Ein Thema von Der Jan · begonnen am 29. Nov 2006 · letzter Beitrag vom 30. Nov 2006
Antwort Antwort
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#1

RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 08:04
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus 6.4
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) ?
Gruß, Jan
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 08:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#3

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 09:12
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.
Gruß, Jan
  Mit Zitat antworten Zitat
Darkchild

Registriert seit: 13. Okt 2006
Ort: NRW
169 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 11:40
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:
cxGridView.DataController.KeyFieldNames := 'zeiterfassung_id';
Gruss
Darkchild
Ich bin der Geist der stets verneint und das mit recht, denn alles was entsteht ist wert das es zugrunde geht, drum besser wär das nichts entstünde, so ist denn alles was ihr Sünde, Zerstörung, kurz das Böse nennt, mein eigendliches Element.
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#5

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 11:54
Danke dir, hilft aber leider auch nicht, ich habe ja kein Grid, in dem ich die Daten darstelle, sondern nur das "nackte" Dataset....
Gruß, Jan
  Mit Zitat antworten Zitat
Darkchild

Registriert seit: 13. Okt 2006
Ort: NRW
169 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 14:32
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".
Ich bin der Geist der stets verneint und das mit recht, denn alles was entsteht ist wert das es zugrunde geht, drum besser wär das nichts entstünde, so ist denn alles was ihr Sünde, Zerstörung, kurz das Böse nennt, mein eigendliches Element.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: RecordCount bei gefiltertem Dataset

  Alt 29. Nov 2006, 16:04
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#8

Re: RecordCount bei gefiltertem Dataset

  Alt 30. Nov 2006, 06:54
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..... 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...
Gruß, Jan
  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 18:34 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