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
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
Je ne connais pas Access mais peut être que ceci fonctionnera:
Si j'ai bien compris
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT MAX(CHAMP) FROM TABLE![]()
j'ai utilisé la faq de NONO40 pour cree une connection avce MsAcess.
il y des erreurs, si vous povze m'aider..
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;
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]
j'ai reesayé comme ceci
label2 me sert de visualiser l'index maxi mais le code ne fonctionne pas
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;
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;![]()
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
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;
par conscience j'ai utilisél'inspecteur d'objet
DatabaseName=olivercreation (cree selon la faq cf Msaccess indiquant le chemin de la bdd)
j'ai ajouter un tbgrib pour affciher les données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6type Table1: TTable; Database1: TDatabase; Query1: TQuery; DataSource1: TDataSource;
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]
Je te conseille de modifier le type de ce champ...........Envoyé par picoti2
LOLEnvoyé par picoti2
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...
Ce site est bourré de tutos, perso j'ai appris à me servir d'une BDD en Delphi grâce à ce site, à ces cours.Envoyé par picoti2
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
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) ');
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;
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
Autre méthode après ton open tu place un Last;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Add( 'SELECT EnteteCdeClient.Code FROM EnteteCdeClient Order By Date DESC');
Personnellement je privilégie la première méthode donc cela donnerait
Attention ajoute un try ... except ... end pour gérer l'eventualité d'une erreur à l'ouverture avec OPEN
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;
merci infiniment cela marche.
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!
Partager