Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Di 18.01.11 19:28 
Hallo,

arbeitet evtl jemand mit dem Quantumgrid und Firebird/Interbase?

Ich hätte da eine Frage zum Speichern von Datensätzen im GridMode.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 19.01.11 00:12 
Vermutlich schon :gruebel:

Was ist denn die Frage? Wenn du sie nicht stellst, kann wohl auch keiner Antworten...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 19.01.11 08:26 
user profile iconJosef-B hat folgendes geschrieben Zum zitierten Posting springen:

arbeitet evtl jemand mit dem Quantumgrid und Firebird/Interbase?


Ja.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Mi 19.01.11 09:27 
Ich hab das Quantumgrid 6.

Verbunden ist das Grid über ein TIBDataset

Ich setze nach dem Post das Transaction.Commit.

Wenn ich im Grid nun ein Feld ändere, und anschließend auf eine
andere Zeile klicke, dann bekomme ich immer einen
Index out of bounds.

Wenn ich das Commit nicht setze dann gehts.

Aber ich möchte möglichst schnell nach der Änderung speichern.

Wie gesagt ich arbeite im gridmode.

Jetzt hab ich mir gedacht, ich müsste eben vor dem scrollen
abspeichern, hilft auch nicht.

Über das Ereignis im View OnFocusedRecordChanged gehts auch nicht.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 19.01.11 10:56 
Zeig mal ein bisschen Quellcode und an welcher Stelle genau der Fehler kommt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Mi 19.01.11 12:54 
Hier mal der Quellcode zum AfterPost.

Das wird ja automatisch durch das Dataset ausgelöst, weil beim Scrollen automatisch gespeichert wird.

der Fehler kommt aber noch vor dem Post, welche Ereignisse da zwischen dem Click in die andere Zeile
und dem Speichern des Datasets ausgelöst werden, wüsste ich auch gerne, dann könnte man es evtl. eingrenzen.

Kann man sich die Events irgendwie anzeigen lassen?

Für das Grid hab ich gar keinen Quellcode. Sind alles nur Einstellungen im ObjektInspektor.
Da habe ich aber auch eigentlich nur gridmode = true gesetzt.

Und sonst das übliche, Datasource eingetragen, keys etc.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TFAuftrag.DSPAfterPost(DataSet: TDataSet);
var pos: tbookmark;
begin
with dsp do
  begin
  pos := getbookmark;
  if transaction.InTransaction then transaction.Commit;
  open;
  gotobookmark(pos);
  freebookmark(pos);
  if not isempty then edit;
  end;
end;
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1336
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 19.01.11 16:48 
Innerhalb der Ereignisse des Grids soltest du nicht versuchen den Datensatz zu wechseln oder zu Posten. Ein Post wird von deiner DB(Tabelle) beim Datensatzwechsel automatisch ausgelößt. Was du allerdings beachten solltest, es gibt neuerdings in der View unter "OptionData" eine Option namens CancelOnExit die dummerweise per default true ist. Die bewirkt das deine Änderungen verworfen werden wenn du irgend ein Element außerhalb des Grids anclickst. Desweiteren, wenn du einem Column einen Typ gibst (Properties zuordnen) hast du dann eine Eigenschaft ImmediatePost die den im Grid eingetragenen Wert direkt in deine Datenmenge schreibt (kein Post, steht aber im Datensatz).
Möchtest du wirklich nach jeder Änderung auch ohne Datensatzwechsel Posten musst du dir eine WindowsMessage deklarieren und diese aus dem OnValidate des Columns Senden (PostMessage. Nicht SendMessage!) und dann drauf reagieren. Dadurch ist die Nachrichtenkette des Grids vollständig abgearbeitet und es sollte keine Probleme geben.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Mi 19.01.11 21:11 
Danke Sinspin,

das mit dem CancelOnExit kannte ich auch noch nicht.

Ich habs jetzt so gelöst, dass ich die Transaction zu Firebird immer beim
Verlassen des Grids (OnExit) beende, also das Commit setze.

Das klappt ganz gut, zumindest hab ich die Fehlermeldung mit
dem Listenindex nicht mehr.

Mal sehen, was sonst noch so kommt ;-) denn das Quantumgrid finde ich
nicht so ganz einfach zu bewältigen, obwohl es ja echt ne richtig schöne
Sache ist :-)