Longueur d'une instruction SQl

Le
touriste
Bonjour,

En DAO 3.6 je cherche une methode me permettant de vérifier qu'une
requête compilée si elle existe, contient l'instruction définie par le
code. Exemple:

Dim rq As QueryDef
Dim rst As Recordset
Dim sql$

sql$ = "PARAMETERS nomcomm Text;" _
& " SELECT Commune.NomCom, Commune.CodeInsee, Commune.ID_Commune,
Commune.Raster" _
& " From Commune" _
& " WHERE (((Commune.NomCom) Like ([nomcomm])));" _



Set mBase = DBEngine.Workspaces(0).OpenDatabase(mNomBase.nomcomplet)
Err.clear
On Error Resume Next
Set rq = mBase.CreateQueryDef("RQ_NomCommune", sql$)

if err.number<>0 then

if len(sql$) = len(mBase.QueryDefs("RQ_NomCommune").sql) then

'même longueur = même instruction on ne fait rien (je simplifie)
else
' pas la même longueur donc on remplace
mBase.QueryDefs.Delete ("RQ_NomCommune")
Set rq = mBase.CreateQueryDef("RQ_NomCommune", sql$)

end if
On Error GoTo 0

Set rq = mBase.QueryDefs("RQ_NomCommune")

rq.Parameters("nomcomm") = nomcom

Set rst = rq.OpenRecordset

If Not (rst.EOF And rst.BOF) Then



Else



End If

Set rst = Nothing
Set rq = Nothing


Mais pb la chaîne SQL que je donne et celle contenue dans la BD ne sont
pas les mêmes, celle dans la BD contient des Chr(10) & Chr(13) et en
plus au niveau des paramètres il rajoute ( 255 ) pour le paramètre type
text .

Bref existe-t-il une règle bien définie me permettant de connaitre la
valeur à ajouter à len(sql) pour pouvoir faire la comparaison, ce qq
soit le type de chaîne SQL.

Christophe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jean-marc
Le #15393901
"touriste" news:46f1456c$0$5113$
Bonjour,




Mais pb la chaîne SQL que je donne et celle contenue dans la BD ne sont
pas les mêmes, celle dans la BD contient des Chr(10) & Chr(13) et en plus
au niveau des paramètres il rajoute ( 255 ) pour le paramètre type text
....

Bref existe-t-il une règle bien définie me permettant de connaitre la
valeur à ajouter à len(sql) pour pouvoir faire la comparaison, ce qq soit
le type de chaîne SQL.



Non, en tout cas rien de doumenté de façon fiable.

Une solution possible est de "normaliser":
Tu "normalises" ta chaine et la chaine de la DB, comme ça:
- ne garder que les caractères entre 32 et 127
- Si 2 blancs consécutifs, un seul blanc (et répéter)
Ensuite, tu compares.

Ceci marche très bien, avec n'importe quelle genre de chaines.

La seule chose, c'est que ça présuppose que les requêtes ne
contiennent que de l'US-ASCII 7 bits ([0-127]) et pas de
caractères fantaisistes genre "è", "ê", "à", etc.

Ca doit normalement être le cas puisqu'aucun vrai programmeur
n'aurait jamais l'idée saugrenue de mettre autre chose que
de l'ascii dans une requete SQL :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
touriste
Le #15393891
Merci pour les infos,

je vais tentez de normaliser, pour l'instant j'avais songer à effacer
toutes les requêtes d'une BD en fonction de la date de la BD et celle du
logiciel l'utilisant.

Concernant ta réponse sur les threads indépendants, merci. La principale
différence est que le Thread est modal dans mon cas.

A+

Christophe



jean-marc a écrit :

"touriste" news:46f1456c$0$5113$

Bonjour,





Mais pb la chaîne SQL que je donne et celle contenue dans la BD ne sont
pas les mêmes, celle dans la BD contient des Chr(10) & Chr(13) et en plus
au niveau des paramètres il rajoute ( 255 ) pour le paramètre type text
....

Bref existe-t-il une règle bien définie me permettant de connaitre la
valeur à ajouter à len(sql) pour pouvoir faire la comparaison, ce qq soit
le type de chaîne SQL.




Non, en tout cas rien de doumenté de façon fiable.

Une solution possible est de "normaliser":
Tu "normalises" ta chaine et la chaine de la DB, comme ça:
- ne garder que les caractères entre 32 et 127
- Si 2 blancs consécutifs, un seul blanc (et répéter)
Ensuite, tu compares.

Ceci marche très bien, avec n'importe quelle genre de chaines.

La seule chose, c'est que ça présuppose que les requêtes ne
contiennent que de l'US-ASCII 7 bits ([0-127]) et pas de
caractères fantaisistes genre "è", "ê", "à", etc.

Ca doit normalement être le cas puisqu'aucun vrai programmeur
n'aurait jamais l'idée saugrenue de mettre autre chose que
de l'ascii dans une requete SQL :-)



Publicité
Poster une réponse
Anonyme