Announcement

Collapse
No announcement yet.

D5/o8i AutoInc in "TQuery On The Fly"

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

  • D5/o8i AutoInc in "TQuery On The Fly"

    Environment: Delphi 5.0 / Oracle 8i
    Ich habe ein Problem, mit dem ich nicht weiterkomme:
    Ich habe eine Oracle o8i DB bei der ich mit einem fest zugeordneten Tquery und dem Feldeditor zugewiesenen Feldern problemlos mit AutoInc-Feldern (über Trigger in Oracle 8 intern geregelt) arbeiten kann.
    Ich versuche nun mit einem „All Purpose“ TQuery (trifft natürlich auch auf „created“ TQueries zu) das Gleiche hinzubekommen und es klappt nicht.
    Im hier als Anwendungsteil deklarierten ReRead after post bekommt das Feld immer die Nummer 0 (siehe ***)!

    Im Original-Query in der AfterPost-procedure habe ich KEINE Probleme.
    Haben jemand eine Idee was falsch läuft oder wie man es besser macht?

    Source:

    Deklaration:
    DM.SQLCmd1.RequestLive:=True;
    DM.SQLCmd1.AutoRefresh:=True;
    DM.SQLCmd1.SQL.Clear;
    DM.SQLCmd1.SQL.Add('SELECT ALIAS, LFDNR, HLTGSNR, FLRG, RAHMKART, STADTBEZ,');
    ...
    DM.SQLCmd1.SQL.Add(' AISE2, AISE3, AISE4, AISE5');
    DM.SQLCmd1.SQL.Add('FROM KOPF Kopf');
    DM.SQLCmd1.SQL.Add('WHERE (ALIAS='''+databaseAlias+''')');
    DM.SQLCmd1.Prepare;
    DM.SQLCmd1.Open;

    // im Std Query sind ALLE felder über den Editor hinzugefügt:
    fieldLFDNR:=TField.Create(DM.SQLCmd1);
    fieldLFDNR.Name:='qKopfLFDNR';
    fieldLFDNR.FieldName:='LFDNR';
    fieldLFDNR.AutoGenerateValue:=arAutoInc;
    DM.SQLCmd1.Fields.Add(fieldLFDNR);

    Anwendung:
    try
    qKopf.Post;
    except
    on E: Exception do begin
    ShowMessage('Can''t post qKopf');
    ShowMessage(E.Message);
    end;
    end;
    ***
    lfdnr := qKopf.FieldByName('LFDNR').AsInteger;
    qKopf.Close;
    qKopf.Open;
    if lfdnr>0 Then begin
    qKopf.Locate('LFDNR', Variant(lfdnr),[]);
    end else begin
    MessageBeep(0);
    ShowMessage('Can''t re-read in qKopf (LFDNR=0)');
    Abort;
    end;
Working...
X