IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Ecrire une requête SQL dans BASE insensible aux accents


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Ecrire une requête SQL dans BASE insensible aux accents
    Bonjour à tous, j'espère ne pas trop me tromper en postant ici , c'est assez vaste comme endroit.

    Bon, une recherche sur le net écrire une requête SQL dans BASE insensible aux accents donne comme nombreuses réponses, Collate dans tous les sens :

    Pour ma Table "Artistes" avec son champ "Nom_artiste", pour trouver Faure et obtenir Fauré on me dit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "Nom_artiste" FROM "Artistes" WHERE "Nom_artiste" LIKE  'Faure'  COLLATE utf8_general_ci
    Réponse : Unexpected Token COLLATE

    Une astuce données par ce site http://www.ab-d.fr/date/2008-06-21/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT "Nom_artiste" FROM "Artistes" WHERE "Nom_artiste" LIKE  CONVERT(_utf8 '%Faure%' USING utf8) COLLATE utf8_general_ci
    reponse :
    Erreur de syntaxe dans l'expression SQL


    Bref, après une recherche de plusieurs heures je sèche pour écrire ma requête insensible aux accents DANS libre office


    Je rappelle que je suis dans Libre office et que j'écris ma requête directement avec le logiciel donc, je ne peux pas choisir le type d'interclassement ou autres opérations sur la table elle-même, c'est assez verrouillé.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pas de chance, dans la base de données intégrée de base (HSQLDB 1.8) il n'y a pas de COLLATE.
    Une solution bestiale (grouik ! ) à ton problème serait de remplacer les caractères accentués dans le SQL comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "Nom_artiste" FROM "Artistes" WHERE  UPPER(REPLACE(REPLACE("Nom_artiste", 'é','e'), 'è' , 'e' ) ) LIKE UPPER('%Faure%')
    (on peut rajouter d'autres replace )

    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "Nom_artiste" FROM "Artistes" WHERE  "Nom_artiste" LIKE '%Faur*%')
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Jurassic, c'est ce que j'avais voulu éviter, d'autant que la liste va être longue avec des nom comme Antonín Dvořák , Bartók , Kálmán ou autres accentuations en tout genres.

    Je vais me cogner la traduction de la table ascii pour toutes mes recherches. D'ailleurs c'est pas trop possible, trop de REPLACE imbriqués.

    Je vais sans doute essayer de recopier le champ dans une variable tableau et faire une boucle en basic pour épurer les accents.

    Bon, merci à vous, je suis assez déçue par un truc aussi simple manquant chez libre office.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    j'ai peut-être trouvé une solution à ton problème.
    Je viens de m'apercevoir qu'avec HSQLDB 1.8 on pouvait exécuter dans les requêtes SQL des procédures stockées en java. Donc j'ai cherché une procédure en java qui supprime les accents. Ma recherche a abouti sur la fonction stripAccents qui se trouve dans la bibliothèque Apache Commons Lang de chez Apache.
    Voici comment procéder pour la mettre en oeuvre dans base.
    1 - Télécharger la dernière version binaire de la bibliothèque Apache Commons Lang ici fichier commons-lang3-3.4-bin.zip
    2 - De ce zip extraire le fichier commons-lang3-3.4.jar
    3 - Dans LibreOffice rajouter ce jar dans la liste des archives java : outils/options/LibreOffice/Avancé, cliquer sur le bouton chemin de la classe.Dans la fenêtre chemin de la classe cliquer sur le bouton Ajouter une archive, choisir le fichier commons-lang3-3.4.jar Valider.

    4 - Et voilà maintenant, on peut utiliser les fonctions qui se trouvent dans cette bibliothèque comme procédures stockées.

    Exemple pour ta sélection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT "LesOeuvres"."Compositeur" AS "Compositeur", "LesOeuvres"."Prénom" AS "Prénom",
    "LesOeuvres"."Dates" AS "Dates", "LesOeuvres"."Oeuvre" AS "Oeuvre" FROM "LesOeuvres" "LesOeuvres" 
    WHERE "org.apache.commons.lang3.StringUtils.stripAccents"("LesOeuvres"."Compositeur") LIKE 'Faure'
    et voici le résultat dans une requête de base LibreOffice exemple :

    Nom : LibreOfficeBase_Requete.png
