Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Tablas temporales (https://www.clubdelphi.com/foros/showthread.php?t=92629)

Angel.Matilla 13-12-2017 10:42:32

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?

Angel.Matilla 13-12-2017 12:16:34

¡Descubierto el error! Y me da una rabia, porque es una estupidez. Tengo la costumbre, cuando escribo los querys, de poner los nombres de las tablas y las columnas como si fuerna nombres propios con sólo la primera letra mayúscula, como están más arriba. El problema está en que si pongo:
Cita:

CREATE TABLE Temporal...
la tabla de verdad se llama TEMPORAL y claro, luego no la encuentra al hacer el Open del TIBTable. :mad:

jhonny 14-12-2017 03:30:44

Que bueno que hayas encontrado el error, no te de ira, a todos nos ha sucedido alguna vez con X o Y cosa.


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

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