Violation d'accès

van6071 Messages postés 20 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 15 mars 2006 - 9 mars 2006 à 16:00
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 9 mars 2006 à 18:12
Bonjour,



J'ai l'erreur suivante lorsque je relance le prog (dans la procédure : procedure TfrmACCUEIL.FormCreate(Sender: TObject);): -

Le projet ProgEuro.exe a déclenché la classe d'exception
EAccessViolation avec le message 'Violation d'accès à l'adresse
0040485F dans le module 'ProgEuro.exe'. Lecture de l'adresse FFFFFFFF'.





Quelqu'un peut m'expliquer quel est mon problème ?




Code

public

{ Déclarations publiques }

type million=record

index: integer;

date: string[20];

n1: integer;

n2: integer;

n3: integer;

n4: integer;

n5: integer;

et1: integer;

et2: integer;

end;

end;



var

frmACCUEIL: TfrmACCUEIL;



implementation



{$R *.dfm}



procedure TfrmACCUEIL.FormCreate(Sender: TObject);



var

tirage: file of million;

euro:million;

begin

AssignFile (tirage,'c:\program files\Euro Million\tirage.del');

if not FileExists('c:\program files\Euro Million\tirage.del') then Rewrite(tirage);

reset(tirage);

if FileSize(tirage)> 0 then

begin



read(tirage,euro);

labnum.Caption:=string(filesize(tirage));

labdat.Caption:=euro.date;

labn1.Caption:=string(euro.n1);

labn2.Caption:=string(euro.n2);

labn3.Caption:=string(euro.n3);

labn4.Caption:=string(euro.n4);

labn5.Caption:=string(euro.n5);

labet1.Caption:=string(euro.et1);

labet2.Caption:=string(euro.et2);



end;

end;



procedure TfrmACCUEIL.btSAISIEClick(Sender: TObject);

var

tirage: file of million;

cpt :integer;

euro:million;

begin

AssignFile (tirage,'c:\program files\Euro Million\tirage.del');

reset(tirage);

cpt:=FileSize(tirage)+1;

euro.index:=cpt;

euro.date:=txtdate.text ;

euro.n1:=integer(txtn1.text);

euro.n2:=integer(txtn1.text);

euro.n3:=integer(txtn1.text);

euro.n4:=integer(txtn1.text);

euro.n5:=integer(txtn1.text);

euro.et1:=integer(txtet1.Text);

euro.et2:=integer(txtet2.Text);

write(tirage,euro);



end;



end.

11 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
9 mars 2006 à 16:19
salut sur quelle ligne plante t il?

mais déjà je pense que faire un reset après un rewrite n'est pas une bonne chose



@+

jlen
0
van6071 Messages postés 20 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 15 mars 2006
9 mars 2006 à 16:22
sur cette ligne

labdat.Caption:=euro.date;
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
9 mars 2006 à 16:28
je regarde mais ou à tu trouvé la fonction string()?
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 mars 2006 à 16:33
Salut,

jlen à raison alors corrige déjà ce qui est en rouge

if not FileExists('c:\program files\Euro Million\tirage.del') then Rewrite(tirage) Else
reset(tirage);
if FileSize(tirage)> 0 then
begin

read(tirage,euro);
labnum.Caption:= string(filesize(tirage));
labdat.Caption:=euro.date;
labn1.Caption:=string(euro.n1); // ici tu corrige toutes les ligne en Labn1.Caption := IntToStrDef(euro.n1);

labn2.Caption: =string(euro.n2);
labn3.Caption:= string(euro.n3);
labn4.Caption:=string(euro.n4);
labn5.Caption:=string(euro.n5);
labet1.Caption:=string(euro.et1);
labet2.Caption:=string(euro.et2);

euro.n1:=integer(txtn1.text); // et ici en Euro.n1 := StrToIntDef(Txtn1.Text);

euro.n2: =integer(txtn1.text);
euro.n3:=integer(txtn1.text);
euro.n4:=integer(txtn1.text);
euro.n5:=integer(txtn1.text);
euro.et1:=integer(txtet1.Text);
euro.et2:=integer(txtet2.Text);

@+
Cirec
0

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

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 mars 2006 à 16:41
petit problème de mise en page. Désolé

et en plus j'ai oublier aussi ceci
labnum.Caption:=string(filesize(tirage)); // à modifier en LabNum.Caption := IntToStr(FileSize(Tirage));

Voilà c'est tout

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
9 mars 2006 à 16:41
bon je ne vois pas autre chose que celle déjà signalée et corrigées par
cirec mais comment as-tu fait pour tester un code qui ne se compile pas?

car même si euro.date est vide la ligne labdat.Caption:=euro.date; plantera pas à l'exécution le label sera vide tout simplement.



@+

jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 mars 2006 à 17:17
tes propos m'ont intrigués alors j'ai tester moi même et effectivement comment as-tu fait pour le tester
Enfin bon comme ça il fonctionne :

procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


million= record // ici tu es encore dans la déclaration de type
index: integer; // donc pas besoin de mette Type devant
date: string[20];
n1: integer;
n2: integer;
n3: integer;
n4: integer;
n5: integer;
et1: integer;
et2: integer;
end;


var
frmACCUEIL: TfrmACCUEIL;


implementation
{$R *.DFM}
procedure TfrmACCUEIL.btSAISIEClick(Sender: TObject);
var
tirage: file of million;
cpt :integer;
euro:million;
begin
AssignFile (tirage,'tirage.del'); // tu rajoutes ton chemin
reset(tirage);
cpt: =FileSize(tirage)+1;
euro.index:= cpt;
euro.date:=txtdate.text ;
euro.n1:=StrToIntDef(txtn1.text,0);
euro.n2:=StrToIntDef(txtn1.text,0);
euro.n3:=StrToIntDef(txtn1.text,0);
euro.n4:=StrToIntDef(txtn1.text,0);
euro.n5:=StrToIntDef(txtn1.text,0);
euro.et1:=StrToIntDef(txtet1.Text,0);
euro.et2:=StrToIntDef(txtet2.Text,0);
write(tirage,euro);
CloseFile(Tirage);
end ;


procedure TfrmACCUEIL.FormCreate(Sender: TObject);
var
tirage: file of million;
euro:million;
begin
AssignFile (tirage,'tirage.del'); // tu rajoutes ton chemin ici et à la ligne suivante
if not FileExists('tirage.del') then Rewrite(tirage);
reset(tirage);
if FileSize(tirage)> 0 then
begin
read(tirage,euro);
labnum.Caption: =IntToStr(filesize(tirage));
labdat.Caption:=euro.date;
labn1.Caption:=IntToStr(euro.n1);
labn2.Caption:=IntToStr(euro.n2);
labn3.Caption:=IntToStr(euro.n3);
labn4.Caption:=IntToStr(euro.n4);
labn5.Caption:=IntToStr(euro.n5);
labet1.Caption:=IntToStr(euro.et1);
labet2.Caption:=IntToStr(euro.et2);
end;
CloseFile(Tirage);
end;
end.

et même pour la petite histoire le reset après le rewrite ça passe il ne fait que remettre le pointeur en début de fichier

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 mars 2006 à 17:22
ps :

en remettant en place le décalage dans la déclaration du Type de fichier le plantait bien à la ligne indiqué mais c'était à cause de la ligne précédente :

labnum.Caption:=string(filesize(tirage));
Voir la bonne méthode plus haut

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
9 mars 2006 à 17:41
je n'avais fait qu'une simulation et donc pas pris en compte la ligne

labnum.Caption:=string(filesize(tirage));

et comme j'avais déclaré le type normalement....



@+

jlen
0
van6071 Messages postés 20 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 15 mars 2006
9 mars 2006 à 18:06
Houla!!

Merci tout le monde, c'est mon premier prog en Delphi alors j'ai acheté un bouquin et dedans il disait que pour faire le transcryption il suffisait de faire comme j'ai écrit.
Mais je crois ce que bouquin n'est pas très fiable.
Pour tester je procédais comme suit.
destruction manuelle du fichier
lancement du prog
entrée des données
validation.

et c'est quand je relancais le prog que ça plantait

Ils vous faudra beaucoup de patiente avec moi car mes neuronnes sont un peu rouillés et je tient à ne pas mourrir complètement idiot alors je m'accroche.

Merci a tous
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
9 mars 2006 à 18:12
pour le transtypage il vaut mieux éviter les mots résevés : si le
compilateur ne rouspète pas (ce qui n'est pas sur) tu risque d'avoir de
désagréables surprises dans le reste du programme quand tu utilseras ce
mot dans sa fonction initiale



@+

jlen
0
Rejoignez-nous