Einzelnen Beitrag anzeigen

Darkchild

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

RecordCount synchronisieren zwischen ibQuery und ibtable

  Alt 28. Nov 2006, 13:43
Datenbank: Firebird • Version: 1.5 • Zugriff über: Interbase
Hallöle,

ich habe da mal wieder ein Problem, wie so oft, leider .

folgendes:
Ich habe eine Maske mit einem cxdbgrid, die Daten welche ich dort Anzeige werden mir von meiner IBQuery (ibqueryzeiterfassungansicht) geliefert.
Jetzt ist es über das cxdbGrid möglich verschiedene Filter auf die Datensätze anzuwenden und eine dementsprechende Auswahl an verschiedenen Datensätzen Anzeigen zu lassen.
Jetzt möchte ich einen Count auf diese Datensätze Anwenden um zu wissen wieviele Datensetzte vor dem Filter oder auch danach jetzt noch zu sehen sind.
Denn mit diesem Ergebniss ist es geplant dann später einen weiteren durlauf durch die Datensätze zu machen und in einem Feld in der IBTable einen Wert zu schreiben (wäre das Feld gesperrt welches dann denn Wert 1 bekommen würde).
Jetzt sollen aber diese die Werte in die Table geschrieben werden und nicht in die Query, das bedeutet ich muss beide miteinander synchronisieren und genau das will mir nicht gelingen.

Nur auf der Table einen Count durchzuführen geht ohne Probs, habe ich wie folgt gemacht:
Delphi-Quellcode:
procedure Tfrmzeiterfassunguebersicht.cxbtndatensperrenClick(Sender: TObject);
var
counterrecord:integer;
begin
DataModuleMain.datasourcezeiterfassung.DataSet.First;
    while not DataModuleMain.ibtablezeiterfassung.Eof do
      begin
      counterrecord := DataModuleMain.ibtablezeiterfassung.RecordCount;
      DataModuleMain.ibtablezeiterfassung.Next;
      end;
ShowMessage(inttostr(counterrecord));
end;
Der obengezeigte Quellcode Funktioniert auch, nur das er immer alle Datensätze aus der Table nimmt und natürlich nicht die gefilterten wie im cxdbGrid zu sehen welche aus der Query kommen.

Habe dann Probiert die ganze Geschichte zu synchronisieren und zwar so:
Delphi-Quellcode:
DataModuleMain.dsqueryzeiterfassungsansicht.DataSet.First;
    while not DataModuleMain.ibqueryzeiterfassungansicht.Eof do
      begin
      DataModuleMain.ibqueryzeiterfassungansicht.Locate('zeiterfassung_id', DataModuleMain.ibtablezeiterfassungZEITERFASSUNG_ID.value,[]);
      counterrecord := DataModuleMain.ibtablezeiterfassung.RecordCount;
      DataModuleMain.ibqueryzeiterfassungansicht.LocateNext('zeiterfassung_id', DataModuleMain.ibtablezeiterfassungZEITERFASSUNG_ID.value,[]);
      DataModuleMain.ibtablezeiterfassung.Next;
      end;
ShowMessage(inttostr(counterrecord));
Habe dann mal das eine Locat und dann das andere auskommentiert aber das ergebniss war stets das selbe und zwar wenn ich im Debugger mit dem gesetzten haltepunkt die sache durchlaufe und immer brav F8 drücke läuft er durch und zählt(weiss zwar nicht ob er das dann so macht wie ich möchte , aber er zählt erstmal) ist der Haltepunkt weg und die Anwendung läuft normal und ich Starte die Geschichte, dann hängt sich die Anwendung gnadenlos weg und ich muss schauen das ich diese per TaskManager beende oder irgendwie anders daraus komme.

Hat jemand schonmal ähnliches versucht und weiss wie es geht oder hat einen Tipp oder, oder oder.... ?
Denn ich habe im Moment leider keine Idee was ich dort anders machen muss.

Über ein wenig Hilfe würde ich mich wie immer sehr freuen.

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