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)
-   -   Script para crear tablas (https://www.clubdelphi.com/foros/showthread.php?t=75155)

jafera 02-08-2011 13:26:34

Script para crear tablas
 
Hola a todos.

He creado un IBScript para crear unas tablas que no existe en mi aplicacion y para agrgar unos campos nuevos en tablas existentes.

Código SQL [-]
 
CREATE TABLE "RE0012"
(
  "ID_USUARI" INTEGER NOT NULL,
  "USUARI" VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "PASWORD" VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES
);
CREATE TABLE "RE0006TOTAL"
(
  "ID_REBUT" INTEGER NOT NULL,
  "DATA" DATE,
  "TITOL" VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "C_POSTAL" INTEGER,
  "CODI_CLUB" INTEGER,
  "ARBITRES" INTEGER,
  "MATERIAL" NUMERIC(9, 2),
  "I1" VARCHAR(1),
  "I2" VARCHAR(1),
  "I3" VARCHAR(1),
  "I4" VARCHAR(1),
  "I5" VARCHAR(1),
  "TI1" NUMERIC(9, 2),
  "TI2" NUMERIC(9, 2),
  "TI3" NUMERIC(9, 2),
  "TI4" NUMERIC(9, 2),
  "TI5" NUMERIC(9, 2),
  "TOTAL_REBUT" NUMERIC(9, 2),
  "IMPORT" NUMERIC(9, 2),
  "TEXTE" VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "SUSPENSIO" VARCHAR(1),
  "KM_TOTALS" INTEGER,
  "ASPIRANT" VARCHAR(1),
  "HORA_CONS" TIME,
  "HORA_SORT" TIME,
  "NUM_CORREDORS" INTEGER,
  "ID_ARBITRE" INTEGER,
  "ID_METGE" INTEGER,
  "DIR_CURSA" VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "CATEGORIA" VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "ZONA" INTEGER,
  "KM_CURSA" NUMERIC(9, 2),
  "TRANSP" VARCHAR(1),
  "GRAVAT" VARCHAR(1),
  "ACUMULAT" VARCHAR(1),
  "PREU_FIX" VARCHAR(1),
  "ID_USUARI" INTEGER
);
ALTER TABLE RE0006 ADD PREU_FIX VARCHAR(1);
ALTER TABLE RE0006 ADD ID_USUARI INTEGER;
ALTER TABLE RE0006FP ADD SUSPENSIO VARCHAR(1);
ALTER TABLE RE0006FP ADD I10 VARCHAR(1);
ALTER TABLE RE0006FP ADD TI10 NUMERIC(9, 2);
ALTER TABLE RE0006FP ADD TI11 NUMERIC(9, 2);
UPDATE RE0006 SET PREU_FIX = 'N';

El script se ejecuta perfectamente pero cuando abro la aplicación, parece que no se ha refrescado la base de datos y me da un error de tabla no existe o campo no existe y no me ejecuta el Update.

Si salgo y vuelvo a entrar, las tablas estan ahí sin mayor problema.

En la accion básica de la Transaction tengo TACommit, he probado con TACommitRetaining y tampoco se actualiza.

Alguien me puede ayudar para hacer que se refresquen los datos en la base de datos?

Si ejecuto el script desde IBConsole, no da ningun error pero las tablas tampoco se actualizan al momento tengo que salir y entrar.

Saludos

Casimiro Notevi 02-08-2011 13:41:18

Seguramente lo que tienes que mirar es el programa, no la base de datos.
Por ejemplo, los campos persistentes de los datasets, las sentencias sql de los mismos, etc.

jafera 02-08-2011 13:49:53

Gracias Antonio.

Si despues del script hago un

Base.Close;
Base.Open;

funciona bien, pero bajo mi poca experiencia me parece un poco "chapuza", no se...

Saludos

guillotmarc 02-08-2011 13:56:25

Cita:

Empezado por jafera (Mensaje 408201)
Gracias Antonio.

Si despues del script hago un

Base.Close;
Base.Open;

funciona bien, pero bajo mi poca experiencia me parece un poco "chapuza", no se...

Saludos

Yo no lo veo chapuza. Es normal que si tienes tablas abiertas, etc. ..., después de modificar la base de datos con un script lo mejor es cerrarlo todo y volver a abrirlo, ya que puedes haber modificado objetos abiertos (lo cual va a provocar errores).

Saludos.

Casimiro Notevi 02-08-2011 14:18:10

Por cierto, yo no soy partidario de poner los nombres de los campos entre comillas porque entonces estás obligado a ponerlo siempre tal y como lo has escrito entre comillas.
Sin embargo si lo pones sin comillas entonces podrás usarlo después como quieras. Me explico:
Código SQL [-]
CREATE TABLE "RE0012"
(
  "ID_USUARI" INTEGER NOT NULL,
  "USUARI" VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  "PASWORD" VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES
);
Luego tienes que hacer:
Código SQL [-]
select "ID_USUARI" from "REC0012" where "USUARI"= :user and "PASWORD"= :clave

Sin embargo, si lo declaras así:
Código SQL [-]
CREATE TABLE RE0012
(
  ID_USUARI INTEGER NOT NULL,
  USUARI VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES,
  PASWORD VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE ES_ES
);
Entonces puedes luego poner como quieras, mayúsculas/minúsculas y sin comillas, ejemplo:
Código SQL [-]
select id_usuari from rec00012 where usuari= :user and pasword= :clave

En fin, es más propicio a equivocarse de tu manera y hay que teclear más, las comillas, no olvidando mayúsculas/minúsculas, mientras que la forma que lo hago yo puedes olvidarte de todo eso :)

jafera 02-08-2011 15:30:24

Gracias a todos.

Si os parece que es correcto el close-open pues lo dejo asi.

Lo de las comillas es porque yo tenia entendido que debia hacerse así, si puedo declarar los campos sin comillas pues en un futuro lo haré de este modo. (Hoy me acuesto sabiendo una cosa nueva, jejeje)

Saludos

jafera 02-08-2011 15:38:10

Y otra duda con el IBScript, se puede crear una descripción de una tabla desde el script?

DESCRIBE TABLE BOM0002G
'Grup de Classificació';

Gracias de nuevo

Josep

maeyanes 02-08-2011 15:58:18

Hola...

Al final de tu script, pon un commit;, con esto ya deberías poder ver tu tabla desde una transacción nueva (no desde una que ya esté abierta).


Saludos...

jafera 02-08-2011 18:27:39

Posiblemente el fallo venía por aquí al tener la base de datos abierta esta no se actualizaba hasta que la cerraba y la volvía a abrir, por esto efectuo el close-open.

Si pongo un commit, se quedaba igual al tener la transaccion abierta, ya lo probé.

SAludos

RONPABLO 02-08-2011 21:20:45

Respecto al concejo de no usar los nombres entre comillas ("") que te dio casimiro te recomiendo que lo tomes y que lo apliques hacia atrás, además de no usar nombres de campos o tablas con acentos, eñes, separadas o algo que así... te lo digo por experiencia, yo "herede" una base de datos con varias de estas características que te comente (especialmente nombres entre "" con eñes o nombres compuestos, ej "usuarios por sede") y si que tuve bastantes problemas con eso... entre otras cosas y la que al final me hizo buscar todos los campos así fue que no podía hacer bkup (entonces solo hacia mis bkups con copiar y pegar del archivo .fdb con todo lo malo que esto puede traer) por culpa de unas tablas que tenían acentuación en el nombre de sus campos.


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

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