Delphi4 C/S, postgreSQL
Hallo beisammen,
ich benötige für eine Warenwirtschaft eine Editiermöglichkeit für Rechnungspositionen, also sozusagen die Elemente aus denen eine Rechnung zusammengesetzt ist.
Meine Frage: Wie kann ich die Position (Zeile) eines Datensatzes im DBCtrlGrid herausfinden?
Zur Erklärung: Sämtliche Positionen eines Projektes sind in einer SQL-Tabelle (ProPos) abgelegt, die unter anderem die Spalten Projektnummer, Zeile, Artikelnummer, Text, VK besitzt.
Das eigentliche Bearbeiten eines Projektes (=Rechnung) erfolgt in einem DBCtrlGrid, in das ich zu Beginn sämtliche Spalten des zu bearbeitenden Projektes lade und nach der Spalte "Zeile" sortiere.
Der Benutzer hat nun die Möglichkeit, über die Standardroutinen direkt im Grid neue Datensätze anzulegen, Sätze zu löschen und (später, ich weiß leider noch nicht wie...) die Reihenfolge der vorhandenen Sätze zu ändern.
Beim Schließen des Grids stehe ich nun vor dem Problem, dass ich gerne die vom Benutzer neu erstellte Reihenfolge der Datensätze übernehmen möchte - also die Information über die Zeilennummer im Grid in die Spalte "Zeile" schreiben muss.
Da ich keinen Weg gefunden habe, eine Information über die Zeilennummer eines Datensatzes im Grid zu erhalten, mache ich den Umweg über die RecNo des zugehörigen Querys. Ich durchsuche also beim Schließen des Fensters die Datenmenge sequentiell und schreibe für jeden Datensatz die RecNo als "Zeile":
<PRE><CODE>
procedure TfmProPos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Änderungen im Grid sichern:
dmGreenBase.qyProPos.ApplyUpdates;
dmGreenBase.qyProPos.CommitUpdates;
// Zeilennummern aktualisieren:
dmGreenBase.qyProPos.First;
while not dmGreenBase.qyProPos.EOF do
begin
dmGreenBase.qyProPos.Edit;
dmGreenBase.qyProPosZeile.Value := dmGreenBase.qyProPos.RecNo;
dmGreenBase.qyProPos.ApplyUpdates;
dmGreenBase.qyProPos.CommitUpdates;
dmGreenBase.qyProPos.Next;
end;
end;
</PRE></CODE>
Das funktioniert so einigermaßen. Hat trotzdem jemand eine Idee, wie ich irgendwie anders auf die Zeilennummern im Grid zugreifen kann?
Oder wie realisiert man eine solche Positionsbearbeitung üblicherweise?
Für jede Hilfe bereits jetzt herzlichen Dank!!
Grüße
Ralph
Hallo beisammen,
ich benötige für eine Warenwirtschaft eine Editiermöglichkeit für Rechnungspositionen, also sozusagen die Elemente aus denen eine Rechnung zusammengesetzt ist.
Meine Frage: Wie kann ich die Position (Zeile) eines Datensatzes im DBCtrlGrid herausfinden?
Zur Erklärung: Sämtliche Positionen eines Projektes sind in einer SQL-Tabelle (ProPos) abgelegt, die unter anderem die Spalten Projektnummer, Zeile, Artikelnummer, Text, VK besitzt.
Das eigentliche Bearbeiten eines Projektes (=Rechnung) erfolgt in einem DBCtrlGrid, in das ich zu Beginn sämtliche Spalten des zu bearbeitenden Projektes lade und nach der Spalte "Zeile" sortiere.
Der Benutzer hat nun die Möglichkeit, über die Standardroutinen direkt im Grid neue Datensätze anzulegen, Sätze zu löschen und (später, ich weiß leider noch nicht wie...) die Reihenfolge der vorhandenen Sätze zu ändern.
Beim Schließen des Grids stehe ich nun vor dem Problem, dass ich gerne die vom Benutzer neu erstellte Reihenfolge der Datensätze übernehmen möchte - also die Information über die Zeilennummer im Grid in die Spalte "Zeile" schreiben muss.
Da ich keinen Weg gefunden habe, eine Information über die Zeilennummer eines Datensatzes im Grid zu erhalten, mache ich den Umweg über die RecNo des zugehörigen Querys. Ich durchsuche also beim Schließen des Fensters die Datenmenge sequentiell und schreibe für jeden Datensatz die RecNo als "Zeile":
<PRE><CODE>
procedure TfmProPos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Änderungen im Grid sichern:
dmGreenBase.qyProPos.ApplyUpdates;
dmGreenBase.qyProPos.CommitUpdates;
// Zeilennummern aktualisieren:
dmGreenBase.qyProPos.First;
while not dmGreenBase.qyProPos.EOF do
begin
dmGreenBase.qyProPos.Edit;
dmGreenBase.qyProPosZeile.Value := dmGreenBase.qyProPos.RecNo;
dmGreenBase.qyProPos.ApplyUpdates;
dmGreenBase.qyProPos.CommitUpdates;
dmGreenBase.qyProPos.Next;
end;
end;
</PRE></CODE>
Das funktioniert so einigermaßen. Hat trotzdem jemand eine Idee, wie ich irgendwie anders auf die Zeilennummern im Grid zugreifen kann?
Oder wie realisiert man eine solche Positionsbearbeitung üblicherweise?
Für jede Hilfe bereits jetzt herzlichen Dank!!
Grüße
Ralph
Comment