PDA

Ver la Versión Completa : mostrar datos de un campo de bd


D1360666
28-12-2015, 20:23:18
Hola estoy desarrollando una app en Delphi, el cual cargo las tablas de diferentes bases de datos, principalmente Access.
Tengo 3 ListBox.
En el primero cargo las tablas que existen en la base de datos, seleccionando la tabla muestro en el listbox 2 los campos que contiene.
En el listbox 3 quiero cargar los datos del campo (Nombre, Tipo de dato y tamaño).
Estoy teniendo problemas con el tercer paso.

La app es para exportar tablas a una bd nueva para hacer migración a un sistema nuevo.

Desde ya agradezco la ayuda.

Saludos.
Diego.-

AgustinOrtu
28-12-2015, 20:28:57
La clase TField tiene todo lo que necesitas

Como realizas el paso 2? Como listas los campos de una tabla?

D1360666
28-12-2015, 20:36:26
primero las tablas las llamo a cn.gettablenames(lstTablas.items,false)
donde CN es la conexion a la base y llamo todas las tablas pasando la lista donde va mostrar el resultado.

Segundo.
En el evento click de la lista me creo una variable String: Tabla.
Seteo la tabla seleccionada en la variable.
Luego en un TTABLE cargo la tabla seleccionada y llamo al metodo table.GetFieldNames(lstCampos.items) cargando lstCampos(listbox) que es donde muestro los campos de la tabla seleccionada.

D1360666
28-12-2015, 21:52:29
Yo quiero habiendo seleccionado el campo de la tabla en el listbox 2 que me cargue el tipo de dato y el tamaño del campo

AgustinOrtu
28-12-2015, 22:08:10
Luego en un TTABLE cargo la tabla seleccionada y...


Haces esto mismo, y luego Table.FieldByName(nombre). Esto te devuelve un objeto TField, del cual te van a interesar las propiedades: DataType, Precision, Size, Name, etc

D1360666
29-12-2015, 12:23:11
Muchas gracias por el aporte Agustin.
Intenté hacerlo y me funciona solamente me está complicando pasar la propiedad Datatype(Tfield) a String para mostrarlo.
Parece algo sencillo pero me ha dado errores a la hora de querer convertirlo.
A la vez en las propiedades de Datatype me aparecen una lista de propiedades de todos los tipos que maneja el delphi.
Tendré que verificar que tipo de dato es primero para mostrar el tipo recorriendo esa lista de datatypes?

Osorio
29-12-2015, 14:35:09
Puedes hacer algo como

procedure TForm1.Button1Click(Sender: TObject);
var
f: TField;
tipo: String;
begin
case f.DataType of
ftUnknown: tipo:= 'ftUnknown';
ftString: tipo:= 'ftString';
ftSmallint: tipo:= 'ftSmallint';
ftInteger: tipo:= 'ftInteger';
ftWord: tipo:= 'ftWord';
end;
{
ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, // 5..11
ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, // 12..18
ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, // 19..24
ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, // 25..31
ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, // 32..37
ftFixedWideChar, ftWideMemo, ftOraTimeStamp, ftOraInterval, // 38..41
ftLongWord, ftShortint, ftByte, ftExtended, ftConnection, ftParams, ftStream, //42..48
ftTimeStampOffset, ftObject, ftSingle); //49..51
}
end;

D1360666
29-12-2015, 15:46:12
Muchas gracias Osorio!!
Fué la solución que me anduvo para la conversión.
Muchas gracias estimado.
Saludos a todos los que me dieron una mano, cualquier cosa en lo que pueda colaborar a las ordenes.