Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
Delphi 7 Enterprise
|
Re: Editieren eines records durch auswahl mit TDBLookUpCombo
15. Aug 2003, 11:08
Dazu folgendes:
In der ersten Tabelle stehen meine Kunden. Der PKey ist Kunde_ID.
Inder zweiten Tabelle stehen die Verträge zu den Kunden. PKey ist ebenfalls Kunde_ID.
Das Problem noch mal auf den Punkt:
Das Löschen von Kunden soll nicht wirklich geschehen. Stattdessen wird der Vertrag des Kunden auf ein EndeDatum gesetzt.
Der Vorgang gestaltet sich folgendermaßen:
1. Auswahl des zu "löschenden" Kundens durch entweder
- DBNavigator
- DBKundenGrid
oder
- DBLookupComboBox
Die ersten beiden Möglichkeiten laufen wie folgt ab:
Bei Auswahl des entsprechenden Kundens wird der Curser auf den Datensatz gesetzt. Direkt durch auswahl im Grid oder durch steppen mit dem DBNavigator.
2. Drücken des Navigator-Delete-Buttons. Dabei passiert folgendes.
BeforePost:
// Den Datensatz des Vertrags auf den Datensatz des aktuellen Kunden
// aktuellen Kunden setzen
messagedlg(QueryKunde.FieldByName('kunde_id').AsSt ring,
mtInformation,mbOKCancel,0);
if QueryVertrag.Locate('Kunde_ID',QueryKunde.FieldByN ame('Kunde_ID').
AsString,[]) then
begin
messagedlg(QueryVertrag.FieldByName('kunde_id').As String,
mtInformation,mbOKCancel,1);
// Anschließend Query1 mit dem Löschauftrag stornieren
DMKundenForm.QueryVertrag.Edit;
QueryKunde.cancel;
// Query2 für die Änderung der Vertragsdaten ändern
messagedlg(QueryVertrag.FieldByName('kunde_id').
AsString,mtInformation,mbOKCancel,1);
DMKundenForm.QueryVertrag.FieldByName('EndeDatum') .
AsString := DateTimeToStr(Date);
DMKundenForm.QueryVertrag.Post;
end
else
messagedlg('Datensatz konnte nicht gefunden werden',
mtInformation,mbOKCancel,1);
Diese Prozedur wird immer vor dem "Löschen" ausgeführt also auch, wenn ich den Datensatz im Grid direkt aussuche und anschließend mit dem Navigator.Delete-Button lösche.
Die Ausgaben im Code sagen mir jeweils, dass der richtige (theoretisch) Datensatz aktiv ist.
Das ganze funktioniert nur dann nicht, wenn ich den zu "löschenden" Datensatz in der DBLookupComboBox auswähle.
3. ApplyUpdates
Die DBLookupComboBox hat folgende Eigenschaften:
Datasource: Vertrag
DataField: Kunde_ID
ListSource: Kunde
ListField: KundenName
KeyField: Kunde_ID
Die DBLComboBox zeigt also alle KundenNamen aus der Tabelle 'Kunden' an, die einen laufenden sprich Vertrag ohne EndeDatum haben.
Wähle ich einen Eintrag aus der Box aus, so wird mir Im DBKundenGrid und auch in den DBEditFeldern der korrekte Datensatz angezeigt. 'Key_Value' ist ebenfalls korrekt.
Mein Verdacht ist das zwar ein Korrekter Datensatz zum editieren angezeigt wird dieser aber aus irgentwelchen Gründen nicht der aktuell zu bearbeitende ist. Denn es wird ja wenn ich einen Eintrag der DBLComboBox auswähle immer nur der erste Eintrag in der Tabelle Vertrag geändert.
Alles unklar?!
Hope that helps?!?!
Danke für das interesse,
Arndt Korsus
|