Affichages : 2159
Taille : 41,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ça à l'air de bien fonctionner, je te remercie, je mettrais cela en œuvre dès que je peux et ferais un retour

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Arf,
    désolé , je viens de m'apercevoir qu'en fait ma base était connectée à une base de données externe HSQLDB de version 2.3.3 par JDBC et je viens de faire un essai avec le HSQLDB intégré de LibreOffice , apparemment il ne connait pas les procédures stockées :

    Erreur de syntaxe dans l'expression SQL
    SELECT "LesOeuvres"."Compositeur" "Compositeur", "LesOeuvres"."Prénom" "Prénom", "LesOeuvres"."Dates" "Dates", "LesOeuvres"."Oeuvre" "Oeuvre" FROM "LesOeuvres" "LesOeuvres" WHERE "org.apache.commons.lang3.StringUtils.stripAccents"( "LesOeuvres"."Compositeur" ) LIKE 'Faure'
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oui je m’apprêtais à expliquer comment j'avais tout bien fait et que ça ne marchait toujours pas

    Je ne sais pas si je dois cocher 'N'est plus résolu ' c'est à dire 'Avez vous encore des idées'

    ou Résolu : 'C'est acté, n'utilisez pas libre office si vous voulez un peu de subtilité dans vos recherches'

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Le mieux, c'est que tu le laisses en non résolu, peut-être que quelqu'un trouvera une autre solution.
    Pour l'instant les seules solutions que je vois :
    1 - La commande bestiale SQL avec les REPLACE imbriqués : un peu lourd à écrire.
    2 - Remplacer les caractères accentués dans le texte de recherche par une *.
    3 - Se connecter à un autre moteur de base de données qui traite le COLLATE ou autre méthode pour faire des sélections non sensibles aux accents.
    4 - Utiliser le modèle base odb qui est ici
    . Bien lire la méthode pour l'installer. En finale avec cela, on se retrouve avec un répertoire qui contient le moteur de base de données hsqldb 2.3 (dans driver), un répertoire qui contient la base de données créée dans ce hsqldb et finalement l'odb qui en fait ne sert plus que de "front-end" par rapport à la base créée. La base sera en fait constituée de tous les fichiers créés.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Le guide de Jean-François Nifenecker ( ici ) au titre évocateur Pour en finir avec le mode intégré explique de façon très détaillée et pédagogique comment utiliser Base avec une connexion externe HSQLDB pour sécuriser les bases de données que l’on peut créer à partie du module de LibreOffice ou d’OpenOffice d’ailleurs.
    Dans cet ouvrage on apprend que :
    En termes de bases de données, LibreOffice est livré d’emblée avec un moteurHSQLDB intégré, ce qui permet d’exploiter immédiatement le module Base pour créer de petites bases de données personnelles. Cependant, le module Base permet beaucoup plus que cela. Ce module constitue en effet ce que l’on nomme un« frontal » de bases de données (front-end), ce qui lui permet d’offrir l’accès à un grand nombre de types de bases de données. Les moteurs les plus connus sont incontestablement MySQL et PostgreSQL. Cependant, il existe également la possibilité d’accéder à travers Base à des bases de données HSQLDB externes, qu’elles soient mono-poste ou client-serveur.
    En bref, Base permet la gestion de bases de données selon trois modes distincts ? le mode incorporé, le mode fichier autonome, le mode client-serveur.
    a. Le mode incorporé (embedded mode)
    C’est le mode proposé par défaut ? LibreOffice gère la base de données à travers un moteur HSQLDB et un pilote internes à la suite bureautique . Le corollaire est que toutes les données sont gérées en mémoire. Le fichier .odb contient les données (les tables), les éléments d’interrogation (requêtes et vues) et les éléments d’interface (formulaires et rapports).Ce mode de fonctionnement a l’avantage d’être simple d’utilisation (un seul contenant entièrement autonome) mais comporte les inconvénients (1) d’être restreint à une taille compatible avec la mémoire vive disponible et (2) surtout etpar conséquent, d’être sujet à des pertes de données – voire de la base toute entière – en cas de problèmes sur le poste pendant l’exécution. Si la base peut être mise en partage, elle n’est accessible avec les droits complets que par un seul poste à la fois. Il s’agit bien d’un usage mono-poste.
    b. Le mode fichier autonome (file mode)
    Un moteur HSQLDB externe est installé sur le poste et gère les bases de donnéesindépendamment des processus d’interrogation ou d’exploitation. Le fichier .odb ne contient que les éléments d’interrogation et d’interface (voir la figure 2). L’installation demande quelques manipulations complémentaires mais, à l’usage, la base est beaucoup plus robuste et mieux protégée des aléas pouvant survenir sur la machine hôte. Si la base peut être mise en partage, elle n’est accessible avec les droits complets que par un seul poste à la fois. Nous l’utilisons toujours en mono-poste.
    c. Le mode client-serveur (server mode)
    Ce mode est très ressemblant au mode autonome – un moteur HSQLDB externe gère les bases de données – mais la base peut être utilisée concurremment par plusieurs postes clients.
    J'ai suivi ce qui est indiqué dans ce guide pour constituer une base externe HSQLDB monoposte. J'ai utilisé la dernière version de HSQLDB (2.3.3) disponible ici
    J'ai rajouté ma bibliothèque java commons-lang3-3.4.jar dans la liste des archives de LibreOffice (voir message précédent).
    La syntaxe pour utiliser des procédures stockées a changé. Il faut d'abord les créer pour qu'elles soient référencées dans la base de données en cours.
    Par exemple pour rajouter une procédure stockée sup_accents dans sa base il faut lancer la commande SQL suivante (menu outils/SQL/Commande à exécuter ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE FUNCTION  sup_accents(input VARCHAR(30))
       RETURNS  VARCHAR(30)
       LANGUAGE JAVA DETERMINISTIC NO SQL
       EXTERNAL NAME 'CLASSPATH:org.apache.commons.lang3.StringUtils.stripAccents'
    Cette procédure sera stockée de façon permanente dans la base en cours et pourra donc être appelée à tout moment dans une commande SQL.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  * FROM  "LesOeuvres" WHERE (UPPER(sup_accents( "Compositeur" )) LIKE UPPER(sup_accents( '%FAurê%' )) ) ORDER BY "Oeuvre"
    Voilà, j'espère que je n'ai ennuyé personne avec ces explications.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette solution

    C'est toutefois bien du travail pour accéder à une recherche sans accent si l'on voulait au départ juste gèrer ses vinyls classiques sur son poste avec le même outil.

    D'autant qu'en lisant ses explications (à Jean-François) la rubrique "Problèmes connus"
    • les champs autovaleur et les valeurs par défaut ne sont pas enregistrés
    • Les champs numériques ne sont pas enregistrés

    Même s'il nous présente des solutions, cela nous fait pressentir que nous allons devoir pas mal contourner la compatibilité relative des 2 éléments.

    De plus il suggère fortement d'utiliser un autre outil pour gérer les bases HSQLDB

    ...Notons au passage qu’il est possible de gérer la
    structure des bases de données HSQLDB externes au moyen d’autres outils, par exemple SQuirreL
    Cette manière de travailler est très fortement conseillée.
    En bref, cette solution est bonne pour les bases de données importantes à usage pro, lorsque leur stabilité doit être sécurisée et qu'un programmeur est disponible pour adapter continuellement chaque micro-difficulté.

    Je suis certaine qu'une solution pour effectuer une requête sans accent doit exister dans libre office, cela parait trop gros comme omission.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  "Nom_compositeur" FROM  "Artistes" WHERE (LOWER(INSTRUCTIONMYSTERE( "Nom_compositeur" )) LIKE LOWER(INSTRUCTIONMYSTERE( '%FAurê%' )) )
    Nom : Screen Shot 12-04-15 at 07.22 AM.PNG
Affichages : 1936
Taille : 28,9 Ko
    Gabriel Fauré, 1845-1924, pianiste, organiste et compositeur français.

    Si vous ne trouvez pas la solution pour moi, faites le pour Gabriel

  11. #11
    Nouveau Candidat au Club Avatar de Cissy
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    En attendant mieux voici ma macro qui consiste à détecter ce qui ressemble à des doublons, (mais n'en est pas forcément), à la saisie dans un formulaire comme le suggérai Jurassic dans l'une de ses solutions:

    Cette macro dans la page formulaire se déclenche sur changement de la valeur de la case, l'un des formulaire dans la page s'appelle Artistes (comme ma table mais il aurait pu s'appeler autrement, par défaut Formulaire1)
    la case de saisie de l'artiste s'appelle "champ_Nom_artiste"

    J'ai crée un autre formulaire dans la même page (nommé compteur) qui à pour donnée une instruction SQL : SELECT COUNT(Nom_artiste) FROM Artistes (elle sera changée par la macro)
    avec une case texte (rendue invisible) nommée "nb_doublon" qui a pour champ de donnée COUNT("Artistes"."Nom_artiste")
    c'est lui qui va récolter la quantité de doublons potentiels

    Nom : Screen Shot 12-05-15 at 06.04 AM.PNG
Affichages : 2023
Taille : 16,8 Ko

    Si l'on tape Fauré cela cherche %f--r-% dans la table, cela à tendance à trouver pas mal de faux doublons intempestifs.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub verif_doublon_artiste
    	dim formulaireobjet as object
    	dim formulaireobjet2 as object
    	dim contenutexte as string
    	dim instructionsql as string
    	dim nbdedoublon as string
    	dim vnbdedoublon as integer
    	dim nouvellechaine as string
     
    	formulaireobjet = thisComponent.DrawPage.Forms.getByName("Artistes")
    	contenutext = formulaireobjet.getByName("champ_Nom_artiste").Text
     
    	 contenutext =LCase(contenutext)
     
    	' Pour remplacer tout code ascii qui ne soit pas des caractères simples  et  a e i o u en _
    	longueurtexte= len(contenutext)
     
    	For ct = 1 to longueurtexte
    		caractere = mid(contenutext, ct,1)
    		codeascii = asc(caractere)
    		if codeascii < 65 or codeascii > 123 or codeascii = 97 or codeascii = 101 or codeascii = 105 or codeascii = 111 or codeascii = 117 then
    			 nouvellechaine = nouvellechaine + "_"
    		else 
    			nouvellechaine = nouvellechaine + caractere
    		endif
    	next
     
     
    	formulaireobjet2 = thisComponent.DrawPage.Forms.getByName("compteur")
    	instructionsql ="SELECT COUNT(Nom_artiste) FROM Artistes WHERE LOWER(Nom_artiste) like '%" + nouvellechaine + "%'"
     
    	formulaireobjet2.command = instructionsql   'Redéfinition de la source du formulaire
    	formulaireobjet2.reload                     'Recharge le formulaire
    	nbdedoublon =  formulaireobjet2.getByName("nb_doublon").Text
     
    	vnbdedoublon = CInt(nbdedoublon) ' obtenir la valeur numérique
     
     
    	if vnbdedoublon > 0 then
    		print("Il existe " & vnbdedoublon & " entrée(s) ressemblant à : " & contenutext )
    	endif
     
    End Sub

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    j'avais cherché aussi de mon côté et j'étais arrivé à ceci :
    Un formulaire avec un contrôle texte (compositeur à rechercher) , un bouton (lancer la macro) et une table (affichage de la recherche).
    La sélection est basée sur le filtre du formulaire.
    voici les macros utilisés :
    1 - macro qui remplace les caractères susceptibles d'^être accentués par un caractère joker (_) et qui met la chaîne en minuscule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Magique(Texte As String)
       Dim Nc As Integer, n As Integer, Car As String
      Nc = Len(Texte)
      For n = 1 to Nc
        Car = Mid(Texte, n, 1)
        Select Case Car
        Case "a","â","à","á","ã","ä","å","c","ç","e","é","è","ê","ë","i","î","ï","n","ñ","o","ó","ô","õ","ö","r","ř","u","û","ü"
        Car = "_"
        End Select 
        Mid(Texte, n, 1) = Car
      Next n
      ' on met tout en minuscule
      Magique = LCase(Texte)
    End Function
    2 - La macro qui est lancée par le bouton et qui applique le filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub RechercheArtiste()
    dim oFilter as object
    dim oFormCtl as object
    oFormCtl = ThisComponent.Drawpage.Forms.getByName("MonFormulaire")
    oFilter = oFormCtl.getByName("Artiste")
    if oFilter.CurrentValue <> "" then
    oFormCtl.Filter = "Lower(Compositeur) LIKE " + "'%"+ Magique(oFilter.CurrentValue)+"%'"
    oFormCtl.ApplyFilter = True
    else
    oFormCtl.ApplyFilter = False
    end if
    oFormCtl.Reload
    End Sub
    Cela semble fonctionner sauf qu'à force de remplacer trop de caractères on est plus assez sélectif :
    exemple : FAUré donne après son passage par magique f____ ce qui correspond à la fois à Fauré et Falla .
    tout ça à cause de dvorak qui peut avoir un accent sur son r
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Je viens peut être de trouver la fonction SQL qui te manquait : Soundex .
    Cette fonction se base sur la sonorité des mots et permet de trouver des mots mal orthographiés .
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM "LesOeuvres" Where Soundex("Compositeur") = Soundex('Forê')
    SELECT * FROM "LesOeuvres" Where Soundex("Compositeur") = Soundex('FAUre')
    SELECT * FROM "LesOeuvres" Where Soundex("Compositeur") = Soundex('Fauré')
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. [MySQL] Enregistrement d'une requête SQL dans une base de données MySQL
    Par glsn dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2008, 13h06
  2. Comment stocker une requête sql dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2006, 10h01
  3. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  4. [MySQL] Passer une requête SQL dans un tableau
    Par phpaide dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/05/2006, 11h09
  5. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo