Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 27-11-2014
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Hola orodriguezca, gracias por responder

En cuanto al servidor tenias razón, es la versión 2008, "Microsoft SQL Server 2008 (RTM) - 10.0.1600.22", es por eso que podía hacer el merge

En cuanto a este tipo de sentencias, es cierto que no se pueden ejecutar con un SQLQuery, pero puestos a que no he conseguido ponerlo a funcionar ya he probado con todo :-). La forma de ExecSQL es de lo poco que me quedaba, pero no ha funcionado tampoco. Originalmente se deberia de ejecutar de esta forma, muy similar al ExecSQL, pero directamente sobre el componente CONNECTION, y la ejecución siempre sera en RUNTIME, dentro de un proceso de intercambio de datos con otras tablas.

Código:
    try
      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 ' +
        '   target.fecha=source.fecha and ' +
        '   target.articulo=source.articulo  and ' +
        'when matched then ' +
        '    update ' +
        '    set UNIDADES = source.UNIDADES ' +
        'when not matched then ' +
        '    insert (EMPRESA,ALMACEN,FECHA,ARTICULO,UNIDADES)' +
        '    values (' +
        '      source.EMPRESA,' +
        '      source.ALMACEN,' +
        '      source.FECHA,' +
        '      source.ARTICULO,' +
        '      source.UNIDADES' +
        '    );'
      );
    except
      On E:Exception do begin
        MessageDlg(E.Message, mtError, [mbOK], 0);
      end;
    end;
Aunque tras muchas pruebas, creo que el error no esta en los componentes, si no en la pasarela de conexión que realiza un preanalisis de la sentencia bloqueandola, y no dejandola llegar al motor de B.D., pues cuando intento esto mismo con los ZEOS el error y el comportamiento es exactamente el mismo.

¿Hay alguna forma de evitar este analisis previo y que le llegue al motor de BD?? para que en caso de error sea el propio motor el que de el error
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Merge Module Firebird mjjj Firebird e Interbase 5 29-01-2008 14:15:27
InstallShield y BDE Merge Module manitoba Varios 0 14-03-2007 19:02:50
Mail Merge con Word JavierSotillos Varios 0 20-10-2006 12:19:43
merge mail PiPerraK Varios 4 30-08-2005 16:53:11
Merge Modules son necesarios? m@r Varios 2 14-01-2005 16:08:20


La franja horaria es GMT +2. Ahora son las 20:05:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi