Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿ Se pueden agregar campos a una tabla tipo paradox7 de forma dinámica en delphi 6 ? (https://www.clubdelphi.com/foros/showthread.php?t=56638)

cesar_gta86 22-05-2008 17:22:22

¿ Se pueden agregar campos a una tabla tipo paradox7 de forma dinámica en delphi 6 ?
 
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

Código Delphi [-]
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

Código Delphi [-]
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

Cita:

Empezado por cesar_gta86 (Mensaje 288814)
Oye eduarcol, entonces esto no es posible de hacer con las tablas paradox7 :confused:

Código Delphi [-]
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

Cita:

Empezado por cesar_gta86 (Mensaje 288885)
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.


Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 13:59:04.

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