If you are receiving error: "Commands out of sync; you can't run this command now" in dbExpress / MySQL connection, then check your query, probably it's something wrong...

 

Also, with connection to MySQL you can't do "select" SQL statement inside transaction, for example:

var
  DBXTran: TDBXTransaction;
begin
  sql1.Close;
  sql1.SQL.Clear;
  sql1.SQL.Text := 'select * from table_one';
  sql1.Open;

  cds2.Open;
  try
    DBXTran := connnection1.BeginTransaction;


    cds2.Append;

    cds2.FieldByName('MyField').AsString := 'test';

    cds2.Post;
    cds2.ApplyUpdates(0);
    connnection1.CommitFreeAndNil(DBXTran);
  finally
    connnection1.RollbackIncompleteFreeAndNil(DBXTran);
  end;

Will be ok, while:

var
  DBXTran: TDBXTransaction;
begin
  cds2.Open;
  try
    DBXTran := connnection1.BeginTransaction;

    sql1.Close;
    sql1.SQL.Clear;
    sql1.SQL.Text := 'select * from table_one';
    sql1.Open;

    cds2.Append;

    cds2.FieldByName('MyField').AsString := 'test';

    cds2.Post;
    cds2.ApplyUpdates(0);
    connnection1.CommitFreeAndNil(DBXTran);
  finally
    connnection1.RollbackIncompleteFreeAndNil(DBXTran);
  end;

Will give you the error...

If you tried something like:

with cds1.Params do
begin
  ParamByName('finish').AsDateTime := now;    
  ParamByName('start').AsDateTime := Now-1;  
end;
cds1.Open

And you received error like: DBX Error - ParameterNotSet then don't use AsDateTime, use AsSQLTimeStamp := DateTimeToSQLTimeStamp(Now-1);, so your code should look like:

with cds1.Params do
begin
  ParamByName('finish').AsSQLTimeStamp := DateTimeToSQLTimeStamp(now);    
  ParamByName('start').AsDateTime := DateTimeToSQLTimeStamp(Now-1);  
end;
cds1.Open

If you added DBXDynalink to your uses list, deployed:

  dbxconnections.ini
  dbxdrivers.ini
  dbexpsda40.dll

Tried everything what is described here.

Then, try also:

  ConnectionName = 'MYSQLCONNECTION'
  DriverName = 'MySQL'
  GetDriverFunc = 'getSQLDriverMYSQL'
  LibraryName = 'dbexpmda.dll'
  VendorLib = 'libmysql.dll'

If you use FillChar on a variable which is type of PChar, you will loose pointer, and FreeMem will not work.