Bonjour

MSSQL Server 2008 - Delphi7 - SQL Management Studio 2008 - Winddows XP SP3

Composants : ADOConnection, ADOQuery, DataSource

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
//Chn = La requête SQL
ADOQuery1.SQL.Add(Chn);
ADOQuery1.Active:=true;
Les requêtes suivantes sont acceptées dans l'application et renvoient les données :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT * FROM MaTable
SELECT * FROM MaTable WHERE NoDeSerie = 125
SELECT * FROM MaTable WHERE ID = 8

Dans l'application les requêtes suivantes retournent le message d'erreur : "ADOQuery1 : Champ 'ID' non trouvé." où ID est la clé primaire autoincrémentée de la table.
Par contre dans SQL Management Studio 2008 pas de problèmes, l'envoi de la requête provoque bien l'affichage des données.

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT MAX(NoDeSerie) FROM MaTable
SELECT MAX(NoDeSerie) AS GRAND FROM MaTable

Ce problème est intermédiaire à une autre question : je fais un
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT * FROM MaTable WHERE NoDeSerie = 125
J'obtiens plusieurs enregistrements où le champ NoDeSerie vaut 125
Je veux récupérer le dernier enregistrement (le plus récent) de cette sélection c'est à dire celui dont l'ID (clé primaire autoincrémentée)
est le plus élevé.
d'où une syntaxe (non acceptée bien sur) qui traduit l'idée :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT * FROM MaTable WHERE NoDeSerie = 555 AND ID = MAX(ID)

Donc
1 ère question : pourquoi la requête SELECT MAX(NoDeSerie) FROM MaTable n'est pas acceptée

2 ème question : quelle syntaxe SQL utiliser pour obtenir l'enregistrement le plus récent

Merci de vos réponses