Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2014
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
mejor aclaracion de la SQL

Perdón esto es lo que le faltaba al post anterior para ver la aclaración de la SQL

Código SQL [-]
***************************************************************************
** El bloque siguiente crea la variable/tabla temporal
***************************************************************************
DECLARE @mi_tabla TABLE ( NumeroRegistro int, NumeroVehiculo nchar(5), NumeroMatricula varchar(15), RFID_Salida datetime, RFID_Entrada datetime, Serv_Ano_Creacion smallint, Serv_Codigo int, Serv_Linea int, Serv_Conductor char(5) )

***************************************************************************
** Todo el bloque siguiente inserta registros usando la estructura insert + select
***************************************************************************
INSERT INTO @mi_tabla

SELECT  a.NumeroRegistro, a.NumeroVehiculo, a.NumeroMatricula,
    (SELECT TOP 1 z.CUANDO
      FROM Murcia.dbo.tbl_RFID_Movimientos as z
      WHERE z.ANTENA LIKE '%Ant0%'
      AND z.id_Vehiculo = a.NumeroRegistro
      AND z.CUANDO >= '07/02/2014 0:00:00'
      AND z.CUANDO <= '07/02/2014 23:59:59'
      ORDER BY z.id_Vehiculo ASC, z.CUANDO DESC
    ) AS RFID_Salida, 

    (SELECT TOP 1 z.CUANDO
      FROM Murcia.dbo.tbl_RFID_Movimientos as z
      WHERE z.ANTENA LIKE '%Ant1%'
      AND z.id_Vehiculo = a.NumeroRegistro
      AND z.CUANDO >= '07/02/2014 0:00:00'
      AND z.CUANDO <= '07/02/2014 23:59:59'
      ORDER BY z.id_Vehiculo ASC, z.CUANDO DESC
    ) AS RFID_Entrada, 

    (SELECT TOP 1 Ano_Creacion 
      FROM [Murcia].[dbo].[tbl_Servicios_Montaje]
      WHERE [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio] <= '07/02/2014 14:17:51' AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final] >= '07/02/2014 14:17:51'
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo] =  a.NumeroVehiculo
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Baja] IS NULL
      ORDER BY [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final]
    ) as Serv_Ano_Creacion, 

    (SELECT TOP 1 Codigo 
      FROM [Murcia].[dbo].[tbl_Servicios_Montaje]
      WHERE [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio] <= '07/02/2014 14:17:51' AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final] >= '07/02/2014 14:17:51'
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo] =  a.NumeroVehiculo
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Baja] IS NULL
      ORDER BY [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final]
    ) as Serv_Codigo, 

    (SELECT TOP 1 Linea 
      FROM [Murcia].[dbo].[tbl_Servicios_Montaje]
      WHERE [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio] <= '07/02/2014 14:17:51' AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final] >= '07/02/2014 14:17:51'
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo] =  a.NumeroVehiculo
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Baja] IS NULL
      ORDER BY [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final]
    ) as Serv_Linea, 

    (SELECT TOP 1 Conductor 
      FROM [Murcia].[dbo].[tbl_Servicios_Montaje]
      WHERE [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio] <= '07/02/2014 14:17:51' AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final] >= '07/02/2014 14:17:51'
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo] =  a.NumeroVehiculo
      AND [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Baja] IS NULL
      ORDER BY [Murcia].[dbo].[tbl_Servicios_Montaje].[Vehiculo],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Inicio],  [Murcia].[dbo].[tbl_Servicios_Montaje].[Fecha_Hora_Final]
    ) as Serv_Conductor 

 FROM [SocGer].[dbo].[tbl_Vehiculos] as a
 WHERE a.[Fecha_Baja] IS NULL
 AND a.[Empresa_Colaboradora] IS NULL
 ORDER BY a.NumeroVehiculo ASC

***************************************************************************
** El bloque ANTERIOR creaba los registros de la variable/tabla temporal
** Las líneas siguientes lo que hacen es traerme esos registros de esa 
** variable/tabla temporal pero trayendo también registros de otra tabla
** mediante el uso de LEFT JOIN
***************************************************************************
SELECT   s.Descripcion, 
    x.* 
  FROM @mi_tabla as x 
  LEFT JOIN [Murcia].[dbo].[tbl_Servicios] as s 
         ON x.Serv_Ano_Creacion = s.Ano_Creacion 
        AND x.Serv_Codigo = s.Codigo 
  WHERE x.RFID_Entrada > x.RFID_Salida 
     OR x.RFID_Entrada = x.RFID_Salida 
     OR ( x.RFID_Entrada IS NULL AND x.RFID_Salida IS NULL )
 ORDER BY x.NumeroVehiculo ASC
Responder Con Cita
  #2  
Antiguo 07-02-2014
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
supongo que te sobra el execsql.

yo hago esto en un caso exactamente igaul y funciona de maravilla. En definitiva, creo una variable tipo tabla, hago un insert, recorro la tabla on un cursor y hago varios cálculos, ...

La llamada al botón de ejecutar es así.

Código Delphi [-]
procedure TForm1.EjecutarConsulta;
begin
ADOQuery1.Close;
ADOConnection1.Connected:= False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:= DBMemo1.Text;
DataSource1.DataSet:=ADOQuery1;
ADOConnection1.Connected:= True;
ADOQuery1.Open;
end;

El texto de la consulta lo tengo en un campo de una tabla (DBMemo1).

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 07-02-2014
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola SocGer,

Como dicen los compañeros, quita el ExecSQL.

No hace falta que abras el AdoConnection, ya se encarga el AdoQuery de hacerlo y, cuando cierres el AdoQuery, solo cierra el AdoConnection el cual cierra automáticamente el AdoQuery.

Código Delphi [-]
...
begin
  with ado_Qry_Vehiculos_en_Base do
  begin
    SQL.Clear;
    SQL.Add( ... una copia exacta de las líneas de arriba sql server ...);
    Open;
  end;
  // Hacer lo que sea con los datos que te devuelve.
  ...
  ...
  ...
  // Cerrar el AdoConnection
  ado_Con_Vehiculos_en_Base.Close;
end;
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 08-02-2014
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
El problema persiste

A ver, esto ya lo probé por investigar en internet y ver en que fallaba.

Incluso con el .open y sin el execsql sigue persistiendo el problema.

A ver si fuera esto... Tengo SQL Server 2000 y Delphi 5 .... Esto es por si acaso alguien sabe de un tema de incompatibilidad.

Por cierto gracias a todos, chicos. Y muchas gracias por estar atentos... sobre todo a salv

Si encontráis el fallo me lo comentáis, de momento voy a crear una función que me devuelva lo que me interesa, que es otro aporte que he encontrado en internet como sugerencia.

Saludos
Responder Con Cita
Respuesta



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
Firebird, DBX, CommandText pablonill Conexión con bases de datos 2 17-12-2012 16:01:05
Remote Error CommandText changes are not allowed Jere_84 Providers 1 04-01-2012 20:44:21
CommandText: Duda Paulao Varios 4 12-08-2008 20:31:21
PROCEDURE xxx.yyy can't return a result set in the given context. erian96 MySQL 2 15-07-2006 21:13:49
'Return no-apply' Roy Varios 9 10-06-2003 22:37:38


La franja horaria es GMT +2. Ahora son las 23:51:19.


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