Error de compilación y sintaxis

Hola tengo un problema y no se como resolverlo, por más que busco no encuentro la solución.
Tengo una Bdaccess y este es mi código. Al ejecutarlo me da error de compilación y de sintaxis.

Set RcClasificacion = Bd.OpenRecordset("SELECT DISTINCTROW
Equipos. Equipo,
IIf(IsNull([0ECasa].[Partidos]), 0,[0ECasa]. [Partidos])+IIf(IsNull([0EFuera].[Partidos]), 0,[0EFuera]. [Partidos])+IIf(IsNull([0GCasa].[Partidos]), 0,[0GCasa]. [Partidos]*3)+IIf(IsNull([0GFuera].[Partidos]), 0,[0GFuera]. [Partidos]*3) AS Puntos,
Equipos. Variable,
IIf(IsNull([0gcasa].[gcasa]),0,[0gcasa].[gcasa])+IIf(IsNull([0gfuera].[gfuera]),0,[0gfuera].[gfuera])+IIf(IsNull([0ecasa].[gcasa]),0,[0ecasa].[gcasa])+IIf(IsNull([0efuera].[gfuera]),0,[0efuera].[gfuera])+IIf(IsNull([0pcasa].[gcasa]),0,[0pcasa].[gcasa])+IIf(IsNull([0pfuera].[gfuera]),0,[0pfuera].[gfuera])-(IIf(IsNull([0gcasa].[gfuera]),0,[0gcasa].[gfuera])+IIf(IsNull([0gfuera].[gcasa]),0,[0gfuera].[gcasa])+IIf(IsNull([0ecasa].[gfuera]),0,[0ecasa].[gfuera])+IIf(IsNull([0efuera].[gcasa]),0,[0efuera].[gcasa])+IIf(IsNull([0pcasa].[gfuera]),0,[0pcasa].[gfuera])+IIf(IsNull([0pfuera].[gcasa]),0,[0pfuera].[gcasa])) AS GolAvg,
Equipos.Anotacl,
[PGC]+[PGF]+[PEC]+[PEF]+[PPC]+[PPF] AS Jugados,
IIf(IsNull([0GCasa].[Partidos]),0,[0GCasa].[Partidos]) AS PGC,
IIf(IsNull([0GFuera].[Partidos]),0,[0GFuera].[Partidos]) AS PGF,
IIf(IsNull([0ECasa].[Partidos]),0,[0ECasa].[Partidos]) AS PEC,
IIf(IsNull([0EFuera].[Partidos]),0,[0EFuera].[Partidos]) AS PEF,
IIf(IsNull([0PCasa].[Partidos]),0,[0PCasa].[Partidos]) AS PPC,
IIf(IsNull([0PFuera].[Partidos]),0,[0PFuera].[Partidos]) AS PPF,
IIf(IsNull([0gcasa].[gcasa]),0,[0gcasa].[gcasa])+IIf(IsNull([0gfuera].[gfuera]),0,[0gfuera].[gfuera])+IIf(IsNull([0ecasa].[gcasa]),0,[0ecasa].[gcasa])+IIf(IsNull([0efuera].[gfuera]),0,[0efuera].[gfuera])+IIf(IsNull([0pcasa].[gcasa]),0,[0pcasa].[gcasa])+IIf(IsNull([0pfuera].[gfuera]),0,[0pfuera].[gfuera]) AS GFavor,
IIf(IsNull([0gcasa].[gfuera]),0,[0gcasa].[gfuera])+IIf(IsNull([0gfuera].[gcasa]),0,[0gfuera].[gcasa])+IIf(IsNull([0ecasa].[gfuera]),0,[0ecasa].[gfuera])+IIf(IsNull([0efuera].[gcasa]),0,[0efuera].[gcasa])+IIf(IsNull([0pcasa].[gfuera]),0,[0pcasa].[gfuera])+IIf(IsNull([0pfuera].[gcasa]),0,[0pfuera].[gcasa]) AS GContra
FROM (((((Equipos LEFT JOIN 0ECasa ON Equipos.IdEq = [0ECasa].Equipo) LEFT JOIN 0EFuera ON Equipos.IdEq = [0EFuera].Equipo) LEFT JOIN 0GCasa ON Equipos.IdEq = [0GCasa].Equipo) LEFT JOIN 0PFuera ON Equipos.IdEq = [0PFuera].Equipo) LEFT JOIN 0PCasa ON Equipos.IdEq = [0PCasa].Equipo) LEFT JOIN 0GFuera ON Equipos.IdEq = [0GFuera].Equipo WHERE (((Equipos.Div) = 1))
ORDER BY IIf(IsNull([0ECasa].[Partidos]),0,[0ECasa].[Partidos])+IIf(IsNull([0EFuera].[Partidos]),0,[0EFuera].[Partidos])+IIf(IsNull([0GCasa].[Partidos]),0,[0GCasa].[Partidos]*3)+IIf(IsNull([0GFuera].[Partidos]),0,[0GFuera].[Partidos]*3) DESC , Equipos.Variable, IIf(IsNull([0gcasa].[gcasa]),0,[0gcasa].[gcasa])+IIf(IsNull([0gfuera].[gfuera]),0,[0gfuera].[gfuera])+IIf(IsNull([0ecasa].[gcasa]),0,[0ecasa].[gcasa])+IIf(IsNull([0efuera].[gfuera]),0,[0efuera].[gfuera])+IIf(IsNull([0pcasa].[gcasa]),0,[0pcasa].[gcasa])+IIf(IsNull([0pfuera].[gfuera]),0,[0pfuera].[gfuera])-(IIf(IsNull([0gcasa].[gfuera]),0,[0gcasa].[gfuera])+IIf(IsNull([0gfuera].[gcasa]),0,[0gfuera].[gcasa])+IIf(IsNull([0ecasa].[gfuera]),0,[0ecasa].[gfuera])+IIf(IsNull([0efuera].[gcasa]),0,[0efuera].[gcasa])+IIf(IsNull([0pcasa].[gfuera]),0,[0pcasa].[gfuera])+IIf(IsNull([0pfuera].[gcasa]),0,[0pfuera].[gcasa])) DESC;
Set RcTabla = Bd.OpenRecordset("tabla")
UN saludo y muchas gracias

1 Respuesta

Respuesta
-1
Lo primero de todo: para tratar el valor nulo de un campo/variable es mejor que uses la función nz().
En lugar de poner: IIf(IsNull([0ECasa].[Partidos]), 0,[0ECasa].[Partidos])
Es más sencillo poner: nz([0ECasa].[Partidos], 0)
Otra cosa. Cuando tienes que construir una consulta tan larga, es preferible hacerlo sobre una variable y a cachos. Esto es:
dim txtSQL as string
txtSQL = "SELECT DISTINCTROW Equipos.Equipo,"
txtSQL = txtSQL & "IIf(IsNull([0ECasa].[Partidos]),0,[0ECasa].[Partidos])+""
txtSQL = txtSQL & "IIf(IsNull([0EFuera].[Partidos]),0,[0EFuera].[Partidos])+"
txtSQL = txtSQL & "IIf(IsNull([0GCasa].[Partidos]),0,[0GCasa].[Partidos]*3)+"
txtSQL = txtSQL & "IIf(IsNull([0GFuera].[Partidos]),0,[0GFuera].[Partidos]*3) AS Puntos,"
txtSQL = txtSQL & "Equipos.Variable,"
...
...
...
txtSQL = txtSQL & "FROM (((((Equipos LEFT JOIN 0ECasa ON Equipos.IdEq = [0ECasa].Equipo) "
...
...
...
txtSQL = txtSQL & "WHERE (((Equipos.Div) = 1)) "
txtSQL = txtSQL & "ORDER BY IIf(IsNull([0ECasa].[Partidos]),0,[0ECasa].[Partidos])+"
...
...
...
Set RcClasificacion = Bd.OpenRecordset(txtSQL)
De esta forma puedes comentar una parte del código y comprobar que funcione bien la consulta.
Por último, y a lo que venías a buscar. Si no me equivoco te falta cerrar las comillas dobles y el paréntesis en el OpenRecordset().
Creo que si quitas el punto y coma que pones después del último 'DESC' (yo no acostumbro a ponerlo) y añades las dobles comillas y el paréntesis cerrado, dejará de darte el error.
Por cierto, lo que te digo lo he visto contando los paréntesis abiertos y cerrados (deberían ser los mismos), corchetes abiertos y cerrados (ídem) y las comillas (deben ser pares). Un comentario por si otro día te ocurre algo parecido.
Yo lo que quiero es mandar una consulta a una tabla.
Si lo que quieres es crear una tabla con el resultado de una consulta, lo que tienes que hacer es crear una 'consulta de creación de tabla'. Su SQL es muy similar:
SELECT .......toda la parrafada...... INTO <nombre de tabla> FROM ....lo que tienes.... WHERE .....
Construye toda la instrucción sobre una variable como te comenté ayer y ejecutala con:
Docmd. Runsql txtSQL
Al ejecutarla te pedirá que confirmes el borrado de la tabla anterior (excepto en la primera ejecución que hagas porque no existe).
No me has comentado si te funcionó.
Si no tienes más que consultar, cierra la pregunta para que no me aparezca entre las pendientes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas