Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Creando campos en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=64400)

edgwin 30-03-2009 23:19:11

Creando campos en tiempo de ejecucion
 
Que tal amigos del foro.

Estoy intentando lo siguiente.

Tengo una tabla hecha en firebird con una estructura en especifico. Necesito hacer una reestructuracion completa de esa tabla (renombrar campos y crear nuevos). El programa realiza la reestructuracion sin problemas, pero cuando intento accesar a algun nuevo campo creado, me marca un error indicandome que no existe dicho campo.

Utilizo los componentes BDE que vienen con Delphi (desafortunadamente no puedo utilizar otros como el Zeos).

Alguien sabe como puedo reestructurar una tabla y poder accesar a ella al instante? (porque si corro el programa nuevamente, ya me reconoce la estructura nueva)

Saludos!

JoseAntonio 31-03-2009 00:35:29

hola, intenta hacerle commit a la transaccion de tu componente Zeos con que haces tu modificacion de la base de datos (asumo que se llamaria algo asi como ZeosScript o algo asi, no conosco mucho dichos componentes)

Kipow 31-03-2009 00:44:00

Creo que el utiliza los BDE no los Zeos. bueno en general al cambiar la estructura es casi seguro que te pida cerrar la conexion (TDatabase) y volvera a abrirla junto con las tablas.

edgwin 31-03-2009 01:14:47

Gracias Kipow por responder.

De hecho realizo una desconexion y una conexion a la base de datos. Lo que intento hacer es lo siguiente:

1) Realizo reestructura de la tabla.
2) Como esta tabla contiene informacion, la consulto (tambien mediante un TQuery con RequestLive = true) y edito el registro.

Pero cuando intento Editar el registro me marca un error de que el campo no existe. Pero curiosamente edito 2 campos, los cuales son nuevos. Pero solo uno de ellos me marca el error que no existe.

Código Delphi [-]

with Tabla do
begin
...
    SQL.Clear;
    SQL.Add('ALTER TABLE USUARIO ADD CODIINTE INTEGER NOT NULL');
    ExecSQL;
    Close;
...
    SQL.Clear;
    SQL.Add('ALTER TABLE MUSUA ADD CAMBPASE CHAR(1) DEFAULT ''N''');
    ExecSQL;
    Close;
...
    dm.dbase.Connected := false;
    dm.dbase.Connected := true;
    Close;
    SQL.Clear;
    SQL.Add('Select CODIINTE from MUSUA');
    Open;
    First;
    While not Eof do
    begin
       Inc(vX);
       Edit;
       FieldByName('CODIINTE').AsInteger := vX;
       FieldByName('CAMBPASE').asString := 'N'; //*******Aqui me marca el error *****
       Next;
    end;
end;
...

¿¿¿Alguna sugerencia!????

coso 31-03-2009 11:36:38

Cita:

SQL.Add('Select CODIINTE from MUSUA');
tansolo estas seleccionando el campo codiinte. Por otra banda, segun tu codigo CODIINTE pertenece a la tabla usuarios, no a musua.

Alexandro 31-03-2009 15:56:17

Seleciona el campo CODIINTE y el campo CAMBPASE, luego pasale los valores que quieras.

Caro 31-03-2009 16:14:32

Cita:

Empezado por coso (Mensaje 343283)
tansolo estas seleccionando el campo codiinte.

Hola, eso mismo digo yo, debes añadir en tu select el campo CAMBAPSE.

Código Delphi [-]
SQL.Add('Select CODIINTE, CAMBAPSE from MUSUA');

Cita:

Empezado por coso (Mensaje 343283)
Por otra banda, segun tu codigo CODIINTE pertenece a la tabla usuarios, no a musua.

Talvez tiene también el campo CODIINTE en la tabla Musua, sino le habría dado error también en la línea de arriba indicandole que no existía el campo CODIINTE.

Saluditos

edgwin 31-03-2009 18:08:14

Jajajajaja!! si es cierto!!! tengo que seleccionar los dos campos para poderles asignar valores. Es que ayer ya tenia seco el cerebro y no vi semejante estupidez!!! ¿Les ha pasado que ven tanto codigo y errores tan simples no los pueden ver?

Gracias! y saludos a toda la comunidad ClubDelphi


La franja horaria es GMT +2. Ahora son las 21:10:13.

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