Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Error commandtext does not return result set (https://www.clubdelphi.com/foros/showthread.php?t=85162)

socger 07-02-2014 14:29:05

Error commandtext does not return result set
 
Las líneas que abajo pongo funcionan bién en sql server 2000, pero cuando les tiro con un adoquery me da el error commandtext does not return result set

Código SQL [-]
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) )
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
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

El código en Delphi es sencillo

Código Delphi [-]
ado_Qry_Vehiculos_en_Base.Sql.Clear;
ado_Qry_Vehiculos_en_Base.Sql.Add( ... una copia exacta de las líneas de arriba sql server ...);

// Abro el adoConection ... que lo hace bien
ado_Con_Vehiculos_en_Base.Connected := True;

ado_Qry_Vehiculos_en_Base.ExecSQL;

// Cuando ejecuto esta sentencia siguiente me da el error que comento
ado_Qry_Vehiculos_en_Base.Active := True;

Al pasar hacer el open del adoQuery me genera el error commandtext does not return result set

Así que si alguien supiera decirme en que estoy fallando se lo agradecería eternamente.

Saludos

TOPX 07-02-2014 14:45:57

Llamando al método ExecSql, el DataSet ejecuta el INSERT en cuestión; así que, sin mayor información, le cuento que sobra el hecho de modificar posteriormente el valor de la propiedad Active.
-

socger 07-02-2014 17:59:13

NO está todavía ... te explico
 
Verás que lo que hago es crear una variable temporal de tipo table en la que hago un insert de una select bastante larga y luego al final vuelvo a hacer una select pero de la variable / table temporal

Por eso hago una ado_query.execsql y luego un ado_query.active := True
para traerme los registros de la tabla temporal recién creada en una variable de tipo table.

Pero justo al hacer el open de la tabla me da el error.

Por lo que agradecería que alguien me lo pudiera solucionar el problema.

Saludos.

socger 07-02-2014 18:29:39

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

fjcg02 07-02-2014 21:38:21

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

olbeup 07-02-2014 22:52:58

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.

socger 08-02-2014 07:31:55

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


La franja horaria es GMT +2. Ahora son las 09:31:22.

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