Field Identity Exclude SQLGenerate
Posted: Mon 23 Jul 2012 14:51
Hi,
Please information about builder SQL Generation in Runtime Mode where a clause filter exclude a field Identity.
I am try following code:
My expected SQL Code without "ID" Column.
Thank you for your help,
Leivio
Please information about builder SQL Generation in Runtime Mode where a clause filter exclude a field Identity.
I am try following code:
Code: Select all
var
i: integer;
KeyAndDataFields : TKeyAndDataFields;
KeyLst: TStringList;
TablesInfo: TCRTablesInfo;
oldCaseSensitive: boolean;
ID: TCRFieldDesc;
begin
UniQuery1.SQL.Text := 'select * from tbteste where 1 = 2';
UniQuery1.KeyFields := 'ID';
UniQuery1.Open;
SetLength(KeyAndDataFields.DataFieldDescs, UniQuery1.Fields.Count);
for i := 0 to UniQuery1.Fields.Count - 1 do
begin
if not SameText(UniQuery1.Fields[i].FieldName, 'ID') then
begin
ID := (UniQuery1.GetFieldDesc(UniQuery1.Fields[i]) as TCRFieldDesc);
KeyAndDataFields.DataFieldDescs[i] := ID;
end
else
KeyAndDataFields.DataFieldDescs[i] := UniQuery1.GetFieldDesc(UniQuery1.Fields[i]) as TCRFieldDesc;
end;
KeyLst := TStringList.Create;
try
KeyLst.Delimiter := ';';
KeyLst.DelimitedText := UniQuery1.KeyFields;
SetLength(KeyAndDataFields.KeyFieldDescs, KeyLst.Count);
for i := 0 to KeyLst.Count - 1 do
begin
KeyAndDataFields.KeyFieldDescs[i] := UniQuery1.GetFieldDesc(KeyLst[i]) as TCRFieldDesc;
end;
TablesInfo := TDBAccessUtils.GetTablesInfo(UniQuery1);
oldCaseSensitive := TablesInfo.CaseSensitive;
try
TablesInfo.CaseSensitive := False;
mmo.Lines.Clear;
mmo.Lines.Add('GenerateSQL') ; mmo.Lines.Add('');
mmo.Lines.Add(TDBAccessUtils.SQLGenerator(UniQuery1).GenerateSQL(stInsert, False, nil));
mmo.Lines.Add('UPDATE'); mmo.Lines.Add('');
mmo.Lines.Add(TDBAccessUtils.SQLGenerator(UniQuery1).GenerateSQLforUpdTable(TablesInfo.FindByName('tbteste'), KeyAndDataFields, stUpdate, False, nil));
mmo.Lines.Add('INSERT'); mmo.Lines.Add('');
mmo.Lines.Add(TDBAccessUtils.SQLGenerator(UniQuery1).GenerateSQLforUpdTable(TablesInfo.FindByName('tbteste'), KeyAndDataFields, stInsert, False, nil));
mmo.Lines.Add('DELETE'); mmo.Lines.Add('');
mmo.Lines.Add(TDBAccessUtils.SQLGenerator(UniQuery1).GenerateSQLforUpdTable(TablesInfo.FindByName('tbteste'), KeyAndDataFields, stDelete, False, nil));
mmo.Lines.Add('REFRESH') ; mmo.Lines.Add('');
mmo.Lines.Add(TDBAccessUtils.SQLGenerator(UniQuery1).GenerateSQLforUpdTable(TablesInfo.FindByName('tbteste'), KeyAndDataFields, stRefresh, False, nil));
finally
TablesInfo.CaseSensitive := oldCaseSensitive;
end;
finally
KeyLst.Free;
end;My expected SQL Code without "ID" Column.
Thank you for your help,
Leivio