After updating from DelphiXE2 to Delphi Seattle 10 Update 1 we have issues executing TClientDataSet
ApplyUpdates
calls when using the SQLDirect components version 6.4.5
I made a small test app.
Components: TDBGrid -> TDataSource -> TClientDataSet -> TDataSetProvider -> TSDQuery -> TSDDatabase
Query is select * from tt_plan_task
, Provider has UpdateMode=upWhereAll
, ClientDataset has IndexFieldName=tt_plan_task_id
.
We modify one value for field tt_plan_task.tt_prj
.
When executing ApplyUpdates(0)
, the code traces into TSQLResolver.InternalDoUpdate
in DataSnap.Provider
(for UpdateKind=ukModify
).
There, the generated SQL and parameters look as expected.
The code then jumps to
procedure TSQLResolver.DoExecSQL(SQL: TStringList; Params: TParams);
var
RowsAffected: Integer;
begin
RowsAffected := (Provider.DataSet as IProviderSupportNG).PSExecuteStatement(SQL.Text, Params);
This statement crashes with error SQL not supported
(SProviderSQLNotSupported in Data.DBConsts)
But since this an interface, I cannot trace further.
I don't know how to proceed from here in resolving the issue. Any suggestions how to, or what could be going on?
Additional info:
- Executing SELECT and (parameterized) UPDATE queries through a TSDQuery component work fine.
- Using a clientdataset with all FireDac components (
TDBGrid -> TDataSource -> TClientDataSet -> TDataSetProvider -> TFDQuery -> TDFConnection
) (different testapp) works fine - This is a FireBird database with database dialect 3
- FireBird version is 2.5.3.26778
- Delphi 10 was installed without the Interbase components
- This is all in a Win7 VM where Delphi XE2 was removed from (everything 'Borland/CodeGear/Embarcadero' cleaned out), and Seattle installed. My colleague has similar issues with a clean Seattle installation in a clean Win10 VM.
- Apps and FireBird are Win32, OSes are Win64
[Note: self-answering this question because it took me quite some time to figure this out. It may help others.]