![]() |
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: |
Re: Möglichkeit gefilterte Records einer Query zu zählen??
SQL-Code:
Select Count() ...
|
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 |
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:
|
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: |
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! |
Re: Möglichkeit gefilterte Records einer Query zu zählen??
Zitat:
Mit der Anzeige oder einem Filtern hat dies dann nichts zu tun wenn ich es richtig im Kopf habe. |
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!!! |
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.
|
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
|
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... |
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 |
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.
|
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. |
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 :-) |
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:
Als kleines Beispiel aus einem Projekt. Das klappt, zumindest bei mir.
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; |
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:
weil wenn du dort nichts filterst wirst du ja nicht feststellen können, ob recordcount auch das richtige liefert. :gruebel:
Accept := Ort = 'München';
|
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)
|
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 |
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 |
Re: Möglichkeit gefilterte Records einer Query zu zählen??
Ich habe es eben getestet:
Delphi-Quellcode:
funktioniert auch.
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; Poste doch mal, was bei Dir nicht funktioniert. |
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