PDA

Ver la Versión Completa : importar de dbf a oracle. deberia ser facil...


pepe2000
07-03-2004, 22:05:01
Hola a todos.
En un mismo formulario, he puesto una conexion a DBF y otra a ORACLE. Al momento de pasar datos de una tabla a la otra, aparece un error que pertenece a Oracle.
Probando me he dado cuenta que esto sucede en el caso de campos numericos.
RESUMO:
Alguien puede decirme como paso datos numericos de un DBF a Oracle?
Muchas gracias

jachguate
08-03-2004, 05:35:48
Seria excelente ver cómo los estas pasando, para sacar algo en claro.

Asi, en frio he de decirte que basta con:

TablaOracleCampo.AsFloat := TablaDBFCampo.AsFloat;

Hasta luego.

;)

jachguate
08-03-2004, 05:42:46
y por supuesto el error de oracle... es imprescindible!

pepe2000
08-03-2004, 15:21:27
el error es:
raised exception class EDBEngineerror with message 'General SQL error.
[Oracle][ODBC][Ora]ORA-01722: numero no válido'. Process stopped.
¿será por el uso de ODBC?. porque importando desde Access a Oracle con:
INSERT INTO T1 SELECT * FROM T2 salía el mismo error (ORA-01722).
Gracias.

marto
08-03-2004, 16:10:19
Es posible que en algun registro tengas valores NULL en alguno de tus campos numéricos? Si es así quizá sería bueno traducir los NUL a 0.

jachguate
08-03-2004, 17:21:57
ORA-01722

ORA-01722invalid number

Cause:The attempted conversion of a character string to a number failed because the character string was not a valid numeric literal. Only numeric fields or character fields containing numeric data may be used in arithmetic functions or expressions. Only numeric fields may be added to or subtracted from dates.

Action:Check the character strings in the function or expression; make sure they contain only numbers, a sign, a decimal point, and the character "E" or "e", then retry the operation.


Seguramente le estas enviando números "formateados" o con una coma como separador de decimales (solamente te reconocerá el punto). Es mejor trabajar directamente con números y no enviar cadenas que contienen números, para evitar estos problemas. De cualquier forma podes enviar una cadena siempre que sigas las recomendaciones de la cita anterior.

El problema no tiene nada que ver con valores NULL, que son perfectamente soportados por Oracle.

Hasta luego.

;)

pepe2000
08-03-2004, 18:48:29
he probrado a hacer una tabla DBF, luego otra en ACCESS (con un campo numerico), Luego aplico el siguiente codigo:

tablaDBF.First;
while not tablaDBF.Eof do begin
tablaORACLE.append;
TablaORACLEcampo.asfloat:=TablaDBF.asfloat;
TablaORACLE.Post;
TablaDBF.Next
end;

y devuelve el error ORA-01722.
Sé que se trata de campos numericos porque cuando trato de hacer el mismo codigo con strings no tiene problemas.
Espero que me ayuden.
Muchas gracias

jachguate
08-03-2004, 20:50:10
Quizas sea problema del controlador ODBC que estas usando, que no sabe "platicar" con Oracle y le pasa textos inadecuados. Porque no intentas conectarte directamente a oracle con el BDE, usando el driver Oracle, veras como se arregla el problema y además, te quitas al molesto ODBC del medio.

Hasta luego.

;)

marto
08-03-2004, 21:01:09
El problema no tiene nada que ver con valores NULL, que son perfectamente soportados por Oracle.
Eso depende de como le pases los valores. Evidentemente, oracle soporta valores NULL, pero no todas las bases de datos los representan de la misma manera. Además, depende de como esté asignando los valores. Por ejemplo, montado SQL al vuelo podría dar errores.

jachguate
08-03-2004, 21:14:52
Claro marto, a lo que me refería es que el Ora-01722 no tiene nada que ver con valores NULL, salvo claro que intentara insertarse la cadena 'NULL' en un valor numérico, pero por lo ya mencionado, no creo que sea el caso.

Hasta luego. ;)

pepe2000
08-03-2004, 22:35:00
bueno muchas gracias de todas maneras.
Haré otras pruebas y les comento como quedó todo esto.