Hola Pedro,

disculpa que se me hayan acumulado varias consultas, pero tengo unos días muy complicados de trabajo :-(

Pedro escribió:
Hola Ariel

Tengo un problema con los decimales al guardar en una tabla no relacionada. El caso es el siguiente:

Dim sSQLGuardaTabla$
sSQLGuardaTabla = "INSERT INTO ""GRAL"" VALUES (" & " NULL, '" &_
CLng(sCcInt.Value) &"', '"&_
CLng(sCcExt.Value)  &"' )"

oStatement.execute( sSQLGuardaTabla )

Donde necesito que la variable almacenada sea CDbl y no CLng (que es única forma que se a guardado en la tabla). Estas variables (CcInt y sCcExt) son calculadas por código a partir de otras variables definidas como objetos del formulario y almacenadas como variable objeto en el mismo formulario. En la tabla GRAL, los campos están definidos como número con un decimal.

El dejar estas variables como CDbl, aparece el mensaje:



y en la ventana Basic queda marcado "oStatement.execute( sSQLGuardaTabla )"

Suena a que estás pasando el valor double con *COMA*, en vez de *punto* como separador decimal:

* en la interfaz gráfica de OOo empleas tu configuración regional, y funciona.

* en SQL debes emplear el punto como separador 1000.05 en vez de 1000,05

Prueba si esto es lo que te genera el error.

Ejemplo:

INSERT INTO CLIENTES  VALUES (

                null,
                'Pedro',
                'Perez',
                'calle ***',
                'La Plata',
                '[EMAIL PROTECTED]',
                '1973-05-12',
                '1998-06-02 12:04:05',
                '12345,67',
                true
);

Genera "Wrong data type: java.lang.NumberFormatException"

Motivo:
si el número es pasado como una cadena '12345,67', HSQLDB trata de formatearlo con la clase java.lang.NumberFormat. Por defecto, ellos emplean como locale en-US, entonces la COMA como separador decimal genera un error.

Solución: pasar una cadena empleando el PUNTO como separador decimal, o mejor directte. un valor numérico 12345.67.

Si pasaras un valor numérico empleando la COMA, te saldría otro error:

Column count does not match in statement [...]

porque la coma le estaría indicando al servidor que se trata de OTRA columna (12345,67 indica valores para DOS columnas: para una 12345 y para otra 67).


Ya que estamos: atención al pasar FECHAS: la mayoría de los RDBMS emplean como formato para datos tipo Date yyyy-mm-dd, y para tipo Timestamp yyyy-mm-dd hh:mm:ss[.fffffffff] (== los milisegundos son opcionales).


Ej . si pasas '1998-6-02 12:04:05' (== falta el 06 al mes) se genera un error:

Wrong data type: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]


PERO ATENCIÓN: con datos tipo Date NO se genera error al pasar '1973-5-12' en vez de '1973-05-12' (esto al menos en HSQLDB == cada RDBMS tiene sus propias reglas, aunque SQL es un estándard ... :-( )


Espero que te ayude en algo

Saludos,
Ariel.

--
Ariel Constenla-Haile
La Plata, Argentina

[EMAIL PROTECTED]
[EMAIL PROTECTED]

http://www.arielconstenlahaile.com.ar/ooo/



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a