PDA

Ver la Versión Completa : TTable - Enteros positivos no se muestran correctamente


elaguna
15-02-2012, 08:33:48
Qué tal, saludos a todos.

Tengo una tabla DBF con 3,600,000 registros aproximadamente, me solicitan un programa que se ejecute desde CD (es decir que no se tenga que instalar nada) para realizar consultas a esos registros.

No me quedo con la tabla DBF porque habría que distribuir e instalar el BDE; entonces estoy en el proceso de pasar todos los datos a Firebird. Hasta ahí todo parecía ir bien pero...

Para pasar los datos estoy usando TTable para manejar DBF y para guardar los registros en Firebird IBQuery. Al ejecutar el programa al llegar al IBQuery1.ExecSQL me sale el mensaje:

'Dynamic SQL Error SQL error code = -303 arithmetic exception, numeric overflow, or string truncation'

Revisé los valores de los campos que estoy pasando y es cuando me doy cuenta que la tabla DBF en los valores enteros me muestra negativos, ejemplo: el número 9, en la tabla lo pone como -1996488704.

Esta misma tabla si la visualizo con Foxpro o con DBF Manager me muestra (y maneja) correctamente los valores enteros.

¿Habrá alguna propiedad para que me muestre los valores correctos?

De antemano muchas gracias.



Eduardo Laguna

Casimiro Notevi
15-02-2012, 10:13:34
la tabla DBF en los valores enteros me muestra negativos, ejemplo: el número 9, en la tabla lo pone como -1996488704.

¿Seguro que 9 lo almacena como -1996488704 :confused:?

elaguna
15-02-2012, 15:28:02
Qué tal. Gracias por responder.

No. Precisamente ese es el problema.

Si visualizo la tabla con Foxpro o con DBF Manager los datos están bien (el 9 es 9).

Coloqué un DBGrid para visualizar los datos de la misma tabla y efectivamente, en Delphi los enteros se muestran como ya lo mencioné (negativos).

En la tabla el campo ENT_FED es el entero, los demás son texto.

No estoy agregando datos a la tabla DBF, lo que quiero es leerlos para pasarlos a Firebird.

Utilizo Delphi XE.

Gracias por contestar.


Eduardo Laguna.

Casimiro Notevi
15-02-2012, 15:31:27
¿Y con qué conectas a la tabla dbf desde delphi?
¿De qué tipo de campo lo has puesto en firebird?


Acabo de probar con una pequeña dbf que tengo por aquí y sale correctamente :s


Edito, veo que con BDE, usa otra cosa, ya verás como se soluciona.

elaguna
15-02-2012, 15:52:56
Lo estoy conectando con TTable del BDE.


DataSource1.DataSet := Table1;

Table1.DatabaseName := 'Z:\QRYCRM\';
Table1.TableName := 'crm_2.dbf';
Table1.Active := True;

dbGrid1.DataSource := DataSource1;


En Firebird el campo es Smallint, pero todavía no hago el paso de los datos. Las dos imágenes que subí son de la misma tabla visualizado en Delphi y DBF Manager.

Gracias.


Eduardo Laguna.

marcoszorrilla
15-02-2012, 22:45:33
Pues algo raro está pasando, porque yo he hecho algo similar hace poco, aunque solamente eran 4.000 registros y no he tenido ningún problema.

un saludo.

elaguna
16-02-2012, 00:07:22
Pues no dí con el problema, a mí también me parece bastante raro.

En este momento estoy "dándole un vuelta a los datos" pasando toda la tabla a Postgres, cuando termine haré de nuevo el intento hacia FireBird (ahora desde Postgres), espero que al ya no tener que usar el BDE no haya problema.

Muchas gracias a todos, en cuanto termine el proceso de "migración" les platico como me fué.

Saludos.


Eduardo Laguna

elaguna
17-02-2012, 21:50:10
Pues después de algunos días parece que todo va bien.

En este momento Firebird me marcan 1,603,693 registros almacenados y contando.

No sé si haya sido la solución más elegante o eficiente pero, en estos momentos de desesperación, es la que funciona.

El BDE no mostró nunca los registros correctamente, no tengo idea del por qué, pero el asunto estuvo así:


Llegan a mí 4 archivos de Excel 2010 con los datos (3,384,741 registros en total)
Me piden que pase los datos a DBF porque así es como los van a consultar en otro sistema.
Me solicitan un programa que les permita realizar consultas, pero que no haya necesidad de instalar nada, y ahí es donde comienza este post.Entonces el "caminito":


De Excel a DBF
De DBF a Postgres
De Postgres a FirebirdY ahora en cuanto termine la migración, solo quedará hacer las consultas. ¡Ya casi...!


Saludos a todos y gracias.




Eduardo Laguna.

Casimiro Notevi
17-02-2012, 22:00:08
De Excel a DBF
De DBF a Postgres
De Postgres a Firebird
Me alegro de que te funcione, aunque no entiendo tantas vueltas, tan sólo debías de no usar el obsoleto BDE y usar otra cosa :)

elaguna
18-02-2012, 03:14:23
Me alegro de que te funcione, aunque no entiendo tantas vueltas, tan sólo debías de no usar el obsoleto BDE y usar otra cosa :)

Pues yo creo que fue la emoción de saber qué se sentía manejar semejante cantidad de datos por varios caminos. :rolleyes:

Ya, en serio.

Lo que pasa es que, cada vez que quería utilizar otro componente para el manejo de DBF (que no fuera BDE), me mandaba errores de que no podía abrir la DB (aunque era tabla libre), en otra ocasión me marcó error en el archivo de índice y ni siquiera lo tenía, y cosas por el estilo; entonces decidí irme a mi viejo Foxpro y pues... por eso tanta vuelta.

La otra opción era abrir directamente los archivos de Excel con ADO, pero resulta que por aquello del registro 1,311,514 encuentro campos con caracteres inválidos (saltos de línea, tabuladores, ... ¡¡¡dentro del texto del campo!!!), además de otras cosas que de plano no me puse a averiguar que eran. ;)

La última opción, que a mi parecer era la más sencilla, era utilizar aplicaciones que hay en el mercado y que me encontré por Internet, solo que para adquirirlas se necesita $$, que voy a obtener hasta que entregue la aplicación. :(

Pero bueno, al final obtuve algo más de experiencia (y una base de datos bastante "cargadita") para hacer otro tipo de pruebas.

Muchas gracias por tus comentarios.


Eduardo Laguna.

Casimiro Notevi
18-02-2012, 03:37:00
Bueno, está bien si lo has podido resolver :)

marcoszorrilla
19-02-2012, 20:54:17
La cosa es que yo ataco tablas Dbf de Fox con el BDE y no me dan problemas de formato numérico, calculo que serán unos 100.000 registros, aunque la cantidad no creo que tenga influencia en este caso.

Un Saludo.