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

Messages postés
13
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
22 juin 2011
- - Dernière réponse : 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.
Afficher la suite 

5 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
2
0
Merci
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
Commenter la réponse de ThWilliam
Messages postés
13
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
22 juin 2011
0
Merci
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.
Commenter la réponse de cs_Jupiter58
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
2
0
Merci
"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
Commenter la réponse de ThWilliam
Messages postés
13
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
22 juin 2011
0
Merci
Merci beaucoup .

A travers la discussion j'allais  la lumière.
Commenter la réponse de cs_Jupiter58
Messages postés
13
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
22 juin 2011
0
Merci
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.
Commenter la réponse de cs_Jupiter58