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]