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 :

Je seche sur une requete (not in)


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Je seche sur une requete (not in)
    Bonjour à tous,

    Voilà la procédure que j'utilise qui me permet de créer en automatique des shapes sur les postes en réseau (n'aillant pas ce shape)
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    procedure TFormPrincipal.TimerInsertTimer(Sender: TObject);
    Var
      Shape: TRuShape;
      n: Integer;
      TachesRefName: String;
    begin
    
    if PreferenceCreation then
    Begin
      TachesRefName := '';
      {DETECTION DES TÂCHES CREER AILLEUR QUE SUR CE POSTE}
      With ModuleDeDonneeSecondaire.ADOQueryCalendrier do
      Begin
        Try
          Try
      // On liste l'ensemble des Tâches présentes sur le poste
      // Sauf les tâches nouvellement créées par ce poste => Gain de temps
            For n := StringGridSemaine.ComponentCount-1 downto 0 do // Le faire Absolument à l'envers
            Begin
    // On récupère uniquementles shape dont le name commence par 'P'
              if LeftStr(StringGridSemaine.Components[n].Name,1) = 'P' then
    // On concatène les name en retirant le mot 'PANEL' au passage
              TachesRefName := TachesRefName + Droite('PANEL',StringGridSemaine.Components[n].Name)+ ',';
            end;
            TachesRefName := StrCoupeADroite(TachesRefName,1);
            If TachesRefName <> '' then // Cas où le planning n'est pas vide dans cette semaine
            Begin
              Sql.Clear;
              Sql.Add('Select * From Calendrier ');
              Sql.Add('Where NumeroSemaine=:xSemaine ');
              Sql.Add('And NumeroAnnee=:xAnnee ');
              Sql.Add('And NumEdit not in(:TachesRefName)');
              Parameters.ParamByName('xSemaine').Value := NumeroDeSemaine;
              Parameters.ParamByName('xAnnee').Value := Annee;
              Parameters.ParamByName('xTachesRefName').Value := TachesRefName;
    showmessage(Sql.Text + #13+#10
                + NumeroDeSemaine + #13+#10
                + Annee + #13+#10
                + TachesRefName);
               
              Open;
              While not eof do
              Begin
      // Il y a une nouvelle tâche on la créée
     .....
     .....
                  end;
                Next;
              end;
      // Il n'y a pas ou plus de nouvelle tâche à créée
              StringGridSemaine.CheckInBounds;
            end;
          Except
            on E : Exception do
            Begin
    //
    // bla bla
    //
            end;
          end;
        Finally
          Close;
        end;
      end;
    end;
    Parameters.ParamByName('xTachesRefName').Value := TachesRefName; renvoi une erreur car le champ NumEdit est te type numeriqueAuto

    Alors comment mettre une virgule à chaque numero trouver et inetgrer cela en requete.

    exemple de valeur probalble de
    - TachesRefName = '9,23,43,54,1,45'
    - Annee = '2008'
    - NumeroSemaine = '51'

    Ma requete donne donc :
    Select * From Calendrier
    Where NumeroSemaine=51
    And NumeroAnnee=2008
    And NumEdit not in(9,23,43,54,1,45)

    Mais 9,23,43 est de type texte donc boom erreur. comment vous feriez vous ?

    MErci de votre aide.

  2. #2
    Membre confirmé
    Avatar de didier.cabale
    Homme Profil pro
    Conseil - Consultant en systèmes d’information
    Inscrit en
    Août 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d’information
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2004
    Messages : 130
    Points : 522
    Points
    522
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    And NumEdit not in(9,23,43,54,1,45)
    Avez vous essayé en séparant les items par une virgule, puis un espace?
    J'ai déjà eu le pb sur la propriété 'filter' d'un TClientDataset, et j'ai résolu ainsi
    Cordialement

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 292
    Points : 1 944
    Points
    1 944
    Par défaut
    Je ne sais pas si le type ftVariant peut convenir, sinon, j'enleverais le paramètre et ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sql.Add('And NumEdit not in('+TachesRefName+')';

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    A mon avis, passer une liste de valeurs par un paramètre n'est pas possible. Un paramètre doit avoir un type bien précis, de manière à avoir être interprété par le SGBD même s'il n'est pas renseigné (préparation de la requête).
    Dans ton cas, il vaudrait mieux utiliser un simple Format.

    [edit] ou la solution de Linkin, arrivée entre temps.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 443
    Points : 5 863
    Points
    5 863
    Par défaut
    salut

    avec le format en faisant comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Sql.Clear;
       St := 'Select * From Calendrier '
       +'Where NumeroSemaine=%0:d'
       +'And NumeroAnnee=%1:d '
       +'And NumEdit not in (%2:s) ';
        Sql.Add(Format(st,[NumeroDeSemaine,Annee,TachesRefName]);
        showmessage(Sql.Text );
    @+ Phil

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    pourquoi pas (And NumEdit<>9 and And NumEdit <>23 and .....)
    ou simplement laissé delphi le faire ( if not( NumEdit in [9,23,43,54,1,45])
    à prpos tu récupére 9,23,43,54,1,45 d'où exactement (je parle pas de stringgrid)

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Merci à tous,

    La solution de linkin est parfaite et fonctionne trés bien.

    Pour vous répondre à tous.

    didier.cabale, j'ai essayé pas mal de chose.

    anapurna, je n'ai jamais utilisé ta technique et a vrai dire je ne la comprends pas lolol, donc je peux pas te dire si cela fonctionne.

    rsc, en fait si tu peux le faire mais que en String apparement.

    edam, Alors la technique que tu parle j'y pensais au cas où, mais heureusement que j'ai pu faire autrement sinon t'imagine si je récupère une cinquantiane de valeur, la taille de la requete !! lol.
    Sinon pour te répondre les numéros que j'ai mis étaient des exemples, je peux en avoir d'autre où pas du tout, pour ton information ces numéros proviennent de composant posés sur le StringGrid plus exactement des Shapes.
    Le but est de récupérer le 'name' de ces composants par
    Droite('PANEL',StringGridSemaine.Components[n].Name), là à droite de PANEL je récupere le numero (je sais je récuper des numéero de shape avec un nom commencant pas PANEL lol mais bon..., c'est juste un 'name')
    Une fois récuperé ces numéros, Ce timer (qui s'execute sur tous les postes toutes les 5 secondes) verifie si il ne manque pas un shape créer par un autre poste, hé hop magie magie il le créé automatiquement.

    MErci encore à vous et à bientôt.

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 443
    Points : 5 863
    Points
    5 863
    Par défaut
    salut


    pourtant elle est pas difficile a comprendre j'utilise la fonction format de delphi
    %d %s sont des variable a remplacer par les paramettre que tu passe a la fonction
    %d c'est pour les entier
    %s c'est pour les string
    %f c'est pour les float

    y'en a encore d'autre suffit de faire [F1] sur la fonction est l'aide te donnera toutes les info necessaire

    @+ Phil

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

Discussions similaires

  1. Je seche sur une requete
    Par dam28800 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 13/01/2010, 17h11
  2. transformation sur une requete SELECT
    Par juniorAl dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/04/2005, 18h12
  3. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  4. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 10h40
  5. []débogage sur une requête dasn visual basic
    Par mcay dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 24/09/2003, 09h59

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