Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Añadir field a un TTable tiempo ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=70230)

axak 08-10-2010 13:39:20

Añadir field a un TTable tiempo ejecucion
 
Antes que nada decir que como vais a ver en mi pregunta estoy pegado en esto me dedico a leer libro y foros y me voy manejando pero en este caso no doy con la clave
Mi problema es el siguiente.
En mi aplicacion tengo varios TTables a las que le asignos los valores en tiempo de diseño su databasename su tablename añado los fields con el boton derecho del raton y add fields hasta hay todo facil y bien el problema es que tengo una TTable con el nombre de Tvacia1 para ir cargando en esa misma tabla en tiempo de ejecucion y segun el boton que se pulse tablas paradox que ya tengo creadas en el editor de paradox y hago lo siguiente.

TVacia1.DatabaseName:='DBGESCONS';
TVacia1.TableName:='oficios.db';
TVacia1.fielddefs.Add('oficio', ftString, 100); aqui esta el problema
TVacia1.Active:=true;
if not TVacia1.Locate('oficio',CBOficio.Text,[]) then
TVacia1oficio.value:=CBOficio.Text;
TVacia1.Active:=False;

Donde pongo aqui esta el problema lo que verdaderamente quiero hacer es cargar los el fiels 'oficio' para despues llamar a TVacia1oficio.value, la verdad que no se si la sentencia que pongo esta bien o es con un fiels.add aunque de todas formas con la sentencia que escribo me da el error [Error] AltaSub.pas(82): Undeclared identifier: 'ftString' cuando en todos lados que he mirado libros foros y ayuda delphi me dice que el type es asi no se si esque he entendido mal

espero haber explicado bien el problema pero para resumirlo lo que quiero es saber la sentencia para añadir fiels a mi TTable en tiempo de ejecucion y si es posible aclararme el error uq me da.

Un saludo y muchas gracias

coso 08-10-2010 13:58:37

Hola,
es probable que tengas que poner en el uses la unidad donde esta definida ftstrings, creo que es db. Consulta la ayuda para saber cual es la unit. Un saludo.

axak 08-10-2010 14:31:31

es correcto me faltaba poner en uses el db muchas gracias por aclararme esa duda pero veo que la sentencia no es la correcta que yo estaba buscando ya que no me sale el error anterior pero no me reconoce Tvacia1oficio ya que no esta cargado como field

La verdad que estoy loco buscando esto porque lo que quiero es que el campo oficio guarde lo escrito en el combobox y nada ahora estoy utilizando

Principal.TVacia1.FieldByName('oficio').AsString:=CBOficio.Text;

Pero nada y es que estoy dando palos de ciegos por que en realidad no se lo que hace esta sentencia la lei en el foro me parecio que me valia y la inserter pero nada y lo mismo me paso con
Principal.TVacia1.fielddefs.Add('oficio', ftString, 100);
que pensaba que cargaba oficio en los fields pero tampoco
de todas formas muchisimas gracias asi voy aclarando dudas y aprendiendo.

cloayza 08-10-2010 17:47:26

Amigo, segun lo que entiendo quieres accesar datos de una tabla sin definirlos como persistentes.

Para ello debes realizar lo siguiente:

Primero:
Código Delphi [-]
TVacia1.Active:=False;
TVacia1.DatabaseName:='DBGESCONS';
TVacia1.TableName:='oficios.db';
TVacia1.Active:=True;

A partir de ahora todos los campos que tenga la tabla Oficios los podras acceder de la siguiente forma:

Código Delphi [-]
TVacia1.FieldByname('Oficio').AsString
TVacia1.FieldByname('Numero').AsInteger
TVacia1.FieldByname('Numero_Real').AsFloat
TVacia1.FieldByname('Logico').AsBoolean;

Ademas puedes validar si la tabla tiene un campo de la siguiente forma:
Código Delphi [-]
if TVacia1.FindField('Oficio)<>NIL Then
   ShowMessage(TVacia1.FieldByname('Oficio').AsString)
else
   ShowMessage('El campo Oficio no existe');

Para ingresar o modificar:
Código Delphi [-]
TVacia1.Append; Esta linea es para agregar
//TVacia1.Edit; Esta linea es para editar
TVacia1.FieldByname('Oficio').AsString:='Oficion Texto';
TVacia1.FieldByname('Numero').AsInteger:=10;
TVacia1.FieldByname('Numero_Real').AsFloat:=10.9;
TVacia1.FieldByname('Logico').AsBoolean:=True;
TVacia.Post;

Saludos y espero haber aclarado algo tus dudas.

axak 08-10-2010 18:25:58

Muchas gracias Claro que me ha servido me estaba volviendo loco, ahora entiendo que poner
TVacia1.FieldByName('oficio').AsString:=CBOficio.Text;
es como poner cuando tienes los fields definidos con el editor de fields
Tvaciaoficio.value:=CBoficio.text;
me estaba volviendo tan loco esta linea que haste he puesto la sentencia TVacia.edit; en vez de Tvacia1.post; y cuando he puesto tu linea que ya sabia que funcionaba me he dado cuenta que habia otro error que era ese es que de tanto tocar el codigo ya ni sabia lo que ponia
muchas gracias de verdad.

genyus00 21-08-2014 16:59:32

FieldDefs.Add('oficio', ftString, 100, false); //eso te falta :D

Casimiro Notevi 21-08-2014 17:23:23

Cuatro años después :)

genyus00 22-08-2014 17:54:59

jejeje. siempre hay alguien en busca una respuesta y estas son las primeras en salir y sin concluir. Pero para que veas hay un tema que cada año alguien le agrega algo y creo llevan 10 años en eso. :D reviven el link cada año.

Código Delphi [-]
//agregar campo en tiempo de ejecución
procedure TForm1.Button2Click(Sender: TObject);
var
  T: TStringField;
begin
  Query1.Close;
  T := TStringField.Create(Self);
  T.FieldName := 'CO_NAME';
  T.Name := Query1.Name + T.FieldName;
  T.Index := Query1.FieldCount;
  T.DataSet := Query1;
  Query1.FieldDefs.UpDate;
  Query1.Open;
end;

//Eliminar campo en tiempo de ejecución
procedure TForm1.Button1Click(Sender: TObject);
var
  TC: TComponent;
begin
  TC := FindComponent('Query1CO_NAME');
  if not (TC = nil) then begin
    Query1.Close;
    TC.Free;
    Query1.Open;
  end;
end;
:D

Casimiro Notevi 22-08-2014 17:58:42

Cita:

Empezado por genyus00 (Mensaje 480262)
jejeje. siempre hay alguien en busca una respuesta y estas son las primeras en salir y sin concluir. Pero para que veas hay un tema que cada año alguien le agrega algo y creo llevan 10 años en eso. :D reviven el link cada año.

Pues tomamos nota y te esperamos dentro de un año aquí :D

leg128 18-11-2014 02:24:31

Hay alguna forma de agregar los campos dinamicamente (add all fields) en tiempo de ejecucion? estoy dando vueltas con este tema hace varios dias y no lo consigo. Saludos


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

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