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)
-   -   Error en un SELECT (https://www.clubdelphi.com/foros/showthread.php?t=94467)

Angel.Matilla 24-02-2020 12:12:49

Error en un SELECT
 
Me está ocurriendo una cosa curiosísima. Tengo estas dos tablas que se crean en tiempo de ejecución:
Código SQL [-]
CREATE TABLE SYSDBA120410 (
  CONTADOR SMALLINT NOT NULL,
  FECHA SMALLINT NOT NULL,
  VOTOS2 INTEGER,
  VOTOS3 INTEGER,
  VOTOS16 INTEGER,
  VOTOS17 INTEGER,
  VOTOS22 INTEGER);
y
Código SQL [-]
CREATE TABLE SYSDBA120421 (
  CONTADOR SMALLINT NOT NULL,
  FECHA SMALLINT NOT NULL,
  VOTOS2 INTEGER,
  VOTOS3 INTEGER);
Como veis más allá del número de campos son idénticas. Las uso para crear un TDBChart en tiempo de ejecución para lo que uso este query:
Código SQL [-]
SELECT * FROM 
siendo <Tabla> el nombre que se ha asignado en el CREATE.

Vale. Si ejecuto el query con la primera no hay ningún problema pero si, sin salir ni del formulario ni de la aplicación, lo ejecuto sobre la segunda al hacer el open del query me da un error:
Cita:

Field 'VOTOS16' not found
Y me tiene totalmente despistado porque no sé como eliminar ese error; es como si se "quedase" gaudada la estructura de la primera tabla.

Casimiro Notevi 24-02-2020 13:23:55

¿Por qué no la creas antes y te limitas a rellenarla con lo que necesites?

mamcx 24-02-2020 15:22:50

Eso suena mas bien a que usas un ClientDataSet y este se carga con la lista de campos de la primera.

ecfisa 24-02-2020 16:24:41

Hola.

Opino como mamcx, pareciera que en el componente queda cargada la estructura de la tabla SYSDBA120421. O, dicho de otro modo, que alguna instrucción esté haciendo referencia a la columna VOTOS16 estando cargada la estructura de la mencionada y claro, no encuentra esa columna...

Saludos :)

fjcg02 25-02-2020 22:20:14

Recorre los campos del componente que uses para mostrar los datos y borralos.

Luego lo vuelves a utilizar.

Saludos

Angel.Matilla 26-02-2020 12:12:12

Gracias por las respuestas.
Cita:

Empezado por Casimiro Notevi (Mensaje 535889)
¿Por qué no la creas antes y te limitas a rellenarla con lo que necesites?

La creo cuando se pide la consulta porque en cada consulta pueden ser datos diferentes: una vez pueden ser cuatro datos y otra diez.
Cita:

Empezado por mamcx (Mensaje 535892)
Eso suena mas bien a que usas un ClientDataSet y este se carga con la lista de campos de la primera.

No, no uso ClientDataSet.
Cita:

Empezado por fjcg02 (Mensaje 535907)
Recorre los campos del componente que uses para mostrar los datos y borralos.

En el formulario lo monto así:
Código:

fMenu->qTemp->Close();
fMenu->qTemp->SQL->Text = "SELECT * FROM " + cTabTemp;
fMenu->qTemp->Open();

Siendo cTabTemp un AnsiString en el que guardo el nombre de la tabla que sea asigna al ejecutarse.


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

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