Announcement

Collapse
No announcement yet.

Delphi mit TADOQuery und Autowert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi mit TADOQuery und Autowert

    Hallo Leidensgenossen,
    ich möchte aus meiner Anwendung Datesätze in einer AccessDb speichern. So weit so gut. Die ID ist Autowert. So nun zum Problem:

    asSQL := 'Insert into T_Kunde (KD_NUMMER,NAME,VORNAME,ZUSATZ,STRASSE,PLZ,';
    asSQL := asSQL + 'ORT,POSTF_PLZ,POSTF_ORT,ZAHLZIEL,BEMERKUNG,ZAHLAR T,KD_ART)';
    asSQL := asSQL + ' Values(';
    //asSQL := asSQL + ' :ID,';
    asSQL := asSQL + ' :KD_NUMMER,';
    asSQL := asSQL + ' :NAME,';
    asSQL := asSQL + ' :VORNAME,';
    asSQL := asSQL + ' :ZUSATZ,';
    asSQL := asSQL + ' :STRASSE,';
    asSQL := asSQL + ' :PLZ,';
    asSQL := asSQL + ' :ORT,';
    asSQL := asSQL + ' :POSTF_PLZ,';
    asSQL := asSQL + ' :POSTF_ORT,';
    asSQL := asSQL + ' :ZAHLZIEL,';
    asSQL := asSQL + ' :BEMERKUNG,';
    asSQL := asSQL + ' :ZAHLART,';
    asSQL := asSQL + ' :KD_ART)';
    ...
    try
    ADOQuery := fDatabase.dmDatabase.ADOSchreiben;
    ADOConn := fDatabase.dmDatabase.ADOSchreiben.Connection;
    if not ADOConn.InTransaction then
    ADOConn.BeginTrans;
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Add(asSQL);
    ADOQuery.Prepared :=true;
    // if StrToInt(asKDID) > -1 then
    // ADOQuery.Parameters.ParamByName('ID').Value :=Trim(asKDID)
    // else
    // ADOQuery.Parameters.ParamByName('ID').Value :='Null';

    if Trim(txtKdNummer.Text) = '' then
    ADOQuery.Parameters.ParamByName('KD_NUMMER').Value :='NULL'
    ...
    ADOQuery.ExecSQL;
    ADOConn.CommitTrans;

    Soweit so gut, aber wie kann ich nun die neue ID für diesen DS bekommen. Ein Select auf den DS ist nicht so gut, da keine eindeutigen Schlüssel.

    Danke Tossi
    Danke Torsten

  • #2
    Ich nehme gerne selbst generierte GUIDS für Primärschlüssel

    Comment


    • #3
      Entweder vor dem ExecSQL die Tabelle sperren, Insert machen, größte ID auslesen, Tabelle wieder freigeben
      oder
      vor dem ExecSQL die größte ID lesen und merken, Insert machen, wieder die größte ID lesen. Wenn die der gespeicherten + 1 entspricht, ist diese ID meine und sicher richtig, wenn nicht, weil zB genau zwischen erstem Lesen und Insert oder Insert und zweitem Lesen jemand anderer ein Insert gemacht hat, dann irgendwie darauf reagieren....
      Ich glaube aber nicht, dass sowas bei Datensätzen, die händisch erfasst werden, jemals passiert, darauf würde ich es ankommen lassen.

      bye,
      Helmu

      Comment

      Working...
      X