Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Möglichkeit gefilterte Records einer Query zu zählen?? (https://www.delphipraxis.net/114549-moeglichkeit-gefilterte-records-einer-query-zu-zaehlen.html)

JuliaBecks 27. Mai 2008 10:44


Möglichkeit gefilterte Records einer Query zu zählen??
 
Hallo an alle,

muss es irgendwie schaffen gefilterte Records meiner Query zu zählen.
RecordCount brint mir natürlich alles was in der Query drin ist, fällt also flach.
Aus dem Grid heraus die Anzahl der Rows zählen kann ich auch nicht.
was kann man noch evtl. probieren?

danke! :oops:

mkinzler 27. Mai 2008 10:48

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
SQL-Code:
Select Count() ...

JuliaBecks 27. Mai 2008 11:28

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
äähm wie select count(),
soll ich jetzt die tabelle mit count() auslesen? das bringt doch nichts, hab doch wieder die volle Anzahl drin

gemeint ist die anzahl der GEFILTERTEN

DeddyH 27. Mai 2008 11:30

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Kannst Du das Problem mal verständlich beschreiben? Ich weiß nämlich immer noch nicht, was Du mit "gefilterte Records einer Query" meinst :gruebel:

MrSpock 27. Mai 2008 11:32

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Hallo JuliaBecks,

wenn du bei einer Query einen Filter setzt, meine ich, dass RecordCount auch nur die Anzahl der Records zurückgibt, die der Filtereigenschaft entspricht. Musst du aber mal prüfen. :stupid:

JuliaBecks 27. Mai 2008 11:35

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Hallo :-D
ja das ist eben das problem!

Nochmal Query hat 1500 Sätze! alle werden im grid angezeigt.
Dann filtere ich alle die mit "A" anfangen! Es sind 200 Sätze.

RecordCount bring immer noch 1500 Sätze obwohl Query.Filtered := TRUE;

RecordCount schnallt nicht, dass nur 200 angezeigt werden!

Sharky 27. Mai 2008 11:40

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Zitat:

Zitat von JuliaBecks
... RecordCount schnallt nicht, dass nur 200 angezeigt werden!

RecordCount gibt ja auch die Anzahl der Datensätze zurück die im TDataSet vorhanden sind.
Mit der Anzeige oder einem Filtern hat dies dann nichts zu tun wenn ich es richtig im Kopf habe.

JuliaBecks 27. Mai 2008 11:43

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
//
RecordCount brint mir natürlich alles was in der Query drin ist, fällt also flach.

//


das hab ich am Anfang auch schon geschrieben!!!

Medium 27. Mai 2008 11:52

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Wäre es nicht sogar auch performanter, wenn du einfach ein neues SQL Statement absetzt, dass nur die gefilterten Sätze liefert? Wir haben in letzter Zeit viel Logik aus Query-Komponenten in unsere SQL Statements verpackt, weil das DBMS viele Dinge sehr viel schneller erledigt als die Komponenten.

JuliaBecks 27. Mai 2008 11:57

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
ja daran hab ich auch schon gedacht, bloß dachte ich, dass performancetechnisch genau das Gegenteil der Fall wäre

spaxxn 27. Mai 2008 12:11

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Kommt ganz darauf an, wie die Anwendung(-en) bei euch laufen.

Wir haben Kunden, deren Aussenstellen noch mit Zweikanal-ISDN angebunden sind, da würde ich mir soetwas verkneifen. Wird es nur hausintern verwendet, kann die serverseitige Abwicklung durchaus vorteilhaft sein.


Btw: Hast du es mal mit einer anderen Querykomponente versucht?

Bei mir zeigt der RecordCount nach dem Ändern des Filters den richtigen Wert an...

alzaimar 27. Mai 2008 12:20

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Ich kann das Problem nicht nachvollziehen.

Query mit Filtered := False => 80 Records.
Query mit Filtered := True => 4 Records.

BDE, Delphi 6
ADO, Delphi 6

Codewalker 27. Mai 2008 13:36

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Alternativ: Es gibt doch auch die Eigenschaft AffectedRows (bei Queries). Teste doch, was diese anzeigt.

spaxxn 27. Mai 2008 13:44

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
AffectedRows wird hier nicht den Nutzen haben, der gefordert ist.

AffectRows gibt Auskunft darüber, wieviele Zeilen von dem letzten abgesendeten Query(z.B. Update) betroffen waren. Da der Filter aber nur clientseitig gesetzt wird, hat das keinen Einfluss.

JuliaBecks 27. Mai 2008 14:00

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
ich habe mein recordcount in der DataSourceOnChange drin und es funktioniert nicht!
findet onFilter vorher statt oder bin ich jetzt völlig durcheinander :-)

