Access, VBA. Variable String con mayor de 255 caracteres para expresión SQL

Me encuentro con el problema de que al realizar una expresión sql a través de VBA, la variable que lo almacena es mayor de 255 caracteres y la expresión se me trunca y falla la ejecución de la consulta.

Se agradece cualquier ayuda.

Respuesta
1

Me parece muy raro lo que comentas, pues yo tengo trabajado con variables de texto que contienen cadenas SQL de más de 700 caracteres (y acabo de probar con una que tiene exactamente 764) y me funciona sin problemas...

¿Puedes poner el código que usas, a ver si el problema está en la construcción de la cadena y no en su longitud?

Era una variable string strSQL que contenía SELECT, un listado de campos, declaración del FROM y condiciones WHERE para hacer un OpenRecordset mediante DAO.

Me daba errores porque no reconocía la parte de la declaración de la consulta y descubrí que se truncaba en el carácter 255... atajé por el camino de en medio y en lugar del listado utilice asterisco. Es menos selectivo pero funciona.

Googleando un rato parece que es algo común.

Más tarde me he encontrado con el mismo caso y lo que he hecho es concatenar varias variables string en la declaración del Openrecordset. De momento parece que me va bien.

Si ves que hay algo que estoy considerando mal por favor indícamelo para seguir aprendiendo.

Gracias por todo! 

Me alegra ver que lo has solucionado, pero aún así me sigue pareciendo raro que te corte la cadena SQL.

Yo acabo de probar este código (con la SQL de los 700 caracteres y me lista perfectamente todos los registros):

Dim rst As DAO.Recordset
Dim miSQL As String
miSQL = "SELECT TAlumnos.IDAlumno, TMatriculas.IDMatricula, [Apellidos] & ' ' & [Nombre] AS Alumno, " _
        & "TAlumnos.Tutor, TMatriculas.FechaMatricula, fncTasaMatricula([FechaMatricula]) AS Matricula, " _
        & "fncTasaCurso([Curso],[SegunInstrum],[Col01],[Col02],[Col03],[Col04],[Col05],[Col06],[Col07],[Col08]) AS Materias, " _
        & "IIf([Bonificacion]=2,'FN',IIf([Bonificacion]=3,'VM',IIf([Bonificacion]=4,'CE',Null))) AS Bon, " _
        & "fncImpBonificacion([Bonificacion],[Materias])+fncImpBonMat([Bonificacion],[Matricula]) AS Descuento, " _
        & "IIf([FormaPago]=2,'X',Null) AS Fracciona, [Nombre] & ' ' & [Apellidos] AS AlumnoInf, TMatriculas.Baja, " _
        & "[Matricula]+[Materias]+[Descuento] AS Total " _
        & "FROM TAlumnos LEFT JOIN TMatriculas ON TAlumnos.IDAlumno = TMatriculas.Alumno " _
        & "WHERE ((Not (TMatriculas.IDMatricula) Is Null) AND ((TMatriculas.Baja)=False));"
Set rst = CurrentDb.OpenRecordset(miSQL)
rst.MoveFirst
Do Until rst.EOF
    Debug.Print rst("Alumno") & " - " & rst("Matricula")
    rst.MoveNext
Loop
rst.Close

Por casualidad, ¿tu SQL tendrá nombres con caracteres "extraños", espacios en blanco, comillas dobles....? Porque puede que el problema venga por ahí... Fíjate que mi SQL tiene comillas simples (por ejemplo aquí  IIf([FormaPago]=2,'X',Null) ), y si la SQL la pongo en el Diseñador de consultas, me aparece como IIf([FormaPago]=2,"X",Null), es decir, con comillas dobles. 

En cuanto a los nombres con espacios, acentos... debes ponerlos entre corchetes.

A ver si eso te da alguna pistilla de qué puede estar pasando.

No sé qué me pasaba, el caso es que volví a hacer la prueba con variable string de más de 255 y me funcionó... Por lo que interpreto que algo estaba declarando mal en el SQL.

Muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas