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 11-10-2017
elliotduvorov elliotduvorov is offline
Registrado
 
Registrado: sep 2008
Posts: 3
Poder: 0
elliotduvorov Va por buen camino
SQL Server. Tablas temporales. Diferencias entre ZEOS y ADO

Buenas a todos,

Estoy intentando crear una tabla temporal desde Delphi con un componente TZQuery, la instrucción SQL quedaria así:

Código SQL [-]
CREATE TABLE #TABLA_PRUEBA(CAMPO VARCHAR(200));

INSERT INTO #TABLA_PRUEBA VALUES ('PROBANDO 1, 2, 3');

A este componente le hago un Execsql. Has aqui todo bien.

En otro componente TZQuery lanzo la siguiente consulta:

Código SQL [-]
SELECT * FROM #TABLA_PRUEBA

Al hacer el open de este segundo TZQuery, me salta un error que dice que el objeto #TABLA_PRUEBA no existe.

Si hago lo mismo pero sustituyendo los componentes ZEOS por ADO funciona correctamente.

Pienso que hay algún parametro de configuración, en el componente TZConnection de ZEOS, que hace que la conexión se reinicie después de lanzar la primera query, por lo que la tabla temporal desaparece.

¿Alguien que pueda arrojar luz sobre la configuración de ZEOS?

Mi entorno es Delphi 2010 con MSSql Server 12. Version de ZEOS 7.1.4-stable

Un saludo!
Responder Con Cita
  #2  
Antiguo 13-10-2017
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola elliotduvorov

He estado probando lo que comentas y ciertamente también me hace lo mismo que dices,

Aunque en tu caso al estar ambos componentes enganchados con la misma conexión, si existiera la tabla en teoría deberían de verse...

En tu caso en particular ten en cuenta que estas creando una tabla temporal local (prefijo '#'), que solo tiene validez dentro de la conexión donde la creas y no la pueden ver el resto de conexiones, y que cuando se deja de usar, automaticamente MSSQL la elimina, que creo que es lo que en realidad esta pasando, se crea se inserta el registro y al finalizar la propia consulta el motor la elimina.

Yo como solución que he encontrado es crear la tabla desde el componente zConnection y entonces ya si funciona bien:
Código Delphi [-]
  ZConnection1.ExecuteDirect(
    'CREATE TABLE #TABLA_PRUEBA(CAMPO VARCHAR(200));'
  );

Espero te sirva

Un saludo
Responder Con Cita
  #3  
Antiguo 13-10-2017
elliotduvorov elliotduvorov is offline
Registrado
 
Registrado: sep 2008
Posts: 3
Poder: 0
elliotduvorov Va por buen camino
Gracias por tu respuesta Bucanero,

Esta mañana he llegado a la misma solucion que comentas.

He puesto la creacion de la tabla temporal tanto en el AfterConnect, como el en AfterReconnect, del componente TZConnection

Despues de darle muchas vueltas, he llegado a la conclusion, que la conexion se abre y cierra en cada consulta lanzada. Tampoco he conseguido averiguar si es posible cambiar este comportamiento.

Lo dicho muchas gracias por tu respuesta.

Un saludo.
Responder Con Cita
  #4  
Antiguo 16-10-2017
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 20
olbeup Va camino a la fama
Hola elliotduvorov,

Revisa aquí para hacerte una mejor perspectiva de como funciona una tabla temporal.

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
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
Consulta entre 2 tablas de diferentes bd de sql server comba MS SQL Server 4 24-05-2016 01:49:52
Relacion entre tablas sql server 2000 compualarma SQL 2 23-03-2009 19:38:01
Relacion entre tablas sql server 2000 compualarma Conexión con bases de datos 0 23-03-2009 05:26:02
Diferencias entre AGP y PCI JoAnCa Varios 3 03-09-2008 19:40:16
Filtros en tablas. Diferencias entre SQL 87 y 92 dec Trucos 0 01-07-2006 03:00:23


La franja horaria es GMT +2. Ahora son las 01:34:27.


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