Vfp+sql server

Trabajo con conexiones a sql server desde vfp. Tengo un problema con la sentencia SQLEXEC:

Si ejecuto

cmd2 = SQLEXEC(lnhandle, "select * FROM dbo.nombre1$nombre2 ","lin2") me funciona perfectamente

El problema es que tengo tablas con nombres que incluyen guión bajo ("_"), y con esas tablas me falla.

He probado con corchetes:

cmd2 = SQLEXEC(lnhandle, "select * FROM [dbo].[nombre1$nombre2]","lin2")

Y soluciono el caso en el que nombre2 contenga espacios en blanco, pero no aquellos en los que nombre2 tiene un guion bajo; la tabla en cuestión es "no_series", con lo que la consulta sería

cmd2 = SQLEXEC(lnhandle, "select * FROM [dbo].[nombre1$no_series]","lin2")

Pero no me funciona.

¿Alguien sabe como forzar para que entienda ese carácter especial?

Por si es necesario la base de datos es sql server 2008 r2 y el driver sql server es el 6.01.7601.17514

1

1 respuesta

Respuesta
1

¿Nombre1 es el nombre de tu base de datos? Porque no entiendo que logras con nombre1$no_series, hasta donde se y he hecho pues no necesitas especificar la base de datos si en la conexion ya haces referencia a eso solo deberias hacer referencia a la tabla osea select * from no_series y en teoria no te deberia dar problemas

La estructura de la base de datos ya está creada y no puedo meter mano, es de navision y tengo que acceder a la misma; una de las tablas se llama "dbo.nombre1$nombre2"

si accedo mediante nombre1$nombre2 también funciona, pero solo a nombre2 o a $nombre2 no

No controlo de sql server, solo me veo obligado a realizar unas consultas y no me funcionan en los casos en que nombre2 tiene algún "_"

Cualquier sugerencia se agradece

Gracias por tu tiempo

Claro osea la idea no es modificar estructura de la tabla, ¿pero dime te funciona si solo pones el nombre de la tabla? ¿Osea nombre2?

no, no funciona de esa forma

Es que según yo desde ahí parte el problema desde la cadena de conexión porque si en el odbc tu especificas que vas a usar la base de datos nombre1 pues ya al momento de hacer una consulta no es necesario indicar la base, salvo que en sql 2008 r2 lo haga de esa manera, yo hice una aplicación con sqlserver 2007 y podía sin ningún problema hacer ese tipo de consultar sin ninguna restricción con los nombres de tablas y también usaba tablas con guion en los nombres, de pronto seria ver por el lado del odbc haber si algo se puede hacer, otra alternativa aunque no creo que sea eso es que armes la cadena que envías al sql en una variable string

cconsulta = "select * from nombre1$no_series"

cmd2 = sqlexec(lnhandle,cconsulta,"lin2")

lo de meter la consulta en una variable string ya lo había probado; tampoco funciona

me imagino que tiene que haber algún símbolo de escape en el que le diga que fuerce a que el carácter "_" (que es reservado para sql server) lo coja literalmente pero no consigo encontrar la forma

El problema es que con cualquier nombre de tabla me funciona (incluso si lleva espacios en blanco) salvo cuando el nombre contiene ese carácter especial

pero haber si el carácter _ es reservado para sqlserver entonces no te debió haber permitido crear una tabla con ese carácter así que el tema debe pasar por otro lado, yo hasta donde he visto en sqlserver 2000 para hacer referencia a una tabla solo pones [dbo].[nro_series] y debería salir sin problemas, fuera de eso no te podría dar alguna otra solución.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas