Acceso de Access a SQL Server

Hola:
Estoy accediendo desde Access 2003 vía ODBC a una BBDD de SQL Server 2005. Anteriormente accedía a una BBDD de Access pero cambiamos el servidor.
Hago una operación que es de borrado selectivo de una serie de registros de una tabla ejecutando una SQL del tipo "DELETE * FROM tblData WHERE Year = 2009 AND Month = 4;". Cuando lo hacía en Access tardaba menos de un minuto (para unos 300 mil registros en una tabla de unos 4,5 millones de registros). Al hacerlo con la tabla linkada del SQL Server vía el ODBC tarda unos 17 minutos. La misma SQL ejecutada directamente en el servidor de SQL Server (no desde el access vía ODBC) tarda unos 8 segundos.
El caso es que necesito hacerlo desde el Access porque a continuación le cargo unos datos a la propia tabla desde otra tabla que tengo en Access. ¿Qué puedo hacer para mejorar el rendimiento? ¿Cuál es el problema? ¿Le puedo mandar de alguna manera la SQL para que se ejecute en el servidor y, si es así, cómo me entero cuando acaba?
Gracias anticipadas si me podéis ayudar.

1 respuesta

Respuesta
1
Desde Access, creo, que no se puede, pero si puedes hacerlo desde visual basic (no desde el visual de access). Lo que tienes que hacer es un procedimiento en sql server y lanzarlo desde el visual así solucionas el tema de la rapidez.
Te pego un código que te podría valer:
Dim SpcODBC As Workspace, Sele1 As Recordset, conEdits As Connection, qdf As QueryDef
Set SpcODBC = CreateWorkspace("", "user", "pass", dbUseODBC)
Set conEdits = SpcODBC.OpenConnection("odbcsql", , , "ODBC;DATABASE=xxxxxxx;UID=user;PWD=pass;DSN=xxxxxxxx")
conEdits.QueryTimeout = 60
Set qdf = conEdits.CreateQueryDef("")
TxtSQL = "exec procedimiento " + param1.text + "," + param2.text
qdf.SQL = TxtSQL
qdf.Execute
Set Sele1 = qdf.OpenRecordset(dbOpenSnapshot)
If Err.Number <> 0 Then MsgBox "La actualizacion ha sido errónea " + Err.Description + Str(Err.Number)
Qdf. Close: conEdits. Close: SpcODBC. Close
Gracias. Supongo que es un buen camino.
Al final, no obstante, he hecho una consulta de paso a través que se ejecuta directamente en el servidor de SQL Server. Para los WHERE lo que he hecho es que la consulta se lanza desde código visual basic en access y previamente le cambio la definición SQL a la consulta.
Finalizas o la descarto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas