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

 Delphi Discussion :

Comment comparer deux chaines de caractères en mode case sensitive?


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 229
    Points : 60
    Points
    60
    Par défaut Comment comparer deux chaines de caractères en mode case sensitive?
    Bonsoir messieurs,

    J'ai mis en place une application Delphi7 et une base de données SQL Serveur . Pour se connecter tout utilisateur doit s'authentifier à l'aide d'un Login et Mot de passe.
    Je veux donc pouvoir comparer deux chaines de caractères en mode case sensitive.

    Par exemple comparer les chaines "motDepass" et "MotdePass" et avoir un boolean false.
    Quelle fonction me permetrait cela de faire une telle comparaison?
    Merci pour votre comprehension.

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Tu peux simplement utiliser le signe "="

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Chaine1=Chaine2 then

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 229
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta réponse mais cela ne marche pas comme je le souhaite.

    Quand je fais :
    VarP1:="Motdepass ";
    VarP2:="motDepass ";
    if VarP1=VarP2 then
    Il retourne True alors que je ne veux pas cela.

    Je veux une comparaison qui me différencie VarP1 de VarP2 à cause du case sensitive en me retournant False

    Merci, j'ai besoins de votre aide.

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    avec des doubles quotes je doute que ça compile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      VarP1 : string;
      VarP2 : string;
    begin
      VarP1:='Motdepass ';
      VarP2:='motDepass ';
      if VarP1=VarP2 then
        ShowMessage('True')
      else
        ShowMessage('False');
    end;
    False !
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    On peut même écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(BoolToStr(VarP1 = VarP2, True));
    Est-ce une comparaison dans Delphi ou directement via un SQL que tu voulais faire ? Ton erreur sur " et ' est tout de même étrange !

    Sinon, mieux vaut chiffrer le mot de passe dans la DB !
    Ne jamais déchiffrer la DB mais chiffrer le mot de passe saisie et comparer le résultat chiffré au contenu de la DB !

    Klemsy78, tu utilises bien des string ? Quelle version de Delphi ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 229
    Points : 60
    Points
    60
    Par défaut
    Oui j'utilise Delphi7 et mes chaines sont des string.
    Mon problème n'est pas les string, je savoir comment gérer les mot de passe dans mon application de sorte que quelqu'un qui a défini 'MotDepasse' comme son mot de passe, ne puisse pas se connecter en saisissant comme son mot de passe 'motdepasse'. Je souhaite que mon authentification fonctionne comme une ouverture de session windows.


    Vous parlez de chiffrer le mots de passe, de quoi s'agit-il?
    Que je convertisse la chaine en chiffres en stockant dans ma base?

    Je veux mieux comprendre. Merci

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    La comparaison de string par = est sensible à la casse !
    Je ne vois pas comment cela peut ne pas fonctionner chez toi ! Tu as forcément fait une erreur !

    Il existe aussi
    SameStr - sensible à la casse
    SameText - insensible à la casse

    Pour le chiffrement, c'est du cryptage, c'est pour la sécurité !
    Oubli pour le moment cela !

    Dans un SELECT, il est possible que par défaut le moteur DB soit insensible à la casse, réfère toi à la documentation de ta DB pour forcer une comparaison strict : MSDN SQL Server 2008 R2 - Comparing String Data - Setting Comparison Options
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut une méthode à deux sous
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      chaine1: string;
      chaine2 : string;
     b:Integer;
    bEgales:boolean;
    begin
    bEgales:=true;
      chaine1:='Motdepass ';
      chaine1:='motDepass ';
    for b:=0 To Lenght(chaine1) do
    if chaine1[b]<>chaine2[b] Then
    begin
    bEgales:=false;exit;
    end;
     
    end;
      end;
    end;

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 229
    Points : 60
    Points
    60
    Par défaut
    Merci pour ton explication. En fait tu as raison pour la compaison string en Delphi7.
    Je comprend que mon problème vient de ma base SQL Server.
    Car je fais ma comparaison dans une requête sql:
    Select * from TUser where PassWord=+VarPass;
    avec VarPass comme paramètre qui reçoit le mot de passe saisie.

    Donc en clair comment faire une comparaison strict(case sensitive) dans une requête SQL Serveur 2005?

    Merci!

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Il était évident pour moi que cela venait de la DB, le case insensitive ne pouvait pas se faire tout seul en Delphi !

    Sinon tu pourrais un peu chercher, il y a un article complet à ce sujet sur Developpez !!!
    A quoi servent les collations !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from TUser where PassWord COLLATE SQL_Latin1_General_Cp1_CS_AS =+VarPass;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/04/2007, 13h37
  2. Comparer deux chaines de caractères
    Par helww dans le forum C++
    Réponses: 10
    Dernier message: 24/04/2007, 11h26
  3. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  4. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

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