Agregar Nombre de campos en un array de DBText
Hola a todos:p !Como les va? bueno les explico tengo que crear una array de DbText y que a medida que se vallan creando contengan un nombre de campo distinto segun la tabla, como debo hacer?. Hasta ahora esto es lo que hice:
Código:
luly:p |
Queria agregar donde declare el array para los que estan igual que yo:
public { Public declarations } Edit:array[1..6]of TEdit; Campo:array[1..6] of TLabel; Besotes!!:o luly:p |
Cita:
Campo:array[1..6] of TDBText; Porque además cuando lo creas igualas un TLabel a un TDBText: Campo[i]:=TDBText.Create(Self); Y como recomendación de OOP: NO declares variables en la parte publica de tu forma; declarala en la parte privada, si necesitas que sean accesados desde otra unidad entonces usa propiedades; |
Fields
En cuando al nombre de los campos puedes usar el procedimiento de los DataSet GetFieldNames();
el cual recibe como parámetro un TStringList; y en los items del stringlist tendrías los nombres de los campos accesibles con su indice: Campos[i].Caption:=StringList[i-1];//i-1 porque el indice del primer elemento es 0 y tu manejas un array basado en 1 |
gabielkc : perdona mi gran ignorancia pero no me quedo claro del todo como usar el procedimiento que me señalaste podrias enseñarmelo y como le paso los datos al stringlist, gracias igual por dedicarme tu tiempo!
Besos. Luly:p |
Campos
function ObtieneCampo(n:Integer):string;
var Lista:TStringList; begin Lista:=TStringList.Create; Tabla1.GetFieldNames(Lista); Result:=Lista[n]; Lista.Free; end; Ese sería basicamente el procedimiento para obtener el nombre de un campo cualquiera, no se te olvide que tu for inicia en 1 y el índice el TStringList inicia en 0, osea en tu caso lo llamarías mas o menos así: Campos[i].Caption:=ObtieneCampo(i-1); ///campos quedaría declarada como un array de TLabel; y la creación sería: Campos[i]:=TLabel.Create; Si quieres usar TDBText solo con especificar el campo al que quieres asociarlo es suficiente: Campos[i].DataField:=Tabla1.Fields[i-1]; |
Genial!!
Gracias gabrielkc sos un genio!:p
no me salio usando un TDBText me marca el siguiente error: Incompatible types: String and TField:confused: obviamente se me escapo algo. Tal vez vos sabes porque.Pero bueno el otro procedimiento anda perfecto y aprendi algo nuevo. Gracias!!! Besotes y gracias por tu tiempo. luly:p |
¿No puedes usar una rejilla para ese propósito? suele ser más cómodo.
Saludos |
una rejilla?
Hola Lepe!:) a que te refieres con una rejilla? Podrias explicarme?Gracias por tu tiempo. Besos. Luly:p
|
Si ya se que la pregunta era para lepe........ pero no es un chat... es un foro:
Una regilla es un DBGrid..... una regilla como la de excel, en la parte superior los titulos de los campos y en el "cuerpo" del la regilla los datos. En mi caso uso un StringGrid basicamente lo mismo, pero echo a mano |
Hemos de suponer que en algún momento el dataset de DataSource1 cambia ( o lo cambias ), sino, no podrías utilizar los mismos dbtext para acceder a campos de distintas tablas.
Hemos de suponer, que además todas las tablas tienen 6 campos. Dicho esto, creo que te falta únicamente asignar el nombre del campo en la creación de los dbtext ( solo la primera vez), y cuando cambia el dataset, cambiar los campos.
Prueba y ya nos contarás. Saludos |
nada mas como complemento para lo que menciona fjcg02, el arreglo de campos empieza en 0 no en 1, solo habra que corregir una linea para que quedara:
Field:=Datasource1.Dataset.Field[i-1]; |
La franja horaria es GMT +2. Ahora son las 20:32:18. |
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