Obtengo un comportamiento extraño por parte del componente TADOQuery en Delphi 7 en el sistema operativo Windows XP y Windows7. El siguiente problema funciona bien en el sistema operativo Windows7, pero da un error en el sistema operativo XP.

Permítanme explicar el escenario, tengo un componente TADOConnection y dos componentes TADOQuery. El componente TADOConnection tiene el valor para la propiedad ConnectionString de la siguiente manera:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Password = My Password; User ID = My User ID; Data Source = My Data Source';

Ya apliqué el rol / concedí permiso a la identificación de usuario / contraseña con la que estoy iniciando sesión en la aplicación.

He conectado el componente TADOConnection a los componentes TADOQuery usando la propiedad Connection.

Cuando ejecuto el primer sql, funciona bien sin ningún error, pero cuando ejecuto el segundo sql, aparece el siguiente error en el sistema operativo Windows XP.

[Microsoft] [SQL Server Native Client 10.0] [SQL Server] Se denegó el permiso SELECT en el objeto 'My Table Name', base de datos 'My Database Name', esquema 'dbo'

El mismo código si lo ejecuto en el sistema operativo Windows7 funciona bien sin ningún error.

¿Alguien podría centrarse en lo que podría faltar o cuál podría ser el problema?


He añadido "Persist Security Info = False;" a una cadena de conexión de la siguiente manera:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Persist Security Info = False; Password = My Password; User ID = My User ID; Data Source = My Data Source';

Ahora, cada vez que ejecuto el sql usando el componente TADOQuery, necesito escribir la siguiente declaración cada vez, incluso si ya configuré la propiedad "Conexión" de TADOQuery al principio, todavía necesito establecer esta propiedad cada vez que ejecuto el sql.

ADOQuery1.Connection := ADOConnection1; 

Pero como dije, en Windows7 no es necesario cambiar la propiedad "ConnectionString" del componente TADOConnection y no es necesario establecer la propiedad "Connection" de ningún componente TADOQuery.

¿Alguien podría decir qué se debe hacer exactamente?

Si su aplicación es demasiado grande y se requieren cambios de codificación en muchos lugares, ¿alguien estaría de acuerdo con eso? ¿Y qué hay de los esfuerzos de prueba? En todos los lugares hay que hacer pruebas, ¿verdad?

Entonces, todavía estoy buscando una solución adecuada. La pregunta sigue sin respuesta.

Si alguien tiene alguna pista, pista o solución adecuada, sería muy apreciado.

1
Vishal Tiwari 5 may. 2012 a las 15:34

1 respuesta

La mejor respuesta
  1. Tiene que comprobar con SQL Profiler lo que está sucediendo.
  2. Mi apuesta, ADO clona internamente una conexión o usa un grupo de conexiones, y la siguiente consulta recoge otra conexión física. Entonces, está recibiendo el error. Para deshabilitar la agrupación, agregue OLE DB Services=-4 a su cadena de conexión.
2
da-soft 5 may. 2012 a las 18:31
Hola da-soft, realmente aprecio mucho tu respuesta y esto es lo que supuse que definitivamente podría faltar la propiedad "ConnectionString" y parece que ese es el problema. Podría probar esta solución el lunes, así que si obtengo la solución, usted sería la primera persona en ser informada. Agradeciendo y con un cordial saludo. Vishal
 – 
Vishal Tiwari
5 may. 2012 a las 19:46
Hola da-soft, probé con la cadena de conexión que sugirió, pero aún da el mismo error. ¿Alguna otra pista? Con los mejores deseos. Vishal
 – 
Vishal Tiwari
7 may. 2012 a las 09:08