Accéder à un champ d'une table sous Delphi5

cs_Jupiter58 Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 22 juin 2011 - 22 mai 2010 à 02:28
cs_Jupiter58 Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 22 juin 2011 - 22 mai 2010 à 15:39
Salut, j'ai réalisé une table sous Delphi5, et je la affiché sur le DBGrid, mais j'ai pas réussi à accéder aux champs de la table, voila j'ai utilisé cette instruction:
TTable1.message-recu.Value
mais je reçois ce message d'erreur: identificateur non déclaré 'message'!
même quand j'utilise le nom réel de la table comme suit:
TTrafic.message-recu.Value il m'affiche ce message d'erreur : TTrafic identificateur non déclaré!!!!!!
Je sais pas ou est le problème , aidez moi S.V.P
Merci.


A travers la discussion j'allie  la lumière.

5 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
22 mai 2010 à 10:32
Salut.

Houla, que d'erreurs !
Ce qui démontre que tu n'as pas consulté l'aide de Delphi ou des tutoriels !

1) "message-recu" : n'est pas un nom de champ valide. Tu dois respecter les caractères autorisés comme pour déclarer une variable. Le signe "-" est un opérateur, donc interdit. "message_recu" = ok.
Conseils: n'utilise que des lettres (sans accents), des chiffres et "_", mets un nom de champ le plus court possible, et perso, je mets toujours les identificateurs de champs en majuscules: ce qui donnerait ici : "MSG_REC".
2) "TTable1.message-recu.Value" : après "TTable1.", Delphi attend une propriété ou une fonction du composant TTable. Consulte l'aide sur TTable et tu verras toutes les propriétés. Pour lire ou écrire la valeur d'un champ, il y a 2 solutions :

Edit1.Text:= TTable1.FieldValues['MSG_REC'];
Comme FieldValues retourne un variant, je préfère cette solution :
Edit1.Text:= TTable1.FieldByName('MSG_REC').AsString;

Consulte l'aide Delphi !!!

A +
Thierry
0
cs_Jupiter58 Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 22 juin 2011
22 mai 2010 à 13:55
Bonjour, Merci bien Thierry , j'ai essayé cette instruction, j'ai réussie dans la phase de compilation mais j'ai pas pu éxecuter le programme, voila l'instruction que j'ai utilisé:
Table1.FieldValues['Recu']='1' , je veux dire si le champ MESSAGE REÇU est à 1 alors ...
Est ce que cette instruction est valide?
Je vous remerciez pour la deuxième fois.


A travers la discussion j'allais  la lumière.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
22 mai 2010 à 14:14
"si le champ MESSAGE REÇU est à 1 alors ..."
Donc tu veux lire la valeur du champ et non pas la modifier !

if Table1.FieldValues['Recu'] = '1' then ...
ou, je préfère :
if Table1.FieldByname('Recu').asString = '1' then ...

Avec ton code Table1.FieldValues['Recu']:= '1' : tu modifies la valeur du champ.
Ce qui ne marchera pas, car ta table n'est pas en mode édition.

Pour modifier la valeur d'un champ de l'enregistrement en cours :

Table1.Edit; // mise en mode édition de la table
Table1.FieldByName('Recu').asString: = '1'; //affectation de la valeur
Table1.Post; // enregistrement de la modification

A +
Thierry
0
cs_Jupiter58 Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 22 juin 2011
22 mai 2010 à 14:20
Merci beaucoup .

A travers la discussion j'allais  la lumière.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jupiter58 Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 22 juin 2011
22 mai 2010 à 15:39
Salut, j'ai n'arrive pas à exécuter le programme, voila le code complet, Est ce que vous pouvez m'aidez?

procedure TForm1.Button1Click(Sender: TObject);
var mp,i,k, L:integer; ic, c : string;
T:array [1..20] of string;
v:boolean;
begin

for i:=1 to 10 do
Begin
ic := 'c' + IntToStr (i);
mp:=0;
k:=0;
table1.first;
While not Table1.Eof do
begin
if (Table1.FieldByname('Recu').asString ='1') and (Table1.FieldByname('Type-msg').asString= 'Forward') and (Table1.FieldByname('Capteur').asString=ic) then
begin
k:=k+1;
T[k]:= Table1.FieldByname('ID-msg').asString;
end;

table1.next;
end;


FOR L:= 1 TO k do
Begin
table1.first;
v:=false;
While (not Table1.Eof) and (v=false) do
begin
if (Table1.FieldByname('Msg-envoyé').asString'1') and (Table1.FieldByname('Type-msg').asString 'Forward') and (Table1.FieldByname('Capteur').asString =ic) then
begin
if Table1.FieldByname('ID-msg').asString =T[L]then
v:=true;
end;
table1.next;
end;
If v=false then
begin
mp:=mp+1;
end;

if mp>5 then
begin
table2.edit;
Table2.FieldByName('capteur').asString:= 'ic';
Table2.FieldByName('Regle').asString :='R3';
Table2.FieldByName('Etat').asString:= 'Anormal';
Table2.post;
end
else
begin
table2.edit;
table2.fieldByName('capteur').AsString:='ic';
table2.fieldByName('regle').AsString:='R3';
table2.fieldByName('ETAT').AsString:= 'Normal';
end;

end;
end;
end;
end.

ic représente les capteur de c1 à c10.
Voila le message d'erreur: [Conseil] Unit1.pas(35): La variable 'c' est déclarée mais jamais utilisée dans 'TForm1.Button1Click'

Quand je l'exécute il fais le parcours de c1 à c10 sans rien faire.

Merci.

A travers la discussion j'allais  la lumière.
0
Rejoignez-nous