estoy comenzando a convertir mis bases de datos DBF a MYSQL. Una vez importadas las tablas en MYSQL me he encontrado con el problema de la anchura de los campos numéricos.
Primero probé con la propiedad nPrecision de los objetos Fields, pero para los tipos Int, TinyInt y BigInt siempre devuelven un valor fijo.
Yo necesito el valor entre paréntesis que aparece en la creación de la tabla, por ejemplo Int(5) es un ancho de 5, en cambio nPrecision es 10 y FWADOFieldLen() es 11.
Lo he conseguido solucionar usando el siguiente código :
- Code: Select all Expand view
- oRS := oCon:Execute ( "SHOW CREATE TABLE " + cTabla )
cCreateTabla := oRs:Fields[1]:value
De esta forma en la variable cCreateTabla se guarda una cadena de caracteres con la sentencia SQL que creó la tabla, como ejemplo :
CREATE TABLE `reembols` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`SERIE1` VARCHAR(2) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
`TALON` BIGINT(20) NULL DEFAULT NULL,
`SERIE2` VARCHAR(3) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
`NUMERO` BIGINT(20) NULL DEFAULT NULL,
`CLIENTE` VARCHAR(25) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
`FECHA` DATE NULL DEFAULT NULL,
`IMPORTE` DECIMAL(11,2) NULL DEFAULT NULL,
`BANCO1` VARCHAR(8) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
`BANCO` TINYINT(2) NULL DEFAULT NULL,
`APUNTE` INT(5) NULL DEFAULT NULL,
`IBAN` VARCHAR(34) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
PRIMARY KEY (`ID`)
)
Ya sólo queda buscar el nombre del campo que queramos y sacar el número entre paréntesis.
Expongo esta solución por si le sirve a algún compañero del grupo y por si alguien conoce una forma más sencilla de obtenerlo.
Un saludo.