Thread: operador incorrecto para numeric and float8
Hola a todos.
Estuve ausente durante un par de meses, pero ya vuelvo con todos los hierros, y con algún problemita.
He creado una tabla con la siguiente estructura:
Create table inventar
(
codigo Varchar(20) primary key,
dpto Decimal(10) Null,
descripcio Varchar(100) Null,
referencia Varchar(20) Null,
unidad Varchar(10) Null,
unidxgrupo Decimal(15,2) default 0,
dgrupo Varchar(10) Null,
tipo Decimal(10) Null,
costo1 decimal(15,2) default 0,
costo2 decimal(15,2) default 0,
precio1 decimal(15,2) default 0,
precio2 decimal(15,2) default 0,
precio3 decimal(15,2) default 0,
preciop1 decimal(15,2) default 0,
preciop2 decimal(15,2) default 0,
exactual Decimal(15,2) default 0,
examin Decimal(15,2) default 0,
exmax Decimal(15,2) default 0,
excento decimal(10) default 0,
exant Decimal(15,2) default 0,
pvp1 decimal(15,2) default 0,
pvp2 decimal(15,2) default 0,
pvp1g decimal(15,2) default 0,
pvp2g decimal(15,2) default 0,
exdeposito decimal(15,2) default 0,
extienda decimal(15,2) default 0
);
(
codigo Varchar(20) primary key,
dpto Decimal(10) Null,
descripcio Varchar(100) Null,
referencia Varchar(20) Null,
unidad Varchar(10) Null,
unidxgrupo Decimal(15,2) default 0,
dgrupo Varchar(10) Null,
tipo Decimal(10) Null,
costo1 decimal(15,2) default 0,
costo2 decimal(15,2) default 0,
precio1 decimal(15,2) default 0,
precio2 decimal(15,2) default 0,
precio3 decimal(15,2) default 0,
preciop1 decimal(15,2) default 0,
preciop2 decimal(15,2) default 0,
exactual Decimal(15,2) default 0,
examin Decimal(15,2) default 0,
exmax Decimal(15,2) default 0,
excento decimal(10) default 0,
exant Decimal(15,2) default 0,
pvp1 decimal(15,2) default 0,
pvp2 decimal(15,2) default 0,
pvp1g decimal(15,2) default 0,
pvp2g decimal(15,2) default 0,
exdeposito decimal(15,2) default 0,
extienda decimal(15,2) default 0
);
Tengo un pequeño problema en mi programa, al ejecutar la siguiente instrucción:
Cn.Execute "Update inventar set exactual = (inventar.exactual - 1.5) where inventar.codigo = '01'"
--------------------------------------------------------------------
Microsoft Visual Basic
--------------------------------------------------------------------
Error '-2147467259 (80004005)' en tiempo de ejecución:
Microsoft Visual Basic
--------------------------------------------------------------------
Error '-2147467259 (80004005)' en tiempo de ejecución:
Error while executing the query (non-fatal);
ERROR: Unable to identify an operator '-' for types 'numeric' and
'float8'
ERROR: Unable to identify an operator '-' for types 'numeric' and
'float8'
you will have to retype this query using an explicit cast
--------------------------------------------------------------------
Lo cual no sucede al ejecutar la que sigue:
Cn.Execute "Update inventar set exactual = (inventar.exactual - 1) where inventar.codigo = '01'"
Claramente se nota dónde está el error, lo que no sé es como evitar que suceda, tengo la versión de PostgreSQL 7.1.1 y la versión 7.01.00.05 de PostgreSQL ODBC
Gracias por adelantado, acepto cualquier sugerencia.
Hola otra vez: Gracias por la sugerencia, me funcionò muy bien, aunque tuve que hacer algunas trampas para conservar la compatibilidad de mi programa con otras bases de datos a travès de ODBC. En relación con el nebuloso uso de ODBC solo te puedo decir lo que sé por experiencia: ODBC es una interfaz entre la aplicación y el manejador de base de datos, en este caso PostgreSQL, solo que ODBC tiene que utilizar a su vez una intefaz almacenada en una biblioteca de enlace dinámico (.DLL) donde se encuentran los procedimientos y funciones que manejarán la base de datos, es por eso que la sugerencia que me hiciste funcionó, solo que cuando lo intento con access no sirve, ni con sqlserver, es algo así como que PostgreSQL ODBC manejara directamente la base de datos. APLICACIÓN <======> ODBC <======> PostgreSQL A !! V PosgreSQL ODBC Eliodoro Michel wrote: > Probaste usando la definición explicita para el tipo de variable? > > Cn.Execute "Update inventar set exactual = (inventar.exactual::float8 - > 1.5) where inventar.codigo = '01'" > > No estoy seguro si esto lo logre ejecutar VB (a menos que pase la cadena > directamente al motor de Posgresql sin interpretarlo a través de ODBC) pero > creo que deberia funcionar. > > Yo personalmente para ciertas cosas raras, y para evitar el no saber que > ocurre en el camino de ODBC-Postgresql preferi usar en alguno casos > funciones Postgresql que luego pueden ser llamadas en vistas o a tráves de > triggers. > > Si tienes información sobre el nebuloso uso de ODBC, agradeceria saber donde > puedo ubicar más datos sobre eso. > > > Saludos y suerte > > Elio > > > On Mon, 22 Oct 2001 21:45:39 -0400, Raul Breindembach wrote: > > Hola a todos. > > Estuve ausente durante un par de meses, pero ya vuelvo con todos los > hierros, y con algún problemita. > > He creado una tabla con la siguiente estructura: > > Create table inventar > ( > codigo Varchar(20) primary key, > dpto Decimal(10) Null, > descripcio Varchar(100) Null, > referencia Varchar(20) Null, > unidad Varchar(10) Null, > unidxgrupo Decimal(15,2) default 0, > dgrupo Varchar(10) Null, > tipo Decimal(10) Null, > costo1 decimal(15,2) default 0, > costo2 decimal(15,2) default 0, > precio1 decimal(15,2) default 0, > precio2 decimal(15,2) default 0, > precio3 decimal(15,2) default 0, > preciop1 decimal(15,2) default 0, > preciop2 decimal(15,2) default 0, > exactual Decimal(15,2) default 0, > examin Decimal(15,2) default 0, > exmax Decimal(15,2) default 0, > excento decimal(10) default 0, > exant Decimal(15,2) default 0, > pvp1 decimal(15,2) default 0, > pvp2 decimal(15,2) default 0, > pvp1g decimal(15,2) default 0, > pvp2g decimal(15,2) default 0, > exdeposito decimal(15,2) default 0, > extienda decimal(15,2) default 0 > ); > > Tengo un pequeño problema en mi programa, al ejecutar la siguiente > instrucción: > > Cn.Execute "Update inventar set exactual = (inventar.exactual - 1.5) where > inventar.codigo = '01'" > > -------------------------------------------------------------------- > Microsoft Visual Basic > -------------------------------------------------------------------- > Error '-2147467259 (80004005)' en tiempo de ejecución: > > Error while executing the query (non-fatal); > ERROR: Unable to identify an operator '-' for types 'numeric' and > 'float8' > > you will have to retype this query using an explicit cast > > -------------------------------------------------------------------- > > Lo cual no sucede al ejecutar la que sigue: > > Cn.Execute "Update inventar set exactual = (inventar.exactual - 1) where > inventar.codigo = '01'" > > Claramente se nota dónde está el error, lo que no sé es como evitar que > suceda, tengo la versión de PostgreSQL 7.1.1 y la versión 7.01.00.05 de > PostgreSQL ODBC > > Gracias por adelantado, acepto cualquier sugerencia. > > > > > > _______________________________________________________ > http://inbox.excite.com > > > >
Spanish Version: Hola compañeros, el lenguaje de comunicacion de esta lista es el inglés. Saludos Versión Inglesa: Hi, the languaje of the list is english > Hola otra vez: > Gracias por la sugerencia, me funcionò muy bien, aunque tuve que > hacer algunas trampas para conservar la compatibilidad de mi programa > con otras bases de datos a travès de ODBC. encuentran los procedimientos y funciones que manejarán la base > de datos, es por eso que la sugerencia que me hiciste funcionó, solo que > cuando lo intento con access no sirve, ni con sqlserver, es algo así > como que PostgreSQL ODBC manejara directamente la base de datos. >