Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Longueur d'une instruction SQl

2 réponses
Avatar
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

2 réponses

Avatar
jean-marc
"touriste" wrote in message
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_' ;
Avatar
touriste
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" wrote in message
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 :-)