Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/02/2013, 14h40   #21
edam
Membre Expert
 
Avatar de edam
 
Homme said
Développeur Delphi/c++/Omnis
Inscription : décembre 2003
Messages : 1 789
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 789
Points : 2 392
Points : 2 392
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
edam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2013, 16h22   #22
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 10h49   #23
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 207
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 207
Points : 7 265
Points : 7 265
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 15h33   #24
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 15h34   #25
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 17h28   #26
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 207
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 207
Points : 7 265
Points : 7 265
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
Citation:
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 18h11   #27
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2013, 08h59   #28
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 207
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 207
Points : 7 265
Points : 7 265
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2013, 16h43   #29
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 14h11   #30
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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+
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 14h36   #31
Rayek
Modérateur
 
Avatar de Rayek
 
Homme
Développeur informatique
Inscription : mars 2005
Messages : 4 991
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
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 : 4 991
Points : 7 729
Points : 7 729
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
Rayek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 14h58   #32
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 207
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 207
Points : 7 265
Points : 7 265
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 17h48   #33
edam
Membre Expert
 
Avatar de edam
 
Homme said
Développeur Delphi/c++/Omnis
Inscription : décembre 2003
Messages : 1 789
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 789
Points : 2 392
Points : 2 392
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
edam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 18h47   #34
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 19h11   #35
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
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!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 19h23   #36
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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+
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 23h27   #37
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
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!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 07h54   #38
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 08h48   #39
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 207
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 207
Points : 7 265
Points : 7 265
Citation:
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
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2013, 09h34   #40
NABIL74
Membre éprouvé
 
Homme NABIL
Enseignant
Inscription : août 2008
Messages : 482
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 : 482
Points : 431
Points : 431
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+
NABIL74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h20.


 
 
 
 
Partenaires

Hébergement Web