Ver Mensaje Individual
  #1  
Antiguo 13-12-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Tablas temporales

Estaba viendo en otro hilo como crear un tabla temporal (CREATE GLOBAL TEMPORARY TABLE); no lo había usado nunca y me parece interesante. Sin embargo estoy teniendo un problema para poder emplearla en un TDBGrid.
  • Creo la tabla:
Código SQL [-]
CREATE GLOBAL TEMPORARY TABLE Temporal (Identidad VARCHAR(65), Referencia VARCHAR(13), Codigo INTEGER, Cuota NUMERIC(12, 2),
Seleccion SMALLINT DEFAULT 0 CHECK(Seleccion IN (0, 1)), Situacion VARCHAR(16), PRIMARY KEY (Identidad, Referencia, Codigo))
ON COMMIT PRESERVE ROWS
  • Inserto los valores que me interesan:
Código SQL [-]
INSERT INTO Tempral (Identidad, Referencia, Codigo, Cuota, Seleccion, Situacion) SELECT DISTINCT A.Apellidos||', '||A.Nombre,
COALESCE(NULLIF(A.Referencia, ''), NULLIF(A.Nif, ''), A.Codigo), A.Codigo, B.Cuota, 0 Seleccion, C.Literal
FROM Ls02 A LEFT JOIN Persona B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo, Instalacion C
WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
 AND C.Etiqueta = 'Situacion' AND B.Situacion = C.Valor
AND A.Codigo IN (SELECT DISTINCT Codigo FROM Electos WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia'))

Ambos procesos se ejecutan sin ningún problema (gracias a jhonny y Casimiro por sus sugerencias en mi consulta anterior). La tabla temporal está asociada a un TIBTable (Temp) y el DBGrid tiene su TDataSource enlazado a ese TIBTable. Cuando he cargado la tabla temporal y trato de abrirla para poder visualizar su contenido en el DBGrid:
Código:
Temp->Close();
Temp->TableName = "Temporal";
<INSERT INTO...>
Temp->Open();
Siempre me da un error: que la tabla Temporal no existe. Entiendo que para hacerla "visible" habría que cerrar y abrir la base de datos pero si hago eso, y con lo que he entendido de la sintaxis, supongo que la tabla se elimina. ¿Alguna idea?
Responder Con Cita