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)
-   -   Puedo Eliminar una columna de un dataset? (https://www.clubdelphi.com/foros/showthread.php?t=70327)

Wbarrantes 14-10-2010 19:18:22

Puedo Eliminar una columna de un dataset?
 
e estado un buen rato buscando y nada...

al grano...

1. tengo en un dataset el resultado de una consulta Y *
----> (digamos un select * from persona)

2. que me retorna X cantidad de columnas
----> (digamos Cedula,Nombre,Apellido1,Apellido2)

3. pero requiero tener en el dataset unicamente Z valores
---->(Digamos que la cedula,nombre y apellido1 unicamente)


Ahora bien lo que deseo es en este ejemplo eliminar del dataset, la columna apellido2, lo requiero eliminar del dataset,pues posteriormente guardo el resultado enun archivo xml... directamente del dataset...


Espero haber podido darme a entender, con mi consulta...

Nota: No puedo modificar el script a ejecutar, pues este podria ser un procedure almacenado, o un select o una vista, lo que sea que me devuelva valores

_________________________________________________________
*(la consulta es variable, no es siempre la misma)

roman 14-10-2010 19:25:33

En el dataset da clic derecho y en el menú contextual escoge "Fields Editor...". En la ventanita que se abre vuelve a dar clic derecho y en el menú selecciona "Add all fields". La ventanita se llenará con la lista de todos los campos. Ahora selecciona el que desees quitar y bórralo con Supr.

// Saludos

Wbarrantes 14-10-2010 19:35:19

Gracias por tu pronta respuesta
 
soloexiste un pequeno inconveniente con esto...

los campos son variables en cada ejecucion... osea se ejecuta un escript en tiempo de ejecucion... y los valores que me devuelve tambien son variables...

por ejemplo en lugar de: nombre, apellido1,apellido2
podria contener : Casa,ubicacion,Terreno

y el campo a eliminar tambien varia, de acuerdo a un txt de configuracion que recibo...

por lo que debo eliminar en tiempo de ejecucion...

Wbarrantes 14-10-2010 20:31:57

y si talves...?
 
No se tal ves se me ocurre, si no es posible eliminar una columna en tiempo de ejecucion...

se podria copiar en un dataset temporal, solo las columnas que deseo, y luego volver a asignar el resultado al dataset original?

no se si es posible...

agradescode antemano la ayuda que me brinden...

cloayza 15-10-2010 16:31:24

Podrias cambiar la propiedad de los campos que no deseas a Visible:=False, y modificar tu rutina de exportacion a XML, verificando que si el campo es Visible lo exporte.

Si un campo tiene su propiedad Visible a False, en una grilla no sera mostrado.

Código Delphi [-]
Tabla.FieldByName('NUMERO').Visible:=False;
Tabla.Fields[0].Visible:=False;

IF Tabla.FieldByName('NUMERO').Visible THEN
BEGIN
        Exportar a XML...
ENDIF

Es solo una idea.

Wbarrantes 15-10-2010 17:06:33

podria servir
 
elproblema es que para guaradr en XML, utilizo simplemente
Código Delphi [-]
ClientDataSet1.SaveToFile('c:\ejemplo.xml')
si conocieses alguna otra forma de realizarlo... te agradesco mucho

cloayza 15-10-2010 17:38:08

Entonces lo que podrias hacer seria eliminar los campos de la definicion del ClientDataset.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
    index:=ClientDataSet1.FieldDefs.IndexOf('NOMBRE_CAMPO_A_ELIMINAR');
    if index>-1 then
       //Lo elimina de la lista de campos
       ClientDataSet1.FieldDefs.Delete(index);
end;

Saludos.

Wbarrantes 15-10-2010 17:42:48

gracias
 
una pregunta... como declaro la vatriable index ?
de que tipo? debe ser global?

gracias... por tu prontarespuesta, y tu ayuda...

cloayza 15-10-2010 17:46:54

No me fije que no la habia definido. Ahora si.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var 
   Index:Integer;
begin
    index:=ClientDataSet1.FieldDefs.IndexOf('NOMBRE_CAMPO_A_ELIMINAR');
    if index>-1 then
       //Lo elimina de la lista de campos
       ClientDataSet1.FieldDefs.Delete(index);
end;

Saludos

Wbarrantes 15-10-2010 18:28:04

Gracias de nuevo
 
Probando tu solucion me encuentro con que...


Código Delphi [-]
 
index:=data.FieldDefs.IndexOf('Apellido1');
 if index>-1 then
 begin
 //Lo elimina de la lista de campos
  XXX:=   data.FieldCount ;
 data.FieldDefs.Delete(index);
  XXX:=   data.FieldCount ;
 end;


XXX antes y despues del delete sigue conteniendo la misma cantidad de columnas...

alguna otra idea?

tcrews 19-10-2010 03:54:38

alguien?
 
tengo exacto el mismo problema... alguien sabe que se puede hacer? una copa de vino para quien lo solucione...

Wbarrantes 19-10-2010 20:19:51

Encontre la respuesta...
 
al final encontre una forma en que funiona... obviamente antes el dataset debe estar abierto... por aquello...

Código Delphi [-]
 
ClientDataSet1.Fields.Remove(ClientDataSet1.Fields[colX]);

esto para retroalimentar con la respuesta, pues al menos a mi me costo llegarle...


La franja horaria es GMT +2. Ahora son las 22:13:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi