mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006
-
8 nov. 2006 à 23:56
mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006
-
9 nov. 2006 à 11:06
Salut à tous,
j'essaye d'effectuer un certain rangement (classement) pour les valeurs d'un champ au sein d'un ADOQuery,
La procédure se fait en clquent sur un bouton:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
i:=1;
ADOQuery1.Active:= False;
ADOQuery1.SQL.Text:='Select * From Releve Order by Note DESC';
// Releve: nom de la table dans ma base de données access
// Note: nom du champ contenant des integers
ADOQuery1.Active:= True;
// --> Jusque là, tout est reglo... le DBGrid affiche les valeurs ordonnés.
ADOQuery1.Edit;
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
ADOQuery1.FieldByName('NRang').AsInteger:= i;
//NRang: champ vide où sera donné le classement 1,2,3... des notes
i:=i+1;
ADOQuery1.Next;
//--> Il ne m'intéresse pas que les doublons n'auront pas le même rang
//--> Ce problème ce reglé après
End;
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 9 nov. 2006 à 00:09
Cela provient des deux lignes suivantes :
ADOQuery1.Edit;
ADOQuery1.First;
Dans un premier temps, tu places l'ensemble de données en mode édition. Hélas, l'appel de la méthode First place ce même ensemble de données en mode dsBrowse.
Voici la correction :
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('NRang').AsInteger:= i;
//NRang: champ vide où sera donné le classement 1,2,3... des notes
i:=i+1;
ADOQuery1.Next; // /!\ provoque un post implicite !
//--> Il ne m'intéresse pas que les doublons n'auront pas le même rang
//--> Ce problème ce reglé après
End;
Désolé si j'ai un peu massacré la mise en page
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 9 nov. 2006 à 08:55
Quand tu es en mode édition et que tu changes d'enregistrement (First, Previous, Next, Last), l'état de l'ensemble de données change et passe à dsBrowse après avoir validé les données de l'enregistrement en cours de modification. Ce qui revient à faire un appel à la méthode Post mais sans le faire explicitement.
Lorsque l'enregistrement courant n'a pas encore été modifié, cela revient à appeler la méthode Cancel, là aussi de manière implicite. Et c'était justement ton problème au niveau de :
ADOQuery1.Edit;
ADOQuery1.First;
Dans le code qui suivait, tu n'étais plus en mode édition comme tu le croyais.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net