Interaccion entre Provider=MSDASQL y Provider=SQLOLEDB

12/10/2008 - 17:50 por Jaime Palli | Informe spam
En una red tengo un Windows 2000 Server y en este servidor un SQL Server
2000.
Casi todos los puestos son Windows XP/Vista y 2 de ellos son Windows 2000.
Tanto en los puestos con Windows 2000 como el servidor cuando se accede via
Terminal Server tengo el mismo problema. Esto no ocurre en los puestos con
XP/Vista.
El problema es el conocido "3706 Provider cannot be found".
Despues de mucho buscar por todo tipo de foros no consigo encontrar una
solucion.
Como el problema es el mismo en el servidor que en los puestos, he empezado
a experimentar con uno de los puestos donde he hecho lo siguiente:

Actualizar a SP4.
Instalar MDAC 27 SP1
Instalar SQL Native Client (pero no lo uso, quiero utilizar SQLOLEDB).
Registro con regsvr32 MSDASQL.DLL y SQLOLEDB.DLL

Si establezco una conexion utilizando SQLOLEDB:

Provider=SQLOLEDB.1;Initial Catalog=dtstore;Data
Source=SERVERDT;UID=sa;PWD=pwdxx8;

me aparece el fatidico error, pero si arranco el programa y primero utilizo
esto:

Provider=MSDASQL;Driver={SQL
Server};Database=ArchiMED;Server=SERVERDT;UID=sa;PWD=pwdxx8;

Luego, cierro el recordset utilizado y la conexion y sin salir del programa
utilizo el Provider=SQLOLEDB me funciona hasta que salgo del programa.

Agradeceria cualquier comentario de quien haya experimentado este error y
como lo ha solucionado.

Preguntas similare

Leer las respuestas

#1 Victor Koch
14/10/2008 - 15:47 | Informe spam
Hola,

Seria bueno que nos muestres el código fuente que usas para abrir la
conexión a la base de datos.
En principio te diría que pruebes con este string de conexion:

Provider=SQLOLEDB;Data Source=SERVERDT;Initial Catalog=dtstore;User
ID=sa;Password=pwdxx8;

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
Mostrar la cita
#2 Jaime Palli
16/10/2008 - 12:17 | Informe spam
Gracias Victor,

Como este problema me daba en direrentes clientes, he hecho un pequeño
programa en Visual Basic para probar strings de conexion. Me he dado cuenta
que en alguno de las pruebas poniendo "User Id" en vez de "UID" funcionaba.
A pesar de que ya lo he cambiado, no deja de extrañarme cuando el programa
lleva mas de tres años funcionando utilizando sin problemas "UID".

Por otra parte, esto no ha sido suficiente para solucionarlo.
Al final he utilizado FileMon para ver que pasaba cuando se hacia la llamada
a la conexion y me he dado cuenta de que empezaban a ocurrir errores a
partir de la carga de WS2_32.DLL. Investigando he visto que esta DLL tambien
se copia en la instalacion de mi programa a la carpeta donde se instala el
programa, porque la utilizo para enviar automaticamente emails.
Como que cuando el sistema busca DLLs empieza en buscarlas en el directorio
del programa, cargaba esta en vez de la que hay en winnt\system32 y esta dll
era mas nueva de la que esperaba el sistema en Windows 2000. He borrado esta
dll de mi directorio y a partir de entonces ya me ha funcionado.

Espero de que esta solucion sirva para otros que se encuentren con este
mismo problema. En particular, el programa FileMon me ha sido de mucha
utilidad en este caso.




"Victor Koch" <v i c t o r (arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:%
Mostrar la cita
#3 Victor Koch
16/10/2008 - 14:35 | Informe spam
Hola Jaime,

El orden de búsqueda de las dll es: primero en la carpeta de la aplicación
que la llama, si no existe entonces se busca en Windows/System.

Por otro lado UID y PWD se usan cuando se hace una conexion con DSN, pero si
usas el proveedor OLEDB nativo para MSSQL la forma correcta es User ID y
Password.

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida