Adresse(Objekt) enthält Kontaktdaten (Objektliste) und Kontakte (Objektliste) das funktioniert so weit.
Kontaktnr:=Adresse.Kontaktdaten.Items[i] //Telefonnummern für Adresse
Kontakt:=Adresse.Kontakte.Items[i] // Ansprechpartner
Kontaktnr:=Kontakt.Kontaktdaten.Items[x] //Telefonnummern für Ansprechpartner
funktioniert alles, nur an der einen Stelle nicht.
Kontakt(Objekt aus Kontakte) enthält Kontaktdaten (Objektliste) das funktioniert in den Fenstern (Anzeige) einwandfrei, jedoch komme ich in der Speichern-Funktion nicht an die Kontaktdaten:
Code: Alles auswählen
TKontakt = class(TObject)
private
...
fKontaktdaten: TKontaktdatenListe;
published
...
property Kontaktdaten: TKontaktdatenListe read fKontaktdaten write fKontaktdaten;
...
//Kontakt.Kontaktdaten:= TKontaktdatenliste.Create; wird an anderer Stelle ausgeführt und es können Daten darin erzeugt und gelesen werden
procedure TKontaktListe.WriteListData(IDAdresse: integer);
var
LastID: integer;
i: integer;
cnt: integer;
begin
debugln('TKontaktListe.WriteListData');
LastID := 0;
with dtmBasis.qrySQL do
begin
for i := 0 to Self.Count - 1 do // Link zur Adresse setzen !
begin
Self.Items[i].SetIDAdresse(IDAdresse);
end;
for i := 0 to Self.Count - 1 do
begin
if Self.Items[i].fIsChanged then
begin
Self.Items[i].fIsChanged := False;
if Self.Items[i].fID = 0 then
begin {Insert}
DebugLn(' Datensatz wird neu angelegt');
SQL.Clear;
SQL.Add('Insert Into Kontakte');
SQL.Add('(fk_adresse, kon_anrede, kon_titel, kon_vorname, kon_zuname, kon_abteilung, kon_funktion, kon_briefanrede, kon_notiz) ');
SQL.ADD('VALUES');
SQL.ADD('(:fk_adresse, :kon_anrede, :kon_titel, :kon_vorname, :kon_zuname, :kon_abteilung, :kon_funktion, :kon_briefanrede, :kon_notiz) ');
Prepare;
end
else
begin //Update
DebugLn(' Datensatz ' + IntToStr(Self.Items[i].fid) + ' wird aktualisiert');
SQL.Clear;
SQL.ADD('UPDATE Kontakte SET');
SQL.ADD('fk_adresse = :fk_adresse,');
SQL.ADD('kon_anrede = :kon_anrede,');
...
SQL.ADD('WHERE idkontakt = :idkontakt;');
Params.ParamByName('idkontakt').AsInteger := Self.Items[i].fID;
end;
Params.ParamByName('fk_adresse').AsInteger := Self.Items[i].fIDAdresse;
...
Params.ParamByName('kon_notiz').AsString := Self.Items[i].fNotiz;
try
ExecSQL;
DebugLn(' Gespeichert !');
except
On E: Exception do
debugln(' ' + E.Message);
end;
end
else
DebugLn(' Datensatz ' + IntToStr(Self.Items[i].fID) + ' ist aktuell');
if LastID = 0 then
LastID := Self.Items[i].fID;
// Bis hier funktionier es
// HIER IST DAS PROBLEM (so funktioniert das allerdings bei den Adressen problemlos):
// fKontaktdaten wird richtigerweise als TKontaktDatenliste erkannt!
// Self.Items[i].fKontaktdaten oder Self.Items[i].Kontaktdaten ist hier aber nicht ansprechbar bzw. führt zu einem 'Hänger' ohne weiter Fehlerangabe
//
if assigned(Self.Items[i].fKontaktdaten) then // wird noch ausgeführt
Self.Items[i].fKontaktdaten.WriteListData(Self.Items[i].IDAdresse, LastID); //bleibt hängen, Fehler definitiv NICHT in Kontaktdaten.WriteListData, das wird schon nicht mehr aufgerufen!
end; //for i
end;
end;