spaxxn 27. Mai 2008 14:02

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Den gültigen RecordCount findest du im an den DataSource gebundenen Dataset. In deinem Fall wohl ein QuerySet.

Der Filter muss auch am Dataset aktualisiert werden.

Was machst du im DataSourceOnChange?

EDIT:
Delphi-Quellcode:
  if Assigned(gData.DataSource) and Assigned(gData.DataSource.DataSet) then
  begin
    gData.Filter.Active := False;
    gData.DataSource.DataSet.Filtered := False;
    gData.BeginUpdate;
    gData.DataSource.DataSet.Filter := '';
    dmMain.MainGridFilter.Clear;
    gData.EndUpdate;
    gData.DataSource.DataSet.Filtered := True;
    gData.Filter.Active := True;
    if dmMain.cdsAddress.Active then
    begin
      StatusBar1.Panels[4].Text := 'Datensätze mit Filter: ' + IntToStr(dmMain.cdsAddress.RecordCount);
    end;
  end;
Als kleines Beispiel aus einem Projekt. Das klappt, zumindest bei mir.

JuliaBecks 27. Mai 2008 14:45

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
ja danke das sieht ja ganz gut aus, nur du sagst filtered := true und welche Filterung hast du im FilterRecord? Gibts dort irgendwelche Einschränkungen z.b

Delphi-Quellcode:
Accept := Ort = 'München';
weil wenn du dort nichts filterst wirst du ja nicht feststellen können, ob recordcount auch das richtige liefert. :gruebel:

alzaimar 27. Mai 2008 14:47

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Du kannst einfach Filterkriterien direkt in die 'Filter'-Eigenschaft reinschreiben. Ansonsten musst Du nicht nur das 'OnFilterRecord'-Ereignis definieren, sondern dem Dataset auch sagen , das es filtern soll (Filtered := True)

JuliaBecks 27. Mai 2008 14:51

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
ja ok das wußte ich jetzt nicht weil bei uns immer mehrzeilige Filtereinschränkungen in das FilterRecord geschrieben werden.

was ist das gData überhaupt? ein Grid wohl nicht

spaxxn 27. Mai 2008 14:57

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
gData ist in dem Fall ein TdxDBGrid. Das sollte aber egal sein. Die Funktion die ich dir gepostet habe, war zum Leeren des Filters, darum Filter := '';

Edit: Rechtschreibung und so

alzaimar 27. Mai 2008 15:03

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
Ich habe es eben getestet:

Delphi-Quellcode:
Procedure TForm1.MyButtonClick (Sender : TObject);
Var
  TotalRecs, FilteredRecs : Integer;

Begin
  MyQuery.OnFilterRecord := FilterMyRecord;
  MyQuery.Active := True;
  TotalRecs := MyQuery.RecordCount;
  MyQuery.Filtered := True;
  FilteredRecs := MyQuery.RecordCount;
  Memo1.Lines.Add (Format('# filtered records = %d, total = %d',[FilteredRecs, TotalRecs]));
End;

procedure TForm1.FilterMyRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := SomeFilterFunction (FilterMyRecord);
end;
funktioniert auch.

Poste doch mal, was bei Dir nicht funktioniert.

JuliaBecks 27. Mai 2008 15:22

Re: Möglichkeit gefilterte Records einer Query zu zählen??
 
ok danke schön an alle!!!! ich denke der fehler ist dann wo anders! ich prüfe es nochmal von vorne!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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