I am trying to convert the following code which is partially converted (from IDAdataset as it was in DataAbstract 7 to modern 9.x). The function WhereCodes was simply how I did this when you could get at the dadataset.Where this way:
function WhereCodes(table: TDADataTable; fieldName,fieldValues:String;likeFlag:Boolean):Boolean;
var
s:TStringList;
ct:Integer;
n : Integer;
condition:TDASqlCondition; // uDAPlainWhere.pas
begin
result := False;
if (fieldvalues='')or(Pos('''',fieldvalues)>0)or (Pos('--',fieldValues)>0)or (Pos('/*',fieldValues)>0) then
begin
exit;
end;
if (fieldname='')or(Pos(' ',fieldName)>0)or (Pos('''',fieldName)>0) or (Pos('--',fieldName)>0) or (Pos('/*',fieldName)>0)then
begin
exit;
end;
if likeFlag then
condition := cLike
else
condition := cEqual;
if Pos(',',fieldvalues) = 0 then
begin
if likeFlag then
begin
fieldValues := fieldValues + '%';
end;
{ds.}
table.Where.AddCondition( fieldName, condition, fieldValues );
end
else
begin
s := TStringList.Create;
s.Delimiter := ',';
try
s.DelimitedText := fieldValues;
ct := s.Count-1;
if s[ct]='' then
dec(ct);
for n := 0 to ct do
begin
fieldValues := s[n];
if likeFlag then
begin
fieldValues := fieldValues + '%';
end;
table.Where.AddCondition(fieldName,condition,fieldValues);
if (n<ct) then
table.Where.AddOperator(opOR);
end;
finally
s.Free;
end;
end;
end;
function TMyDataService.GetSelectedAssets(Connection: IDAConnection; abarcode: String; prefixMatch: Boolean): IDADataset;
begin
Result := Schema.NewDataset(Connection, 'SelectedAssets'); // <-- How do I generate a new dataset and run a "SELECT FROM SelectedAssets WHERE ASSET_CODE = <abarcode>". Due to DA design we should be returning ISomething (interface)
WhereCodes(Result, 'ASSET_CODE', abarcode, prefixMatch);
Result.Open;
end;