if (sqltoken = stvalue) and (lasttoken = stwhere) then
sqltoken := stfieldname;
if sqltoken in sqlsections then cursection := sqltoken;
until sqltoken in [stfieldname, stend];
if fwherefound and (sqltoken in [stfieldname]) then
repeat
sqltoken := nextsqltoken(start, value, cursection);
if sqltoken in sqlsections then cursection := sqltoken;
until sqltoken in [stend,stvalue,stisnull,stisnotnull,stfieldname];
if value='?' then
begin
ffieldname.add(fname);
inc(params);
end;
until (params = count) or (sqltoken in [stend]);
end;
{ tbdequery }
function tbdequery.psgetdefaultorder: tindexdef;
begin
if fkeyfields = '' then
result := inherited psgetdefaultorder
else
begin // detail table default order
result := tindexdef.create(nil);
result.options := [ixunique]; // keyfield is unique
result.name := stringreplace(fkeyfields, ';', '_', [rfreplaceall]);
result.fields := fkeyfields;
end;
end;
{ tbdeclientdataset }
constructor tbdeclientdataset.create(aowner: tcomponent);
begin
inherited create(aowner);
fdataset := tbdequery.create(nil);
fdataset.name := self.name + 'dataset1';
provider.dataset := fdataset;
sqldbtype := typebde;
flocalparams := tparams.create;
end;
destructor tbdeclientdataset.destroy;
begin
freeandnil(flocalparams);
fdataset.close;
freeandnil(fdataset);
inherited destroy;
end;
procedure tbdeclientdataset.getfieldnames(list: tstrings);
var
opened: boolean;
begin
opened := (active = false);
try
if opened then
open;
inherited getfieldnames(list);
finally
if opened then close;
end;
end;
function tbdeclientdataset.getcommandtext: string;
begin
result := fcommandtext;
end;
function tbdeclientdataset.getdataset: tdataset;
begin
result := fdataset as tdataset;
end;
procedure tbdeclientdataset.checkmastersourceactive(mastersource: tdatasource);
begin
if assigned(mastersource) and assigned(mastersource.dataset) then
if not mastersource.dataset.active then
databaseerror(smasternotopen);
end;
procedure tbdeclientdataset.setparamsfromsql(const value: string);
var
dataset: tquery;
tablename, tempquery, q: string;
list: tbdecdsparams;
i: integer;
field: tfield;
begin
tablename := gettablenamefromsql(value);
if tablename <> '' then
begin
tempquery := value;
list := tbdecdsparams.create(self);
try
list.parseselect(tempquery);
list.assignvalues(params);
for i := 0 to list.count - 1 do
list[i].paramtype := ptinput;
dataset := tquery.create(nil);
try
dataset.databasename := fdataset.databasename;
q := getquotechar;
dataset.sql.add('select * from ' + q + tablename + q + ' where 0 = 1'); { do not localize }
try
dataset.open;
for i := 0 to list.count - 1 do
begin
if list.ffieldname.count > i then
begin
try