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...