¿Hay límites en consultas a SQL Server desde una Macro EXCEL?

Actualmente ando metido en un pequeño proyecto para poder extraer datos de una BBDD externa en SQL Server. Un excel hace todo el trabajo. Se conecta con el servidor y ejecuta la query para bajar los datos. La BBDD es amplia y consta de muchas tablas y campos con bastantes registros.

He encontrado por la red un código en VBA que sirve para lo anterior. Lo he incluido en mi libro de excel y ¡EUREKA!. Funciona. Realiza la conexión y extrae datos.

Sin embargo en las pruebas que he realizado, no son todo alegrías. Parece tener algunas limitaciones. Por un lado tengo la impresión de que cuando la tabla tiene muchas columnas da error "Ha ocurrido un error: Error definido por la aplicación o el objeto". Cuando hago una select limitando el número de campos a extraer, funciona.

Por otro. No consigo dar con la sintaxis correcta de "join" para hacer una llamada uniendo varias tablas.

¿Alguien sabe si hay y cuales son las limitaciones de estas operaciones de SQL?

1 respuesta

Respuesta
1

¿Y qué error y/o errores exactamente te da y usando qué sentencias?

Comenta

Abraham Valencia

¡No puedo responder, me dice que hay un error y que lo intente más tarde!

Hola Abraham.

La sentencias son sencillas, por ejemplo esta: "select top 1000 * from tabla". Sin embargo si de esa misma tabla saco solo un número de campos (originalmente tiene 37), por ejemplo 10, si me ofrece datos.

El error siempre es el mismo "Ha ocurrido un error: Error definido por la aplicación o el objeto".

También he intentado hacer una extracción con campos de dos tablas, mediante join. Pero siempre me dice que no está bien escrito. La query sería "select TablaPrincipal.IdConcurso, Tabla2.IdCliente from Concursos join [Tabla2] on TablaPrincipal.IdConcurso=[Tabla2].[IdConcurso]" En este caso el error es: "Ha ocurrido un error: Incorrect syntax near the  keyword 'join'"

Y el código que uso es este:

Function Ejecutar()
On Error GoTo ErrorHandler
Dim cn As Object
' crea un objeto Connection
Set cn = CreateObject("ADODB.Connection")
' IMPORTANTE: Indicar la cadena de conexión a usar
Sql = "select top 1000 * from concursos"
servidor = "MiServidor"
base = "MiBaseDeDatos"
Usuario = "MiUsuario"
pass = "MiPassword"
Conexion = "Provider=SQLOLEDB.1;" & _
"Password=" & pass & ";" & _
"Persist Security Info=True;" & _
"User ID=" & Usuario & ";" & _
"Initial Catalog=" & base & ";" & _
"Data Source=" & servidor
cn.ConnectionString = Conexion
' variable para al rec de ado
Dim rst As Object

...y me falta más código, pero no soy capaz de enviarlo. Me da error...

' abre la conexión a la base de datos
cn.Open
' crea un nuevo objeto recordset
Set rst = CreateObject("ADODB.Recordset")
' Ejecuta el sql para llenar el recordset
rst.Open Sql, cn, 1, 3

No puedo. Debe haber algún carácter prohibido en el código que quiero pegar...

Solucionado el problema de sintaxis del JOIN. Faltaba un espacio tras el salto de línea... Ej, Ej, lo siento, era una cosa muy tonta...

En cuanto a los límites... Eso no lo he solucionado.

No me queda claro el error, quizá revisar bien tu sentencia SQL en el caso del TOP, fácil y por ahí hay un error de sintaxis como lo que te ha ocurrido con el JOIN. Igual comenta si con TOP 5 o TOP 10 te sucede lo mismo.

Abraham Valencia

Ok. Gracias.

Continúo haciendo pruebas. He quitado el TOP y creo que va funcionando. Mañana continuaré chequeando y ya os contaré.

Suerte, nos vas contado.

Abraham Valencia

Bueno. Al final creo que debe haber algún límite en cuanto al número de campos que se puedan extraer, pero no me afecta, por que mi query no saca tantas columnas. Pero ahí lo dejo, por si alguien tiene este problema, que valore esta posibilidad.

No puedo dedicar mucho más tiempo a investigarlo, de momento.

Gracias por vuestra ayuda.

No tengo, en este momento, una base de datos en SQL Server como para probar pero, y disculpa mi terquedad, sigo creyendo que es algo en la sintaxis jejeje. No olvides que las sentencias SQL no son "universales", tiene cierta variación si usas Access o SQL Server o MySQL o etc. Bueno, a ver si en algún momento igual salimos de la duda.

Un abrazo

Abraham Valencia

Puede que tengas razón, Abraham. De hecho estuve atascado todo un día por un simple espacio. En cuanto termine el proyecto (espero que sea esta semana) haré algunas pruebas para ver si es una cuestión de límites o de sintaxis. Pero lo cierto es que cuando comencé a lanzar query's de prueba (del tipo select * from...) me salía el error que comenté arriba. Actualmente el proyecto selecciona una serie de campos determinados (en lugar de "*") y no tengo problemas. De hecho estoy entusiasmado con los resultados. 

No obstante aún no lo he terminado. No descartéis alguna que otra pregunta más... je, je...

Saludos.

Jejejej, ya nos irás contando.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas