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

Bases de données Delphi Discussion :

Sql et TStringList


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut Sql et TStringList
    Bonjour,

    J'aimerais savoir comment récuperer des enregistrements dans une Query dans les clés sont contenues dans une StringList ( ou un tableau )?

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM myTABLE
    WHERE myKey IN myList;
    Ce code ne devrait pas marcher et je voudrais savoir si on peut l'exprimer autrement (et correct bien sûr !).

    Merci.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Tu dois de toutes façons générer une énumération SQL à partir de ta liste de chaînes :
    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 ListToSQLEnum(List : TStrings; Strings : boolean) : string;
    var I : integer;
        StrFormat : string;
    begin
      Result := '';
      if Strings then
        StrFormat := '''%s'', '
      else
        StrFormat := '%s, ';
     
      for I := 0 to List.Count-1 do
        Result := Result + Format(StrFormat, [List[I]]);
      SetLength(Result, Length(Result)-2);
    end;
    Le paramètre Strings doit valoir True si tes clefs sont des chaînes, et False sinon (par exemples entiers).

    Ca te renvoie une chaîne du type :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1, 5, 10
    'Clef 1', 'Clef 2', 'Clef 3'
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Je suppose que ta StringList contient les valeurs de ton critère IN, il suffit alors de faire un itération sur ta StringList pour constuire l'expression.

    Exemple, ta StringList contient: Rouge, Vert et Bleu. Il faut constuire une expression qui sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      where myKey in ('Rouge', 'Vert', 'Bleu')
    Donc un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      for i := 0 to MaStringList.Count - 1 do
      begin
        if MonCritere <> '' then 
          MonCritere := MonCritere + ',';
        MonCritere := MonCritere + QuotedStr(MaStringList.Items[i]);
      end;
    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      SELECT * 
      FROM myTABLE
      WHERE myKey IN (' + MonCritere + ')';
    Voilà, j'ai construit ça à la volée mais l'esprit est là.

    @+ Claudius

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Uuuuh, sympa ta fonction sjrd

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Merci Messieurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. L'avenir du BDE et des SQL Links révélé ! <officiel>
    Par Merlin dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/06/2006, 10h18
  2. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  3. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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