Publicité
+ Répondre à la discussion
Page 2 sur 3 PremièrePremière 123 DernièreDernière
Affichage des résultats 21 à 40 sur 58
  1. #21
    Membre Expert Avatar de edam
    Homme Profil pro said
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 813
    Détails du profil
    Informations personnelles :
    Nom : Homme said
    Localisation : Maroc

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 1 813
    Points : 2 384
    Points
    2 384

    Par défaut

    nabil je sais, je l'ai bien dis

    Citation Envoyé par edam Voir le message
    dans tout les cas, tu as pris ta procédure de l'autre siècle et tu la mis tel quel, hhhhhhh
    il y a mieux à faire et aidons notre copain, non!!?
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  2. #22
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    salut,

    Pour afficher le résultat de la procédure de Serge et de Ph. B. dans la requête sans passer par une ListBox, faut-il ajouter un champ à la Query (à la conception) ou dans la table et ensuite faire un Select de ce champ qui servira à regrouper ces intervalles des Id_clients ?

    Rapellons-nous que l'objectif est :

    Localité: les "Id" qui vont avec


    @+

    NAbil

  3. #23
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 509
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 509
    Points : 10 806
    Points
    10 806
    Billets dans le blog
    3

    Par défaut

    bon , j'avais du temps libre
    essayes quand même de comprendre le code , avant de faire un copier coller bête

    @philippe : si tu veux chercher la petite bête , je suis sur que tout n'est pas encore optimum

    ici , le résultat sera mis dans un mémo (resultmemo) , une ligne par localité

    Code SQL :
    1
    2
     
    SELECT LOCALITE,NUMERO FROM CLIENTS ORDER BY LOCALITE,NUMERO
    Code :
    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
     
    procedure TForm1.TestBtnClick(Sender: TObject);
    var wloc : String;   // localité en cours
         wNum: Integer;  // numero en cours
         sNum : Integer;  // debut de la suite
         LigneMemo : String; // resultat pour une localité
     
        // mise en forme de la ligne
        procedure ModifierLigne;
        var t : integer;   // utilisée pour le cas du EOF
        begin
         t:=Query1NUMERO.asInteger-Wnum;
         if Query1.EOF then t:=-1;  // force t a -1
     
         case t of
         0 : begin
             if Length(Lignememo)= Length(Wloc)
                 then LigneMemo:=Lignememo+' '+Inttostr(WNum)
                 else LigneMemo:=Lignememo+','+Inttostr(WNum) ;
             snum:=wnum;
             end;
         1 : Wnum:=Query1NUMERO.asInteger;
         -1 : if snum<>wnum then lignememo:=Lignememo+'...'+Inttostr(wnum);
         else begin
               if snum=wnum then Lignememo:=Lignememo+', '
               else Lignememo:=Lignememo+'...'+inttostr(wnum)+', ';
                wNum:=Query1NUMERO.asInteger;
                sNum:=Query1NUMERO.asInteger;
                Lignememo:=Lignememo+Inttostr(WNum);
              end;
         end;
        end;
     
    begin
    Resultmemo.Clear;
    Query1.Active:=True;
    wNum:=0;
    wLoc:='';
    while not Query1.Eof do
     begin
       if Wloc<>Query1LOCALITE.AsString then
        begin
          if WNum>0 then ResultMemo.Lines.Add(LigneMemo);
          wloc:=Query1LOCALITE.AsString;
          sNum:=Query1NUMERO.asInteger;
          wNum:=Query1NUMERO.asInteger;
          LigneMemo:=wloc;
        end;
       ModifierLigne;
       Query1.Next;
     end;
     ModifierLigne;
     ResultMemo.Lines.Add(LigneMemo);
     Query1.Active:=false;
    end;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  4. #24
    Expert Confirmé Sénior
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Freelance
    Inscrit en
    avril 2002
    Messages
    1 339
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : avril 2002
    Messages : 1 339
    Points : 4 011
    Points
    4 011

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    bon , j'avais du temps libre
    essayes quand même de comprendre le code , avant de faire un copier coller bête

    @philippe : si tu veux chercher la petite bête , je suis sur que tout n'est pas encore optimum
    Taquin !
    Plus sérieusement, je laisse @NABIL74 travailler un peu et reprendre la piste que j'avais donnée au début de la discussion ou exploiter la votre...
    A ce titre, j'ai tendance à ignorer les sollicitations d'assistance de ce type faites par messagerie privée.
    Philippe.

  5. #25
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    bon , j'avais du temps libre
    essayes quand même de comprendre le code , avant de faire un copier coller bête
    Bonjour à tous,

    Merci pour le temps que tu as consacré à ce souci !

    Oui, j'ai toujours pris note de tes conseils.

    Mais là Serge t'es une bête

    Le code fonctionne correctement,c'est ça ce que je voulais.

    Une question, est-il possible avec cette procédure d'afficher le résultat de la procédure dans la Query sans passer par un TMemo? Car je dois faire un état qui englobe tout et bien sûr par la suite l'imprimé.

    Merci encore.

    @+

    Nabil

  6. #26
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 509
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 509
    Points : 10 806
    Points
    10 806
    Billets dans le blog
    3

    Par défaut

    Citation Envoyé par NABIL74 Voir le message
    Une question, est-il possible avec cette procédure d'afficher le résultat de la procédure dans la Query sans passer par un TMemo?
    c'est clairement non , sauf a passer par une table temporaire du genre
    Table TEMP
    LOCALITE String
    MEMO blob
    j'aurais certainement dit autrement s'il s'était agit d'une base Firebird (d'ailleurs je l'ai déjà dit ) Cela aurait été un bon exemple d'utilisation de procédure récursives et d'utilisation de lanction LIST je pense . Si j'ai encore du temps a perdre (et que ce n'est pas déjà fait), je pense que j'essaierai !

    mais il est toujours possible d'imprimer directement le memo , ou de passer par des evenements de calcul pour chaque Localité . Tout dépend du générateur utilisé
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  7. #27
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    c'est clairement non , sauf a passer par une table temporaire du genre
    Oui, c'est ça que je voulais éviter avant que je pose ma question. Passer par une Table temporaire et puis insérer les enregistrements et par la suite, faire le traitement voulu (ça serait fait par une requête Sélection + un Union, ou un Left Join je pense).

    J'ai déjà crée il y a quelques temps une Table temporaire qui contient les champs: Localite (string [200]), IDS_Clients(Memo).

    Citation Envoyé par SergioMaster Voir le message
    mais il est toujours possible d'imprimer directement le memo , ou de passer par des evenements de calcul pour chaque Localité . Tout dépend du générateur utilisé
    ça c'est une autre paire de manches Serge.

    Mon générateur est ReportBuilder.

    Dans mon état, il y a deux colonnes : une pour la localité et l'autre pour les Id_clients.

    il faut donc copier à partir de chaque ligne:
    les mots de chaque localité (ex:Nantes) dans la 1ère colonnes et les ID correspondant dans la 2ème colonne.


    A+

    Nabil

  8. #28
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 509
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 509
    Points : 10 806
    Points
    10 806
    Billets dans le blog
    3

    Par défaut

    Citation Envoyé par NABIL74 Voir le message
    Mon générateur est ReportBuilder.
    évidemment celui là je connais pas !

    pour ce qui est de mettre le résultat en table temporaire par contre c'est très facile , il suffit de modifier légèrement le code

    Code :
    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
    procedure TForm1.TestBtnClick(Sender: TObject);
    var wloc : String;   // localité en cours
         wNum: Integer;  // numero en cours
         sNum : Integer;  // debut de la suite
         LigneMemo : String; // resultat pour une localité
     
        // mise en forme de la ligne
        procedure ModifierLigne;
        var t : integer;   // utilisée pour le cas du EOF
        begin
         t:=Query1NUMERO.asInteger-Wnum;
         if Query1.EOF then t:=-1;  // force t a -1
     
         case t of
         0 : begin
             if Length(Lignememo)=0
                 then LigneMemo:=Inttostr(WNum)
                 else LigneMemo:=Lignememo+','+Inttostr(WNum) ;
             snum:=wnum;
             end;
         1 : Wnum:=Query1NUMERO.asInteger;
         -1 : if snum<>wnum then lignememo:=Lignememo+'...'+Inttostr(wnum);
         else begin
               if snum=wnum then Lignememo:=Lignememo+', '
               else Lignememo:=Lignememo+'...'+inttostr(wnum)+', ';
                wNum:=Query1NUMERO.asInteger;
                sNum:=Query1NUMERO.asInteger;
                Lignememo:=Lignememo+Inttostr(WNum);
              end;
         end;
        end;
    
        procedure insertligne;  
        begin
       // Query2 = INSERT INTO TABLETEMP(LOCALITE,LIGNE) VALUES (:LO,:LM)
        Query2.ParamByName('LO').asString:=wloc;
        Query2.ParamByName('LM').asString:=LigneMemo;
        Query2.ExecSQL; 
        end;
     
    begin
    Resultmemo.Clear;
    Query1.Active:=True;
    wNum:=0;
    wLoc:='';
    while not Query1.Eof do
     begin
       if Wloc<>Query1LOCALITE.AsString then
        begin
          if WNum>0 then insertligne;
          wloc:=Query1LOCALITE.AsString;
          sNum:=Query1NUMERO.asInteger;
          wNum:=Query1NUMERO.asInteger;
          LigneMemo:='';
        end;
       ModifierLigne;
       Query1.Next;
     end;
     ModifierLigne;
     insertligne;
     Query1.Active:=false;
    end;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  9. #29
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    évidemment celui là je connais pas !

    pour ce qui est de mettre le résultat en table temporaire par contre c'est très facile , il suffit de modifier légèrement le code
    Salut à tous,

    @Serge : sans faire de pub, Report Builder est bon générateur d'état.

    Oui, c'est facile de mettre le résultat dans table temporaire et de le récupérer ensuite .

    Je n'ai pas Delphi là où je suis(au boulot. eh oui,dimanche c'est le début de semaine chez nous! ), donc je le testerai sûrement ce soir et je te dirai ce que ça donne mon ami.

    Mais c'est vrai Serge, "Paradox" c'est de la merde ,pardon pour ce mot
    c'est toujours limité en SQL, il y a plein de trucs qu'on peut pas faire sans parler des index qui sont pas à jour quand les tables sont endommagés. .Avant que je pose ma question sur le forum, j'ai déjà fait une recherche sur le net et j'ai bien sûr trouvé ton poste qui se rapport à la ma question mais sous Firdbird.

    enfin bon, merci encore.

    Nabil

  10. #30
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Bonjour à tous,

    @ Serge:

    ça marche bien sauf un petit détail dans:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    begin
       // Query2 = INSERT INTO TABLETEMP(LOCALITE,LIGNE) VALUES (:LO,:LM)
        Query2.ParamByName('LO').asString:=wloc;
    
       // "wloc" donne bien les Localités mais  "LigneMemo" 
    
    donne "Localité + numéros" alors qu'on a seulement  besoin  des numéros.   :mur:
    
        Query2.ParamByName('LM').asString:=LigneMemo;
        Query2.ExecSQL;
    A+

  11. #31
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2005
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : mars 2005
    Messages : 5 195
    Points : 8 202
    Points
    8 202

    Par défaut

    Citation Envoyé par NABIL74 Voir le message
    Bonjour à tous,

    @ Serge:

    ça marche bien sauf un petit détail dans:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    begin
       // Query2 = INSERT INTO TABLETEMP(LOCALITE,LIGNE) VALUES (:LO,:LM)
        Query2.ParamByName('LO').asString:=wloc;
    
       // "wloc" donne bien les Localités mais  "LigneMemo" donne "Localité + numéros" alors qu'on a seulement  besoin  des numéros. 
    
        Query2.ParamByName('LM').asString:=LigneMemo;
        Query2.ExecSQL;
    A+
    Euh ... est ce que tu comprends le code que t'as fournis Serge
    En regardant un minimum et en réfléchissant 2s on voit tout de suite où corriger.
    Une piste : regarde comment est renseigné LigneMemo plus haut dans le code.
    Modérateur Delphi Combattez la brute
    Aucune réponse aux sollicitations techniques par MP

    Le guide du bon forumeur :
    __________
    [Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3

  12. #32
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 509
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 509
    Points : 10 806
    Points
    10 806
    Billets dans le blog
    3

    Par défaut

    Citation Envoyé par Rayek Voir le message
    Euh ... est ce que tu comprends le code que t'as fournis Serge
    En regardant un minimum et en réfléchissant 2s on voit tout de suite où corriger.


    un oubli de ma part , ça m'apprendra a faire du copier-coller pour corriger dessus .
    Néanmoins maintenant , c'est corrigé
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  13. #33
    Membre Expert Avatar de edam
    Homme Profil pro said
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 813
    Détails du profil
    Informations personnelles :
    Nom : Homme said
    Localisation : Maroc

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 1 813
    Points : 2 384
    Points
    2 384

    Par défaut

    pour table temporaire je préfère Clientdataset, ou le composant proposé par Franck , mais aussi on peut imprimer directement dans report buider en utilisant les événements des champs
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  14. #34
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par Rayek Voir le message
    Euh ... est ce que tu comprends le code que t'as fournis Serge
    En regardant un minimum et en réfléchissant 2s on voit tout de suite où corriger.
    Une piste : regarde comment est renseigné LigneMemo plus haut dans le code.


    Code :
    1
    2
    3
    4
    5
    6
    case t of
         0 : begin
             if Length(Lignememo)= Length(Wloc)
                 then LigneMemo:=  Inttostr(WNum) ;  // j'ai effacé : Lignememo+' ' 
                // else LigneMemo:= Inttostr(WNum) ;
             snum:=wnum;
    C'est ok même pour l'insertion .

    Tu sais Serge, si je n'applique pas un tri des données, la procédure 'collecte' tous les ID_clients avec les localités qui lui correspondent:

    Code :
    1
    2
    3
    4
    5
    Query1.Active := False;
    Query1.SQL.Clear;
    Query1.SQL.Add(SELECT LOCALITE,NUMERO FROM CLIENTS ');
    Query1.SQL.Add(' ORDER BY LOCALITE,NUMERO');
    Query1.Active:=True;
    Mais quand ce tri est activer, elle loupe quelques ID

    Code :
    1
    2
    3
    4
    5
    Query1.Active := False;
    Query1.SQL.Clear;
    Query1.SQL.Add(SELECT LOCALITE,NUMERO FROM CLIENTS  WHERE  Localite='''+DBEdit2.Text+''' ');
    Query1.SQL.Add(' ORDER BY LOCALITE,NUMERO');
    Query1.Active:=True;
    Le DBEdit2 est la Localite.

    Elle affiche seulement le début d'une série et pas sa fin
    Ex: Paris : 1,29-50,120-129,990-1020

    Le '1020' le loupe, elle m'affiche seulement '990'.
    c'est vraiment incompréhensible non !

    A+

    Nabil

  15. #35
    Membre Expert Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    holalala ...

    pourquoi n'y a t'il pas une table Client et une table Localité ?


    Table Clients :
    Code sql :
    id_client, id_city, ...

    Table cities :

    1 : on bouffe moins de ressources pour stocker les id_client dans un champs non prévus pour ... au risque de se retrouver avec un champs de 42Peta-octet... :/
    2 : on simplifie les requêtes, le tris etc.


    Code sql :
    1
    2
    3
    4
    SELECT cl.id_client, cl.name, ci.id_city, ci.name 
    FROM clients AS cl, cities AS ci
    WHERE cl.id_city=ci.id_city AND (autre condition) 
    ORDER BY ci.id_city, cl.id_client ASC

    et des group by et des count et des sum etc etc.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  16. #36
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par Dr.Who Voir le message
    holalala ...

    pourquoi n'y a t'il pas une table Client et une table Localité ?


    Table Clients :
    Code sql :
    id_client, id_city, ...

    Table cities :
    ça était comme ça au début.En réalité, J'ai la Table Clients avec les champs: id_client , Nom et prénom, Localité, téléphone,...

    Tu n'as pas bien compris mon souci, je veux détecter les trous des ID dans une série entière suivant chaque localité:Nantes : ID: 1,2,3,7 ,8,9,10,11, 25
    Je veux faire: 1-3, 7-11,25

    A+

  17. #37
    Membre Expert Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 299
    Points
    1 299

    Par défaut

    Si si j'avais compris, ce que je comprend pas c'est la finalité de trouver ces fameux trous ...

    pour moi ça raisonne comme un "se prendre la tête pour un truc inutile parce que mal foutus à la base".

    Tu t'embêterai moins a restructurer correctement que de chercher a faire "des trucs" qui te fond tourner en rond pour rien et au risque qu'a la fin d'une longue prise de tête infructueuse avec son lot de solutions improductives tu décide de refaire une structure correcte.

    Avec une telle structure, admettons que tu cherche ou est localisé le client 5 (à paris par exemple), et dans paris tu as '2-9,12-32'

    Tu fais quoi comme requête ?

    à part un truc imbuvable à base fonctions à la noix et de like bancale ?

    Et je parle même pas de la mise à jours de ce champs ... le mec qui en est à l'origine mériterais de bruler sur la stèle des sacrifices d'Oracle tiens...

    Après, oui, le coté défis est intéressant, pour ma part je ferai un traitement externe à base de delphi.

    Mais, ta base actuelle c'est le genre de truc que personne ne voudrais voir en Production.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  18. #38
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par Dr.Who Voir le message
    Si si j'avais compris, ce que je comprend pas c'est la finalité de trouver ces fameux trous ...

    pour moi ça raisonne comme un "se prendre la tête pour un truc inutile parce que mal foutus à la base".

    Tu t'embêterai moins a restructurer correctement que de chercher a faire "des trucs" qui te fond tourner en rond pour rien et au risque qu'a la fin d'une longue prise de tête infructueuse avec son lot de solutions improductives tu décide de refaire une structure correcte.
    Bonjour à tous,

    @Dr.Who : je t'ai déjà dis que tu n'as pas bien pigé ce que je veux exactement, le but est dans un état de sortie (l'impression).

    je ne perd pas la tête pour un truc inutile.Voilà, admettant que dans une localité, j'ai 200 clients et qu'on veut imprimer chaque localité avec les ID_Clients.Tu remarquerais que ces Id vont prendre beaucoup d'espace :de 1 jusqu'à 200!
    Alors pourquoi pas les grouper comme :1-200 non?

    Citation Envoyé par Dr.Who Voir le message
    Avec une telle structure, admettons que tu cherche ou est localisé le client 5 (à paris par exemple), et dans paris tu as '2-9,12-32'

    Tu fais quoi comme requête ?

    à part un truc imbuvable à base fonctions à la noix et de like bancale ?
    Pour la recherche d'un client, on a pas besoin de cette procédure.Dans La Table Clients chaque enregistrement affiche un id_Client et sa localité, Un TEdit pour la recherche fera l'affaire.on tape '5' et on se pointe sur ce client.

    +A

    Nabil

  19. #39
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 509
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 509
    Points : 10 806
    Points
    10 806
    Billets dans le blog
    3

    Par défaut

    Elle affiche seulement le début d'une série et pas sa fin
    Ex: Paris : 1,29-50,120-129,990-1020

    Le '1020' le loupe, elle m'affiche seulement '990'.
    c'est vraiment incompréhensible non !
    non, cela veut simplement dire que le EOF est mal géré .
    c'est encore plus vrai de dire que tes modifications sont responsables de l'erreur. Pour preuve , le dernier code mettant le tout dans un memo donnait le résultat correct.

    1- je remarque que tu n'as pas fait la bonne correction

    2-
    le SQL avec un Where sur la Localité est une honte dans sa forme mais surtout dans le fond

    Code ça c'est pour la forme :
    1
    2
    3
    4
    5
    6
    7
     
    Query1.Active := False;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT LOCALITE,NUMERO FROM CLIENTS  WHERE  Localite=:L');
    Query1.SQL.Add(' ORDER BY LOCALITE,NUMERO');
    Query1.ParambyName('L').asString:=DBEdit2.Text;
    Query1.Active:=True;

    pour le fond : s'il n'y a qu'une seule localité , alors il n'y a pas lieu d'utiliser le test sur le changement de localisation.

    3- en général quand on fait une édition ce n'est pas pour n'avoir qu'une seule ligne (donc dans notre cas une seule localité)

    je suis d'accord avec Dr Who sur la structure des tables bien que cela ne change rien à l'exercice. Ce genre d'exo était très en vogue en 1983 dans les écoles d'apprentissage a la programmation , a tel point que je voix encore le schéma de programmation (d'une méthode oubliée) dans ma tête . J'ai déjà également dit que Paradox n'etait certainement pas le meilleur choix bien que ce fut un très bon outil (au siècle dernier) quand les SGBD n'existaient pas encore.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  20. #40
    Membre éprouvé
    Homme Profil pro NABIL
    Enseignant
    Inscrit en
    août 2008
    Messages
    511
    Détails du profil
    Informations personnelles :
    Nom : Homme NABIL
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 511
    Points : 454
    Points
    454

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    non, cela veut simplement dire que le EOF est mal géré .
    c'est encore plus vrai de dire que tes modifications sont responsables de l'erreur. Pour preuve , le dernier code mettant le tout dans un memo donnait le résultat correct.
    Serge: merci pour tes bonnes remarques.

    Oui c'est sûr que le EOF est mal géré car si on ajoute un ID_Client dont la Localité est la même pour la suite de série, il y est!

    ex: Paris :1,29-50,120-129,990-1020=> 1,29-50,120-129,990

    résultat ok après insertion:
    1,29-50,120-129,990[COLOR="rgb(46, 139, 87)"]-1020[/COLOR] , 2025


    je n'ai pas fait la bonne correction

    Citation Envoyé par SergioMaster Voir le message
    Code ça c'est pour la forme :
    1
    2
    3
    4
    5
    6
    7
     
    Query1.Active := False;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT LOCALITE,NUMERO FROM CLIENTS  WHERE  Localite=:L');
    Query1.SQL.Add(' ORDER BY LOCALITE,NUMERO');
    Query1.ParambyName('L').asString:=DBEdit2.Text;
    Query1.Active:=True;
    J'ai essayé hier avec une requête paramétrée ,elle donne le même résultat que
    pour
    Code :
    WHERE  Localite='''+DBEdit2.Text+'''
    Citation Envoyé par SergioMaster Voir le message
    je suis d'accord avec Dr Who sur la structure des tables bien que cela ne change rien à l'exercice. Ce genre d'exo était très en vogue en 1983 dans les écoles d'apprentissage a la programmation , a tel point que je voix encore le schéma de programmation (d'une méthode oubliée) dans ma tête . J'ai déjà également dit que Paradox n'etait certainement pas le meilleur choix bien que ce fut un très bon outil (au siècle dernier) quand les SGBD n'existaient pas encore.
    Oui, je suis tout à fait d'accord avec vous sur le choix de la BD Paradox, d'ailleurs je l'ai déjà dit.

    Au début de ce topic, j'ai dit que je veux améliorer une vieille application faite avec Paradox comme BD.

    Citation Envoyé par SergioMaster Voir le message
    pour le fond : s'il n'y a qu'une seule localité , alors il n'y a pas lieu d'utiliser le test sur le changement de localisation.
    Oui dans la mesure où on cherche à filtrer la query une une seul localité,
    mais dans le cas contraire ,on fait le Select déjà cité:
    Code :
    1
    2
    3
    4
    5
    6
    Query1.Active := False;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT LOCALITE,NUMERO FROM CLIENTS  WHERE  Localite=:L');
    Query1.SQL.Add(' ORDER BY LOCALITE,NUMERO');
    Query1.ParambyName('L').asString:=DBEdit2.Text;
    Query1.Active:=True;
    A+

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •