Pregunta

Estoy trabajando en un producto legado y tengo algo de SQL que se ejecuta a través de ADO, a una base de datos Access con tablas vinculadas a SQL Server. Estoy recibiendo el error Ronda 'función definida '' cuando ejecuto el SQL, pero Si tomo la consulta y ejecutar directamente en Access funciona bien . Sé que todo está correcto y que este es un problema específico de la máquina ya que este es el código de la producción, que funciona en otros equipos y se ha desplegado con éxito para muchos clientes.

No estoy seguro por dónde empezar a ser honesto. Estoy corriendo los (últimos) versiones correctas de Jet / ADO / MDAC.

Cualquier ayuda sería apreciada.

Gracias de antemano.

EDIT: Obviamente, el SQL incluye la función de agregado 'Ronda'. Soy consciente de las diferencias entre Jet y SQL implementaciones. Este problema se debe a algún problema con un componente en mi máquina y no con el código. El SQL se ejecuta correctamente cuando se hace a través de MS Access 2007, pero no a través de ADO.

¿Fue útil?

Solución

Edit2: solución adecuada a partir de los comentarios:

shahkalpesh: Si se ejecuta bien a través de acceso, podría ser que tiene acceso el archivo DLL que dispone, el cual tiene la función de Ronda. ¿Cuál es la conexión de cadena, que está utilizando?

Stimul8d: No estoy seguro de cómo puede ser algo tan ver con la cadena de conexión. Este código funciona en cualquier otra máquina, sin cambios; pero no en la mía.

Andomar: Bueno, eso es su problema allí mismo, el equipo está farked arriba. Todavía se puede instalar VB6 SP6 tal vez.

Stimul8d: Bueno, SP6 arregló. Saludos Anndomar, ni idea de qué SP6 fija, pero lo hizo!

EDIT: Basado en su comentario este grupo de noticias posterior podría ser la respuesta:

  

Por desgracia, cuando se está ejecutando   consultas desde fuera de acceso (como se   son de VB), su única conexión con   la base de datos es a través de la Jet   motor, que no sabe nada   sobre la mayoría de las funciones de VBA. No hay   forma de evitar esto, aparte de para volver   los datos a su uso de VB y   utilizar las funciones de los datos allí.

Y dos puestos más adelante:

  

He resuelto el problema. Actualizado mi VB   con el Service Pack 6 ... que tomó   cuidar de los problemas.

vieja respuesta aquí:

piso, intente () en lugar de ROUND ().

Para redondear algo al entero más cercano, usted podría:

declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)

P.S. Tal vez publicar el error exacto que se obtiene. Si se trata de "La función de ciclo requiere de 2 a 3 argumentos.", Eso significa que SQL Server es Borking en la ronda ().

Otros consejos

Existe la función round () en SQL Server también.
La única diferencia es:. Acceda a la precisión es un parámetro opcional, pero en SQL Server tiene que especificar que

Así que esto sólo funcionará en Access, pero no en SQL Server:

select round(Column) from Table

Esto funciona en Access y SQL Server:

select round(Column,1) from Table
  

podría ser que tiene acceso el archivo DLL   a su disposición, que tiene la Ronda   función

ACE / Jet utiliza los servicios de expresión compartir con VBA. En términos generales, ACE / Jet soporta como expresiones todas las funciones VBA5 (a diferencia de métodos) cuyos argumentos y devolver valores son escalares tipos (por ejemplo, no hay matrices, no hay objetos). La expresión Round() entra en esta definición y, de hecho, está disponible para ACE / Jet con la misma semántica que su función equivalente de VBA. Como cualquiera que esté familiarizado con el motor ACE / Jet debe saber, sin embargo, la semántica pueden diferir de los equivalentes de VBA por ejemplo, ACE / Jet ANSI-92 SQL consulta en modo

SELECT TYPENAME(ROUND(5, 1))

devuelve 'Long', mientras que VBA

?Typename(Round(5, 1))

devuelve 'Integer'.

En otras palabras, <=> no iba a ser el problema aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top