PDA

Ver la Versión Completa : ¿ Se pueden agregar campos a una tabla tipo paradox7 de forma dinámica en delphi 6 ?


cesar_gta86
22-05-2008, 17:22:22
Hola que tal amigos, tengo una duda. Lo que pasa es que estamos desarrollando un sistema de B.D. pero necesitamos saber si se pueden agregar nuevos campos o columnas de forma dinámica (con código) a tablas tipo paradox7, estamos utilizando delphi 6. Y si se pudiera realizar esto, a ver si me podrian dar un ejemplo.

MIL grácias de antemano.
Saludos.:)

marcoszorrilla
22-05-2008, 17:53:41
if FileExists(cNomTemp) then
DeleteFile(cNomTemp);

if Not FileExists(cNomTemp) then
begin
Try
DmPan.QrTemporales.Close;
DmPan.QrTemporales.Sql.Clear;
DmPan.QrTemporales.Sql.Add('Create Table '+QuotedStr(cNomTemp));
DmPan.QrTemporales.Sql.Add('(');
DmPan.QrTemporales.Sql.Add('Codigo Char(07),');
DmPan.QrTemporales.Sql.Add('Producto Char(15),');
DmPan.QrTemporales.Sql.Add('Cantidad Numeric(10,2),');
DmPan.QrTemporales.Sql.Add('Total Numeric(10,2),');
DmPan.QrTemporales.Sql.Add('Fecha Date');
DmPan.QrTemporales.Sql.Add(')');
DmPan.QrTemporales.ExecSQL;
Except
ShowMessage('Error al crear la tabla temporal de facturas.');
end;
end;

Asi se crea una tabla nueva, para agregar campos no tienes más que utilizar: ALTER TABLE.

Un Saludo.

eduarcol
22-05-2008, 17:55:12
with TTable.Create(Application) do
begin
//Añade los campos
FieldDefs.Clear;
FieldDefs.Add(NombreCampo,TipoDato,Longuitud,Requerido);
//Añade los indices
IndexDefs.Clear;
with IndexDefs.AddIndexDef do
begin
Name := NombreIndice;
Fields := NombreCampo;
Options := Opcion;
end;
end;

CreateTable;
end;

Se me adelanto Marcos :D

La diferencia es que el lo hace por SQL yo lo hago por los metodos propios del TTable

cesar_gta86
23-05-2008, 16:14:25
Oye eduarcol, buenos días, mira tengo un pequeño detalle; lo que pasa es que yo, ya tengo la tabla creada de forma estática, pero me veo en la necesidad de agregarle nuevos campos a la misma, no la de crear una nueva tabla y agregarle campos.

Con la ayuda que me diste intenté agregarle nuevos campos a la tabla que ya tengo creada, pero no lo hace; mira te muestro el código:

Table1.FieldDefs.Add('Ciudad_alumno',ftString,50,false);

Intenté guardar los cambios en la tabla con table1.refresh, pero creo que el refresh es sólo para guardar los cambios de los datos insertados. También intenté poner la tabla en modo de edición, pero sucede lo mismo, no guarda los nuevos campos.

Grácias Marcos, por tu ayuda con sql, ya que posteriormente me servirá.:)

eduarcol
23-05-2008, 17:13:30
de ser asi, la respuesta te la ha dado Marcos, debes utilizar el Alter Table

cesar_gta86
23-05-2008, 17:18:40
Oye eduarcol, entonces esto no es posible de hacer con las tablas paradox7 :confused:

eduarcol
23-05-2008, 18:12:54
Oye eduarcol, entonces esto no es posible de hacer con las tablas paradox7 :confused:

sqModificador.Active := False;
sqModificador.Sql.Clear;
sqModificador.SQL.Add('Alter Table "c:\mibase\NombreTabla" add MiCampo MiTipoDato);
sqModificador.ExecSQL;

cesar_gta86
23-05-2008, 23:25:58
Disculpa el "sqmodificador" no lo entiendo, me podrias decir qué componente se puede utilizar; disculpa mi ignorancia.:confused:

Saludos.:)

juanelo
23-05-2008, 23:28:47
Disculpa el "sqmodificador" no lo entiendo, me podrias decir qué componente se puede utilizar; disculpa mi ignorancia.:confused:

Saludos.:)
Es un TQuery.
Saludos

Lepe
24-05-2008, 12:03:52
En definitiva es lenguaje SQL DDL, (Structure Query Language Data Definition Language), vale, recordemos que el BDE es un mini-SQL, pero puede crearse campos, etc:

Aqui tienes algunas pruebas con Paradox, cada línea tendría que ejecutarse en un Query. El campo CP (codigo postal) estaba definido como numero entero, aquí estan las operaciones a realizar en la base de datos para cambiarlo a texto, por supuesto, después habría que actualizar los campos en Delphi.



alter table clientes add nuevo char(8) // añadir campo nuevo temporal
update clientes set nuevo = CP // copiar los datos de un campo a otro
<< desconectar de BD y conectar >>
select idcliente, cliente, nuevo, cp from clientes


select idcliente, CP, nuevo from clientes where CP < 10000
alter table clientes drop CP // borrar el definido como entero


alter table clientes add CP char(8); // codigo postal nuevo y ya en texsto
update clientes set CP = nuevo // copiar desde el temporal
alter table clientes drop nuevo
select * from clientes


alter table AlbaranC add column anio integer // añadir un campo "anio" a una tabla existente
update albaranc set anio = cast( substring(nalbaranc from 8 for 4) as integer) // el año está incluido en el campo nalbaranC, así que lo extraemos.
select nalbaranc, anio from albaranc