Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2007
scooterjgm scooterjgm is offline
Miembro
 
Registrado: ago 2004
Posts: 115
Poder: 21
scooterjgm Va por buen camino
Comparto con todos la información que he encontrado acerca de este problema.

En http://www.sommarskog.se/error-handling-I.html#ADO dice lo siguiente:

Cita:
ADO also takes the freedom to make its own considerations about what is an error. I found that ADO always considers division by zero to be an error, even if both ARITHABORT and ANSI_WARNINGS are OFF. In this case, SQL Server merely produces a warning, but ADO opts to handle this warning as an error. A good thing in my opinion. Of what I have found, this only happens with division by zero; not with arithmetic errors such as overflow.
De momento tengo el porqué del problema pero no la solución.
__________________
Hay 10 tipos de personas, las que entienden el código binario y las que no.

ww.clubdelphi.com/foros/guiaestilo.php
Responder Con Cita
  #2  
Antiguo 27-03-2007
scooterjgm scooterjgm is offline
Miembro
 
Registrado: ago 2004
Posts: 115
Poder: 21
scooterjgm Va por buen camino
Debido a que el único caso ocurre con el warning division by zero, como solución provisional he incorporado una comprobación en el procedimiento almacenado antes de obtener el resultado de la operación.

Código SQL [-]
 
IF @formula LIKE '%/0%' SET @salida=0

Con esto, si la fórmula contiene alguna división entre cero, evito que se ejecute el procedimiento que me calcula el resultado de la fórmula.

como he dicho antes, esto es una medida provisional ya que no estaría contemplado el caso de una división entre un paréntesis cuyo resultado sea cero.

Ej: 250/(10-10)

Debería ir obteniendo resultados parciales y realizando la misma comprobación pero ando pillado de tiempo y lo dejo para otro rato.

Muchas gracias a todos los que habeis dedicado tiempo a leer este hilo y en especial a Neftali por su respuesta.

Un saludo a tod@s.
__________________
Hay 10 tipos de personas, las que entienden el código binario y las que no.

ww.clubdelphi.com/foros/guiaestilo.php
Responder Con Cita
  #3  
Antiguo 10-12-2007
scooterjgm scooterjgm is offline
Miembro
 
Registrado: ago 2004
Posts: 115
Poder: 21
scooterjgm Va por buen camino
Bueno, pues 9 meses después creo tener la solución a mí problema. Voy a detallar paso por paso los problemas que he tenido...

1- La siguiente consulta me da error de división por cero:

Código:

SELECT 1/0 as CERO,1 as UNO
2- La siguiente solución sirve para el resto de warnings pero no para el de 'división por cero' ya que ADO lo sigue tomando como error según el artículo del post anterior:

Código:
SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
 
SELECT 1/0 as CERO,1 as UNO
3- Añadiendo una linea más, se puede conseguir que SQL Server no muestre ningún warning:

Código:
SET ANSI_WARNINGS OFF
 
SET ARITHIGNORE ON
 
SET ARITHABORT OFF
SELECT 1/0 as CERO,1 as UNO
Problema resuelto... muchas gracias a todos los que os habeis interesado en el tema. Espero que esto pueda salvar la vida a más programadores
__________________
Hay 10 tipos de personas, las que entienden el código binario y las que no.

ww.clubdelphi.com/foros/guiaestilo.php
Responder Con Cita
  #4  
Antiguo 10-12-2007
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.925
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pero el error original que tiene que ver con la division por 0? ME PERDI!

Esos es un desbordamiento, tipico de poner un unicode char/varchar y meterle un ANSI char.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 14-12-2007
scooterjgm scooterjgm is offline
Miembro
 
Registrado: ago 2004
Posts: 115
Poder: 21
scooterjgm Va por buen camino
Cita:
Empezado por mamcx Ver Mensaje
Pero el error original que tiene que ver con la division por 0? ME PERDI!

Esos es un desbordamiento, tipico de poner un unicode char/varchar y meterle un ANSI char.
Al ejecutar la consulta original, me aparecían varias advertencias, y el de error texto que tomaba al encontrarse con la divisón por cero era la primera advertencia que aparecía. Ese mensaje me llevó a la confusión...
__________________
Hay 10 tipos de personas, las que entienden el código binario y las que no.

ww.clubdelphi.com/foros/guiaestilo.php
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas conectividad instalando sql server 2000 en w2k server ospaco69 MS SQL Server 1 16-02-2007 04:39:17
Exportar database sql server 2005 a sql server 2000 ErenioDhG Conexión con bases de datos 1 29-08-2006 15:42:46
SQL SERVER 2000 se cae sga000y MS SQL Server 2 17-01-2005 23:59:23
Ms Word 2000/97 + Ms sql server 7/2000 + almacenar - leer - actualizar Campos jcp_nqn Servers 0 21-12-2003 01:55:14
Una de consultas en SQL Server 2000 frvkaiser MS SQL Server 2 13-06-2003 16:32:51


La franja horaria es GMT +2. Ahora son las 04:53:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi