Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   CalcFields von Dataset funktioniert nicht (https://www.delphipraxis.net/184708-calcfields-von-dataset-funktioniert-nicht.html)

Luckner 16. Apr 2015 10:33

Datenbank: Firebird • Version: 2.1 • Zugriff über: Dataset

CalcFields von Dataset funktioniert nicht
 
Hallo,
ich benutze in einigen Datasets die Eigenschaft OnCalcFields. Bis jetzt hat es gut funktioniert. In einem neuem Modul greife ich ebenfalls mit einem Dataset auf eine Tabelle. Im Dataset (wie üblich) habe ich ein berechnetes Feld 'NUMMER :Integer' erstellt und in der Eigenschaft CalcFields von diesem Dataset ebenfalls

Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungCalcFields(DataSet: TDataSet);
begin
 with IBDataSetAuswaertung do
   Begin
     FieldValues['NUMMER'] := RecNo;
   end;
end;
eingefügt. Dieses Feld zeige ich in einem DBGrid an. Aber es funktioniert nicht. Habe jetzt alle Datasets miteinander vergliechen, aber keinen Unterschied gefunden. Hat Jemand eine Idee woran es liegen kann?

Danke, Luckner

himitsu 16. Apr 2015 10:39

AW: CalcFields von Dataset funktioniert nicht
 
Erstmal was zur Fehlervermeidung:
Rate mal, warum diese Methode einen Parameter besitzt. :stupid:


Haltepunkt in die Event-Methode: Wird sie auch aufgerufen?
Das Event hängt auch wirklich an OnCalcFields dran?

Luckner 16. Apr 2015 11:20

AW: CalcFields von Dataset funktioniert nicht
 
Hallo himitsu,
kapier nicht so ganz, was Du meinst.
Luckner

Sir Rufo 16. Apr 2015 12:25

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Zitat von Luckner (Beitrag 1297947)
Hallo himitsu,
kapier nicht so ganz, was Du meinst.
Luckner

Er meint: "Hast du den Debugger benutzt und welche Erkenntnisse hast du daraus gewonnen?"

Er meinte zudem noch, dass du in der Methode
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungCalcFields( DataSet: TDataSet );
schon frei Haus die entsprechende Referenz auf das DataSet erhältst und fragt sich, warum du diese Referenz nicht benutzt?
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;

DeddyH 16. Apr 2015 12:29

AW: CalcFields von Dataset funktioniert nicht
 
Und das heißt letzten Endes:
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungCalcFields(DataSet: TDataSet);
begin
  DataSet{Das ist der Parameter}.FieldValues['NUMMER'] := DataSet{Das ist auch der Parameter}.RecNo;
end;
Und hier mal einen Haltepunkt setzen und schauen, ob das Ereignis überhaupt ausgelöst wird, d.h. das Programm im Debugger auch anhält.

Luckner 16. Apr 2015 12:39

AW: CalcFields von Dataset funktioniert nicht
 
Hallo sir Rufo,

Zitat:

Er meint: "Hast du den Debugger benutzt und welche Erkenntnisse hast du daraus gewonnen?"
Weil ich den Debugger noch nicht richtig behersche:(.

Zitat:

Er meinte zudem noch, dass du in der Methode procedure TDataModule8.IBDataSetAuswaertungCalcFields( DataSet: TDataSet ); schon frei Haus die entsprechende Referenz auf das DataSet erhältst und fragt sich, warum du diese Referenz nicht benutzt?
Ja, dachte ich mir schon, dass Das nicht so richtig ist, aber bei den anderen Datasets hats funktioniert und deshalb hatte ich Das nicht als Fehlerquelle betrachtet. Was müsste ich denn als Referenz reinschreiben und wo? Werde mich auch gleich hier im Forum noch einmal umschauen.

Luckner.

DeddyH 16. Apr 2015 12:41

AW: CalcFields von Dataset funktioniert nicht
 
Es steht doch jetzt schon 2 Mal da oben, wie und wo :)

Sir Rufo 16. Apr 2015 12:44

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Zitat von Luckner (Beitrag 1297960)
Zitat:

Er meinte zudem noch, dass du in der Methode procedure TDataModule8.IBDataSetAuswaertungCalcFields( DataSet: TDataSet ); schon frei Haus die entsprechende Referenz auf das DataSet erhältst und fragt sich, warum du diese Referenz nicht benutzt?
Ja, dachte ich mir schon, dass Das nicht so richtig ist, aber bei den anderen Datasets hats funktioniert und deshalb hatte ich Das nicht als Fehlerquelle betrachtet. Was müsste ich denn als Referenz reinschreiben und wo? Werde mich auch gleich hier im Forum noch einmal umschauen.

Luckner.

Niemand sagt, dass es falsch ist ... nur ungeschickt, wenn ich schon mundgerecht etwas vorgesetzt bekomme. Dann kann man auch die Komponente umbenennen oder diese Methode mehrfach verwenden, weil ich mich dort drinnen auf den Parameter beziehe.

Luckner 16. Apr 2015 12:50

AW: CalcFields von Dataset funktioniert nicht
 
Habe ich jetzt umgeschrieben.
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungGridCalcFields(DataSet: TDataSet);
begin
  IBDataSetAuswaertungGrid.FieldValues['NUMMER'] := IBDataSetAuswaertungGrid.RecNo;
end;
Kein Erfolg. Komisch, als ob diese Prozedur hier nicht angestossen wird. Bei den Anderen funktioniert es. Irgendwie sehe ich vor lauter Wald, die Bäume nicht.:?

himitsu 16. Apr 2015 12:51

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Niemand sagt, dass es falsch ist ...
Jupp, genauso funktioniert es ja auch (meistens), wenn man in TForm1 auf die Variable Form1 zugreift.
Bzw.
Delphi-Quellcode:
with DataModule8.IBDataSetAuswaertung do
würde eventuell auch funktionieren, aber dennoch macht man sowas "besser" nicht.


Bezüglich Debugger wurde ja schon so Einiges genannt.
Besser sich damit mal auseinanderzusetzen, denn du kannst da schneller und vorallem besser/leichter nach Problemen suchen, als wir, die wir nur einen Bruchteil deines Codes kennen.
Zitat:

Komisch, als ob diese Prozedur hier nicht angestossen wird.
Genau deswegen sollst du das ja mal prüfen. :zwinker:

DeddyH 16. Apr 2015 12:53

AW: CalcFields von Dataset funktioniert nicht
 
http://www.delphipraxis.net/41047-tu...ortgeschr.html, das sollte man zumindest schon einmal gelesen haben, ich würde ein Lesezeichen im Browser empfehlen.

Sir Rufo 16. Apr 2015 12:57

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Zitat von Luckner (Beitrag 1297963)
Habe ich jetzt umgeschrieben.
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungGridCalcFields(DataSet: TDataSet);
begin
  IBDataSetAuswaertungGrid.FieldValues['NUMMER'] := IBDataSetAuswaertungGrid.RecNo;
end;
Kein Erfolg. Komisch, als ob diese Prozedur hier nicht angestossen wird. Bei den Anderen funktioniert es. Irgendwie sehe ich vor lauter Wald, die Bäume nicht.:?

Du hast da eine Methode mit einem Parameter:

procedure TDataModule8.IBDataSetAuswaertungGridCalcFields( DataSet : TDataSet);

dann benutze doch einfach den Parameter:
Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswaertungGridCalcFields(DataSet: TDataSet);
begin
  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // Wir nehmen hier den Parameter DataSet
  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;

baumina 16. Apr 2015 13:01

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Zitat von Luckner (Beitrag 1297963)
Komisch, als ob diese Prozedur hier nicht angestossen wird. Bei den Anderen funktioniert es. Irgendwie sehe ich vor lauter Wald, die Bäume nicht.:?

Die Wahrscheinlichkeit, dass im Objektinspektor die Zuweisung "OnCalcFields" fehlt, ist schon enorm hoch. Also schau bei dem Dataset IBDataSetAusw(a)ertung (Auswertung schreibt man normalerweise nicht mit ä) nach, ob bei den Ereignissen OnCalcFields auch IBDataSetAusw(a)ertungCalcFields drin steht.

Luckner 16. Apr 2015 13:22

AW: CalcFields von Dataset funktioniert nicht
 
Hier die letze Änderung

Delphi-Quellcode:
procedure TDataModule8.IBDataSetAuswertungGridCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;
. Danke für den Hinweis mit dem ae. Leider kein Erfolg. Werde jetzt in allen Datasets diese Korrektur vornehmen.

DeddyH 16. Apr 2015 13:24

AW: CalcFields von Dataset funktioniert nicht
 
Wird der Code denn überhaupt ausgeführt?

himitsu 16. Apr 2015 13:45

AW: CalcFields von Dataset funktioniert nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1297983)
Wird der Code denn überhaupt ausgeführt?

Scheinbar nicht, aber mehrere Aufforderungen das mal zu prüfen wurden scheinbar übersehen.

Es wurde alles mehrfach gesagt.
Ich bin raus. Zur vermutlichen Lösung einfach die bissherigen Beiträge lesen und abarbeiten.

Luckner 16. Apr 2015 13:49

AW: CalcFields von Dataset funktioniert nicht
 
Werde mich mit den Debugger mal beschäftigen. Wenn die Prozedure jedoch nicht ausgeführt wird, woran kann Das liegen? Ich sehe überhaupt kein Unterschie zu den anderen Datasets. Eine Idee hätte ich noch. Die werde ich ausprobieren und dann berichten.

BadenPower 16. Apr 2015 14:02

AW: CalcFields von Dataset funktioniert nicht
 
Als Notfall-Alternative kannst Du auch die Dateien

DataModule8.pas
DataModule8.dfm

Zippen und hier hochladen.

Luckner 16. Apr 2015 14:06

AW: CalcFields von Dataset funktioniert nicht
 
Ich habe es :thumb:. Der Fehler war (wenn es ein Fehler ist), das DBGrid aus einem anderem Frame des Projektes zu kopieren um mir einige Arbeit am Design des Grid zu sparren. Habe zwar, so dachte ich, das kopierte Grid entsprechend angepasst und alle Felder wurden angezeigt. Nur das CalcField eben nicht. Jetzt habe ich ein neues DBGrid erstellt und die Felder eingefügt und es funktioniert. Jetzt werde ich mir das Design des Grids vornehmen.
Danke Euch, habe hier wieder einiges gelernt. Und diesen Debugger werde ich mir in dem neuem Delphi vornehmen. Möglicherweise ist er etwas verständlicher als in Delphi7.

Gruß, Luckner


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