OleDb, Access, SQL del Access y SQL 92

02/08/2005 - 17:21 por manuel Gomez | Informe spam
Buenas:
Comencemos que estoy con una aplicación que lee de Access las consultas
que tiene almacenadas, las ejecuto y las muestro. Bien, eso hago pero ahora
tengo un pequeño problema, si uso SQL de Access (Ej: SELECT * FROM tabla
WHERE campo LIKE "*valor*";) el OleDb pasa de la consulta (o la excepción),
sin embargo usando el SQL 92 (Ej: SELECT * FROM tabla WHERE campo LIKE
"%valor%";) el OleDb la ejecuta, pero el Access pasa de ella (o la
excepción, aqui ya me supera ACCESS).
He pensado en una instrucción que me sustituya el * por % mediante una
expresión regular, pero me da que cuando la ejecute el sistema se vaya al
carajo (SELECT % , o SELECT nombre FROM tabla WHERE campo LIKE
"*valor%"; (había una expresión que sustituia a partir de la segunda,
tercera,... ocurrencia desde el inicio o el final)) y cambiar las queries en
Access no puedo, puesto que estas se estan utilizando.

Muchas gracias.
 

Leer las respuestas

#1 manuel Gomez
04/08/2005 - 18:44 | Informe spam
Buenas:
Ya me respondo a mi mismo, visto que tanto MVP, MSP, etc.. de Microsoft
no vieron que les estaban preguntando como hacer que un SQL de EDUCACIÓN
ESPECIAL que es el de ACCESS (Desde antes del 95 llevan con el * en los
LIKE) se convirtiese en un SQL estándar para que el OleDB (tambien usa SQL
estándar) entendiese las querys del nuestro ACCESS.
De momento para el asunto que a mi atañe, la cosa es tan sencilla como
utilizar las Expresiones Regulares (que en ciertos libros aseguran que se
inventaron en Ms (y otros dicen que estaban inventadas alla por los 70 o
antes), así como que no había contenido dinámico, ni interactuactuación en
Internet hasta que llego ASP (La Biblia del C# o ASP.NET de Anaya)).

Simplemente el * solo nos interesa quitarlo en Access despues del WHERE,
así que lo que haremos es dividir la cadena con regex.split(query,"WHERE"),
con lo que nos queda un Array con 3 elementos:
[0] -> "SELECT "
[1] -> "WHERE"
[2] -> "condiciones varias del WHERE, ORDER, etc...";
Lo siguiente es reemplazar el *`por % con
elemento_split[2].replace("*","%") y por último juntarlo todo en una cadena,
bien con un foreach o con el método tradicional de +.

Con este método lo que hacemos es que si hay un SELECT * en una de las
consultas no sustituirlo por %.

Un saludo

P.D. Lo hubiese hecho esto en cualquier SO que no fuese MS-Windows, pero
Access solo existe en MS-Windows.
"manuel Gomez" escribió en el mensaje
news:rcMHe.2647707$
Buenas:
Comencemos que estoy con una aplicación que lee de Access las consultas
que tiene almacenadas, las ejecuto y las muestro. Bien, eso hago pero
ahora tengo un pequeño problema, si uso SQL de Access (Ej: SELECT * FROM
tabla WHERE campo LIKE "*valor*";) el OleDb pasa de la consulta (o la
excepción), sin embargo usando el SQL 92 (Ej: SELECT * FROM tabla WHERE
campo LIKE "%valor%";) el OleDb la ejecuta, pero el Access pasa de ella (o
la excepción, aqui ya me supera ACCESS).
He pensado en una instrucción que me sustituya el * por % mediante una
expresión regular, pero me da que cuando la ejecute el sistema se vaya al
carajo (SELECT % , o SELECT nombre FROM tabla WHERE campo LIKE
"*valor%"; (había una expresión que sustituia a partir de la segunda,
tercera,... ocurrencia desde el inicio o el final)) y cambiar las queries
en Access no puedo, puesto que estas se estan utilizando.

Muchas gracias.


Preguntas similares