Revisando un poco más en detalle tu código creo que el problema puede estar en la concatenacion:
Código Delphi
[-]
ADOConnection1.Execute(
'merge STOCKS as target' +
'using (values (''X3'', ''03'', ''2014-11-27'', ''SA123'', 3)) as source' +
'(EMPRESA,ALMACEN,FECHA,ARTICULO,UNIDADES) on ' +
Al concatenar la cadena quedaría como
Código Delphi
[-]
ADOConnection1.Execute('merge STOCKS as targetmerge STOCKS as targeusing (values (''X3'', ''03'', ''2014-11-27'', ....
Coloca al menos un espació al final de cada literal de cadena:
Código Delphi
[-]
ADOConnection1.Execute(
'merge STOCKS as target ' +
'using (values (''X3'', ''03'', ''2014-11-27'', ''SA123'', 3)) as source ' +
'(EMPRESA,ALMACEN,FECHA,ARTICULO,UNIDADES) on ' +
' target.empresa= source.empresa and ' +
' target.almacen=source.almacen and ' +