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 :

chercher l'index maxi d'une table


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut chercher l'index maxi d'une table
    j'ai une bdd MsAccess nommée data.mdb contenant une table client
    cette table client contient un index(primary key) mais la table est dans le désordre cad que les index ne se suive pas.
    comment mettre dans une variable l'index maxi?
    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Je ne connais pas Access mais peut être que ceci fonctionnera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(CHAMP) FROM TABLE
    Si j'ai bien compris

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    j'ai utilisé la faq de NONO40 pour cree une connection avce MsAcess.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    type
    Table1: TTable;
     Database1: TDatabase;
    et la 
    procedure indexmaxi((Sender: TObject);
    var indexmaxi=integer;
    begin
    DataBase1.Open;
    Table1.Open ;
    indexmaxi:= SELECT MAX(Code) FROM Table1
     
    end;
    il y des erreurs, si vous povze m'aider..
    nb je veur récuperer la valeur maxi dans la variable indexmaxi

    [Modération, Seb : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    j'ai reesayé comme ceci
    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
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        Button1: TButton;
        IdHTTP1: TIdHTTP;
        Table1: TTable;
        Database1: TDatabase;
        Label2: TLabel;
        Query1: TQuery;
    procedure Tform1.indexmaxi(Sender: TObject);
    var indexmaxi:string;
        Code:string;
        TEXT:string;
    begin
        DataBase1.Open;
        Table1.Open ;
        Query1.SQL.TEXT:= 'SELECT MAX(Code) FROM EnteteCdeClient';
         Label2.caption := TEXT;
         application.ProcessMessages;
     
    end;
    label2 me sert de visualiser l'index maxi mais le code ne fonctionne pas

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Hum ton code ne fonctionne pas n'est pas vraiment précis, si tu pouvais nous donner l'erreur retournée par le compilo ou...

    A première vue, tu n'as pas l'air d'exécuter ta requête, à moins que je me trompe totalement vu que j'utilise SQLite. Je ferais plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure Tform1.indexmaxi(Sender: TObject); 
    begin 
        DataBase1.Open; 
     
        Query1.SQL.TEXT:= 'SELECT MAX(Code) FROM EnteteCdeClient'; 
     
        Table1.Open ;
     
        Label2.caption := Query1.FieldByName('Code').AsString; 
    end;

  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 770
    Points
    2 770
    Par défaut
    salut
    si ta table est index et tu veu savoir le maxi par cet index alors pourqoi pas simplement le triee celon cet index et chercher le dérnier element de votre table

  7. #7
    Membre actif Avatar de JerryMouse
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 215
    Points : 295
    Points
    295
    Par défaut
    C'est comme le dit PyRoFlO Mais son code contient des erreurs.
    Fais ceci

    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
    procedure Tform1.indexmaxi(Sender: TObject); 
      Var Query1: Tquery;
    begin 
      Query1 := TQuery.Create(Application);
      With Query1 do Begin
        DataBasename := 'TaBasedeDonnée';
        With Sql Do Begin
          Clear;
          Add( 'SELECT MAX(Code) FROM EnteteCdeClient'); 
        End;
        Open ; 
        Label2.caption := FieldByName('Code').AsString; 
        Close; 
        Free;
      End;
    end;

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    par conscience j'ai utilisél'inspecteur d'objet
    DatabaseName=olivercreation (cree selon la faq cf Msaccess indiquant le chemin de la bdd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type
    Table1: TTable;
    Database1: TDatabase;
    Query1: TQuery;
    DataSource1: TDataSource;
    j'ai ajouter un tbgrib pour affciher les données
    dans l'inpecteur d'objet query1 rubriquesql j'y ai mis
    SELECT MAX (Code) FROM EnteteCdeClient
    pb on m'affiche sur le grid1 le dernier champ
    pour info le champ code conteint des valeurs dans le désordre, le dernier champ n'étant pas l'index maxi.
    en regardant la table, ce champ est un champ texte.

    autre requete sql à me formuler (je veux recupérer l'index maxi dans une variable)
    ou
    boucle à faire (que je ne sais pas faire) lisant chaque ligne de la bdd ,teste le champ Code et récupérant la valeur maximale.

    merci de m'aider[/code][/quote]

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par picoti2
    en regardant la table, ce champ est un champ text
    Je te conseille de modifier le type de ce champ...........

    Citation Envoyé par picoti2
    autre requete sql à me formuler
    LOL
    Tu sais, les FAQs et docs sont accessibles à tous, tu pourrais y (re)jeter un oeil parce que la fonction MAX() par exemple est très courante en SQL...

    Citation Envoyé par picoti2
    boucle à faire (que je ne sais pas faire)
    Ce site est bourré de tutos, perso j'ai appris à me servir d'une BDD en Delphi grâce à ce site, à ces cours.
    Je pense que tu pourrais en faire autant !

    Ces forums sont faits pour apprendre, progresser et non régler tels ou tels problèmes sans rien y comprendre.
    T'aider c'est une chose, faire ton travail en est une autre.

    http://sqlpro.developpez.com/SQL_AZ_F.htm#FONCT_AGREGAT

  10. #10
    Membre habitué Avatar de alexmorel
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2003
    Messages : 196
    Points : 157
    Points
    157
    Par défaut tiens
    si ton champ est de type texte fais un order by

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Add( 'SELECT *FROM EnteteCdeClient order by (Code) ');

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut en partie résolu
    j'ai remodofie la requete qui marche, il me manque qu'a récuperer le champ code de la dernier ligne du select order by
    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
     
    procedure TForm1.indexmaxi(Sender: TObject);
    var
    index:Integer;
    Query2: Tquery;
     
    begin
     
      Query2 := TQuery.Create(Application);
      With Query2 do Begin
        DataBasename := 'olivercreation';
        With Sql Do Begin
          Clear;
          Add( 'SELECT EnteteCdeClient.Code  FROM EnteteCdeClient Order By Date');
        End;
        Open ;
    {ici il faut récupérer la derniere lligne du select et le champ code associé}
        Label2.caption := FieldByName('Code').AsString;
        Close;
        Free;
      End;
    end;

  12. #12
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Au lieu de récupérer la dernier ligne tu peux récupérer la première ligne en modifiant ta requête de la façon suivante: (effectuer un tri descendant)
    Instruction DESC avec ORDER BY


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Add( 'SELECT EnteteCdeClient.Code  FROM EnteteCdeClient Order By   Date DESC');
    Autre méthode après ton open tu place un Last;

    Personnellement je privilégie la première méthode donc cela donnerait
    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
     
    procedure TForm1.indexmaxi(Sender: TObject); 
    var 
    index:Integer; 
    Query2: Tquery; 
     
    begin 
     
      Query2 := TQuery.Create(Application); 
      With Query2 do Begin 
        DataBasename := 'olivercreation'; 
        With Sql Do Begin 
          Clear; 
          Add( 'SELECT EnteteCdeClient.Code  FROM EnteteCdeClient Order By Date DESC'); 
        End; 
        Open ;  
        Label2.caption := FieldByName('Code').AsString; 
        Close; 
        Free; 
      End; 
    end;
    Attention ajoute un try ... except ... end pour gérer l'eventualité d'une erreur à l'ouverture avec OPEN

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    merci infiniment cela marche.

  14. #14
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 94
    Points : 73
    Points
    73
    Par défaut
    Si ton index primaire est constitué du champ code, il y a vraiment plus simple à Faire.

    MaTable.Open;
    Matable.LAst;
    Max := Matable.FieldByname('Code').Asstring;
    et le tour est joué.

    Bon courage!

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

Discussions similaires

  1. Copie d'indexs, contraintes d'une table A vers une table B
    Par Heytabernak dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 29/08/2008, 13h10
  2. Réponses: 1
    Dernier message: 11/06/2008, 13h33
  3. Regénération d'index corrompu d'une table Dbase(*.cdx)
    Par helmis dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/03/2008, 19h40
  4. Pb du nombre d'index pour lier une table
    Par caballero dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2007, 14h15
  5. Nombre de ligne maxi dans une table ACCESS
    Par ygiraudeau dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 17h23

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