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;
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;