ADO / SQL Like or NOT Like That is the Question !

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir à tous et particulièrement à mes copains 'ADO' ;)

Bon je sèche un peu car je cherche la syntax pour utiliser l'Operator LIKE en sens opposé, c'est à dire NE Contient PAS dans une requête ADO...

Voici un extrait du Code :

Option Explicit
Option Compare Text


Sub ImportDataBaseTBConso()
Dim Source As ADODB.Connection
Dim ADOQuery As ADODB.Recordset
Dim SQLString As String, SQLString2 As String, SQLString3 As String
Dim SQLString4 As String, SQLString5 As String, SQLString6 As String
Dim Codof As String, NamOf As String
Dim Maplage As Range
Dim i As Integer



Set Source = New ADODB.Connection

With Source
    .Provider = 'Microsoft.jet.OLEDB.4.0;'
    .Properties('Jet OLEDB:Database Password') = Passworld
    .Open PathDBase & 'Access_DB.mdb'
End With
 

SQLString = 'SELECT LILEDG,LICLOC,Sum(LIMLOC),Sum(LIMDOL),LENLED,LICTYP,Sum(LIMCUR) FROM Running_Exps'
SQLString3 = 'LILEDG BETWEEN ''23000'' AND ''23999'''
SQLString4 = 'LIOFFI='
SQLString5 = 'GROUP BY LILEDG,LICLOC,LENLED,LICTYP,LICODE,LICANS,LICURR'

 
'La question est de pouvoir demander NE CONTIENT PAS '*R'
SQLString6 = 'LILETR LIKE
'%*R%''


'ne fonctionne pas !!!
'SQLString6 = 'LILETR LIKE ''[?R#-?R#]'''
'SQLString6 = 'LILETR NOT LIKE '*R#''


'REQUETE TEST...
Set ADOQuery = Source.Execute(SQLString & ' WHERE ' & SQLString6 & ' ' & SQLString5)

'...etc le rest avec le RecordSet...



Si quelqu'un connaissait la Syntax, ça me ferait gagner un certain temps, car avec mon collègue on a cherché sans avoir trouvé encore...

Bonne Soirée et merci d'avance à tous
[ol]@+Thierry[/ol]
 

Jacques87

XLDnaute Accro
Bonsoir Thierry

Selon ma bible (toujours VBA Acces) la négation de LIKE est bien NOT LIKE

voila ce qu'on me dit

LIKE

permet de faire des recherches à l'intérieur d'une chaîne de caractères
% : est utilisé pour représenter une chaîne de caractère de longueur quelconque.
_ : est utilisé pour représenter un caractère unique.

La syntaxe est : LIKE 'Chaîne de recherche' a pour négation NOT LIKE 'Chaîne de recherche'

En souhaitant que ça te permettra d'avancer
 

pierrejean

XLDnaute Barbatruc
bonjour thierry

je vous le donne pour ce que cela vaut:

c'est le mode sql d'une requete Access qui fonctionne

SELECT [Table1].[essai]
FROM Table1
WHERE ((([Table1].[essai]) Not Like '*R*'));

en esperant que vous pourrez en tirer quelque chose
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Jacques, Pierre Jean, Michel, Didier, le Forum

Mes chers amis, tout d'abord merci à vous tous d'avoir consacré un peu de votre temps pour consulter et répondre à mon Post.

En effet Didier, le '*[!R]' devrait théoriquement répondre au 'NOT LIKE' proposé par Jacques...

Mon cher Michel, le Format est en fait du Texte en mode export d'un AS400 vers Access, retraité par la requête ADO ci-dessus... La String '*R' est en fait un 'Tag' généré dans un champs pour des écritures automatique de report de balance...

Le principe du programme est de pouvoir pûrement et simplement ignorer ces reports selon des options choisies basées sur le degrés de détails voulus par l'utilisateur...

Sinon le lien que tu as mis gentillement ne passes pas chez moi Michel.

Pour le Reste, je ne suis pas en mesure de chez moi pour tester toutes vos symapathiques Propositions notamment celle de Pierre-Jean que, je crois, nous n'avons pas testé; mais mon ami et collègue de travail que je vous présente 'Stéphane' va tester tout ceci et ne manquera pas de vous tenir informé!

En tout cas je vous remercie tous très sincèrement, c'est très motivant de se retrouver du coté des 'demandeurs' ;)

Bonne nuit, enfin plutôt journée je pense ;)
[ol]@+Thierry[/ol]
 

Solenfou

XLDnaute Nouveau
Bonjour le Forum, Jacques87, pierrejean, MichelXld, myDearFriend et _Thierry.

Tout d'abord merci pour vos differentes propositions de syntaxe mais pour le moment aucune ne me donne le résultat escompté.

Pour le moment, j'ai trouvé une alternative mais ce n'est pas réelement ce que je recherche:
Le champs LILETR comme l'explique _Thierry est un tag qui est utilisé pour le lettrage des écritures comptables et pour le tag automatique lors des écritures de fin d'année pour les reports de balance.
Actuellement ce champs est vide ou bien contient la fameuse expression '*R1','*R2','*R3'... selon le nombre de documents comptables générés pour ces reports de balance.

Ma solution 'intermédiare' est donc de dire que mon champs est soit vide, soit contient '*R'.
Donc selon les besoins de l'utilisateur d'exclure ces données, la syntaxe sera :

SQLString6='LILETR IS NULL'

Par conséquent pour les inclure on n'utilisera évidement pas l'expression SQLString6

Mais si le champs LILETR n'est pas vide je ne suis pas sûr que les données exclues soient du type '*R*'. Dans ce cas le résultat de ma requête sera incomplet.

