I want to have a service REST request that can mimic the IDBStatement.ExecuteQuery to run same queries directly from a TXDataClient.
I was thinking of the following:
var St: IDBStatement; Res: IDBResultSet3; var n,i:integer;
begin
St:=TXDataOperationContext.Current.GetManager.Connection.CreateStatement;
st.SetSQLCommand(sql);
res:=st.ExecuteQuery as IDBResultSet3; i:=res.FieldCount;
while res.Next do
for n:=0 to i-1 do
DoSomething(VarToStr(res.GetFieldValue(n)));
But it seems I can not use the IDBResultSet3. Any other possible solutions?
It depends on the driver/adapter used. Most of them do not implement IDBResultSet3. I guess the solution here is to implement/customise your own adapter.
BTW, unless you want to expose this execute sql stuff in a REST API, why not just use a RemoteDB module?
Indeed, FireDAC adapter doesn't implement IDBresultSet3. But we have added it here, next version will implement it.
It's rather simple you do there in your code though, if you want to. The unit is Aurelius.Drivers.Base, class TDriverResultSetAdapter<T: TDataset>. Just implement the interface there, should be straightforward.