Je vais continuer à chercher de mon côté et vous tiendrai informés.

Bonne journée
Solenfou
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Hello Solenfou !!! Bpnjour le Fil

Welcome sur XLD ;) 'Solenfou'
Bienvenue_XLD.gif


Donc je vous confie mon collègue et ami ;)

Bon Appétit
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 16/03/2006 13:21
 

MichelXld

XLDnaute Barbatruc
bonsoir à tous

je ne comprends pas bien ce que contient le champ LILETR : l'astérique * est aussi un des caracteres ?

si c'est la cas , il me semble qu'il faut le mettre entre crochets car c'est un caractere spécial

SQLString6 = 'LILETR LIKE '[*]R#''

à tester aussi (sans les quotes) :

SQLString6 = 'LILETR LIKE [*]R#'

# , si le caractere suivant le R est numerique


bonne soirée
MichelXld
 

Solenfou

XLDnaute Nouveau
Bonsoir à tous,

MichelXld, le champ LILETR contient l'astérisque '*' ,la lettre 'R' et un numéro: *R1 par exemple.

Le problème est que cette zone pourrait aussi recevoir un lettrage automatique d'écritures sur le format A ou AA ou AAA.

Je vais préparer une petite base access avec quelques données, ce sera plus clair je crois.
Je la posterai seulement demain car j'ai plus d'internet à la maison en ce moment: Freebox hs !!!

Merci à tous et à demain.

Solenfou
 

MichelXld

XLDnaute Barbatruc
bonsoir à tous

ci joint une synthaxe qui fonctionne chez moi ( Excel2002 ; WinXP & ADO 2.5 )

SQLString6 = 'LILETR NOT LIKE '[*]R%'' 'ne commence pas par *R
SQLString6 = 'LILETR LIKE '[*]R%'' 'commence par *R
SQLString6 = 'LILETR LIKE '[*]R1'' ' = *R1
SQLString6 = 'LILETR NOT LIKE '[*]R1'' 'différent de *R1



à tester dans les fichiers joints


bonne soirée
MichelXld [file name=requeteLike_caracteresGeneriques.zip size=21717]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/requeteLike_caracteresGeneriques.zip[/file]
 

Pièces jointes

  • requeteLike_caracteresGeneriques.zip
    21.2 KB · Affichages: 193

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour cher ami Michel, le Fil, le Forum

Et bien je pense que 'SolenFou' va être comblé, tu es vraiment fantastique Michel, bosser pratiquement jusqu'à minuit 01 pour ce problème en fabriquant même le fichier !

Quand j'ai 'introduit' mon collègue et ami sur XLD je lui avais promis qu'une réponse lui serait provulguée, car je savais que the 'Michels Gang' allaient sévir !!!

Merci à toi Michel 'Bug's Bunny' pour les intimes et anciens ;)


Je pense que la solution pour Stéphane sera avec cette ligne là :
SQLString6 = 'LILETR NOT LIKE '[*]R%'' 'ne commence pas par *R

Ce devrait répondre à sa problématique de report automatiques de notre AS400.

Ce qui est troublant quand même c'est cette ligne là :
'SQLString6 = 'LILETR NOT LIKE '[*]R1'' 'différent de *R1

Qui fonctionne très bien pour 'éradiquer' les enregistrement qui contiennent *R1

Mais si je me base sur la même chose pour faire ceci :

SQLString6 = 'LILETR NOT LIKE '[*]R'' 'différent de *R

Et bien, on remonte tous les 10 enregistrements de base MDB sans distinction...

Mais comme je disais, ce n'est pas grave puisque notre système 'Tag' les écritures avec cette String qui commence par *R et donc tu nous a donné la solution.

Merci à toi Michel et Excellent Week End à tous et toutes
[ol]@+Thierry[/ol]


[ol]EDITION !!![/ol]

Ok pour finaliser, j'ai fait différent tests et j'ai trouvé ceci :
SQLString6 = 'LILETR NOT LIKE '%[*]R%'' 'différent de *R

Là on a un Vrai NE CONTIENT PAS *R

Encore merci Michel, mon dernier jour de boulot avant ITT se finira bien grace à toi !

Message édité par: _Thierry, à: 17/03/2006 08:19
 
S

Solenfou

Guest
Bonjour le Forum, MichelXld et _Thierry

Tout d'abord merci de vous mettre 'en quatre' à des heures pas possibles pour m'aider, c'est vraiment super.

Vos syntaxes sont très interessantes et vont certainement pouvoir répondre à ce que je recherche. Il faut que je les teste.


Merci à tous


Solenfou
 

Solenfou

XLDnaute Nouveau
Bonjour le Forum, _Thierry, MichelXld

Après quelques jours je 'Réanime' un peu ce poste.

En effet, la syntaxe de MichelXld finalisée par _Thierry était:

SQLString6 = 'LILETR NOT LIKE '%[*]R%'' 'différent de *R
NOT LIKE ne remontait donc pas les enregistrements de la base de démo qui contenaient *R

Le hic c'est que ma table est créée automatiquement par DataSet Vision qui exporte tous les champs demandés contenus dans un IBM iSeries et certains de ces champs sont vides.


Donc pour extraire TOUS les enregistrements ne contenant pas *R il faut la syntaxe suivante.

SQLString6 = 'LILETR NOT LIKE '%[*]R%' OR LILETR IS NULL'

Merci à tous pour votre aide.

Solenfou
 

Statistiques des forums

Discussions
312 266
Messages
2 086 655
Membres
103 354
dernier inscrit
roukhein