Error E/S 32 sur ecriture et suppresion

Résolu
te56350 Messages postés 6 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 27 avril 2011 - 18 déc. 2008 à 16:21
 Utilisateur anonyme - 19 déc. 2008 à 21:46
slt tt le monde

j'Ai besoin d'une solution pour mon projet en cour SVP

Mon projet gère des comptes utilisAteurs
Et qu'An j'enregistre des comptes çA fonctionne, mAis je ne peux pAs en créer plusieurs A lA suite
Qu'An j'essAye de le fAire il me donne 'error E/S 32' pourtAnt je ferme mon fichier Après Avoir écrit A l'intérieur
Et si j'essAye d'effAcer un compte créé, vu ke j'intervient dAns le même fichier que pour en crer un , il me dit que le fichier est dejA utilisé pAr un Autre processus

Est ce que quelqu'un AurAi une solution SVP ! ! !

Je vous lAisse e code en question pour vous Aidez ! Merci d'AvAnce


<hr />

procedure TForm4.Button1Click(Sender: TObject);begin
    bool:= False;

    If Eid.Text = '' Then
    Begin
            Eid.Color := ClRed;
            bool := true;
    End
    Else
    Begin
      Eid.Color := clwhite;
    End;
    If EId.Text = 'nom utilisateur' Then
    Begin
         EId.Color := clRed;
           bool := true;
    End;
    If EMDP.Text  = '' Then
    Begin
           EMDP.Color := clRed;
           bool := true;
    End
    Else
    Begin
      EMDP.Color  := clwhite
    End;
    If EMDP.Text = 'mot de passe' Then
    Begin
         EMDP.Color := clRed;
           bool := true;
    End;
    If ENom.Text  = ''  Then
    Begin
           ENom.Color := clRed;
           bool := true;
    End
    Else
    Begin
      ENom.Color := clwhite
    End;
    If Enom.Text = 'identifiant' Then
    Begin
         ENom.Color := clRed;
           bool := true;
    End;
    If bool = False Then
    Begin
    if FileExists(ExtractFilePath(Application.ExeName)+'compte.txt') then //evite une erreur I/O si le fichier n'existe pas
    begin

        AssignFile(Fichier,ExtractFilePath(Application.ExeName)+'compte.txt');
        append (fichier);
        nom:= ('identifiant : '+ EID.Text) ;
        writeln (fichier ,nom);
        nom := ('nom utilisateur :' + ENom.Text) ;
        Writeln (fichier, nom );
        nom := ('Mot de passe :' + EMDP.Text) ;
        Writeln (fichier, nom );
        closefile(fichier);
        showmessage('compte enregistré');
    end
    Else
    Begin
      showmessage('pas de fichier ');
    End;

    End;
    If bool = True Then
    Begin

          showmessage('Vous avez oublié de complêter certains champs')  ;
    End;

end;

9 réponses

cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
19 déc. 2008 à 09:58
Bj
  Il semble que tu aies plusieurs problèmes!
  Le code que tu nous donnes ne nous éclaire pas beaucoup sur ton problème!
  Tu sembles utiliser un type textfile pour ton fichier!
  remarques méthode : 
    1. Pourquoi ta variable nom reçoit-elle des données variées (et peut être avariées)?    
    2. Le type record aurait été mieux me semble t-il :
        Type RPersonne = record 
                     identifiant : string ou autre...
                     nom          : string[20] ou autre...
                     nom utilisateur : string[20] ou autre...
                     MotPasse : etc...
                End;
        Ensuite tu déclares un fichier direct de type Fichier : File of  RPersonne
    3.Mettre Flush(fichier) avant le closefile si tu restes en textfile;
    4. Pb écriture de plusieurs fiches
      Où est ta boucle? Comment contrôle-tu la saisie et sa fin?
Etc... Consulte la gestion de fichier dans l'aide ou des exemples sur ce site, tu devrais résoudre ton problème facilement!
Jean_Jean
3
te56350 Messages postés 6 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 27 avril 2011
19 déc. 2008 à 10:10
Merci poour tes infos JeAn_JeAn .

lA vAriAble nom fonctionne bien cAr j'Arrive A écrir dAns le fichier une fois A chAque fois que je lAnce l'Appliction

Merci pour l'idée du type Record mAis jpense rester en Textfile pour le moment .

MAis juste pour info pkoi tu trouve que le Type Record est mieux que leTextFile ?
C petêtre une Question bête mAis pour un débutAnt comme moi c pAs évident de voir lA différence.
 
Et encor merci !!!
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
19 déc. 2008 à 10:38
Pour bien débuter, il faut apprendre avec un manuel. Cherche des tutaux ou imprime l'aide delphi sur les fichiers! Perso, je continue de relire l'aide delphi que j'ai mis dans de gros classeurs, ça fait du bien, on oublie lorsque l'on ne pratique pas tous les jours et ça permet de se recaller correctement d'un point de vue des méthodes...

1. Si tu créé un type RPerconne, tu peux ensuite créer une variable
Var Identite : RPersonne;
Cela permet de manipuler toutes les varaibles de champ de données en une seule fois!

2. Tu écris une seule instruction pour écrire dans le fichier : Exemple
procedure Ecrire(Fichier : string; Identite : RPersonne);
  Var Fic   : File of  RPersonne;
Begin
  try
   {lecture du fichier}
    AssignFile(Fic,Fichier);
    Reset(Fic);
    write(Fic,Identite);
  finally
    CloseFile(Fic);
  end;
end;

Bien sûr avant, tu écris uneprocédure qui affecte les valeurs à identité :
identite.identifiant := 'Valeur';
identite.nom           :='autre valeur chaiine' Etc...
Bon code!
Jean_Jean
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
19 déc. 2008 à 11:19
Bonjour,

Try
------
if FileExists(ExtractFilePath(Application.ExeName)+'compte.txt') THEN
      append(Fichier)
    ELSE
     rewrite(Fichier);
------
------

finally
closefile(fichier);
end;

cantador
0

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

Posez votre question
te56350 Messages postés 6 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 27 avril 2011
19 déc. 2008 à 11:20
Merci bcp pour tes explicAtion

çA fAit plAisir d'être Aidé

Et en plus mon ApplicAtion fonctionne  mAintenAnt !!

 A l prochAine JeAn_JeAn
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
19 déc. 2008 à 11:37
Salut Cantador,

    effectivement, tu peux créer le fichier s'il n'existe pas et éviter une erreur!

Jean_Jean
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
19 déc. 2008 à 13:38
Salut Jean_Jean,

Oui et de plus je pense qu'on peut quand même faire le boulot avec un simple TextFile mais cela dit, je pense comme toi que le type record est mieux à conseiller ne serait ce que pour la suite éventuelle.

Cordialement

cantador
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
19 déc. 2008 à 14:20
@ cantador,

   Cependant le textfile présente quelques inconvénients :
    - 1 ligne d'enregistrement par identifaction
    - Ou alors, il faut concaténer l'info en une seule ligne, c'est faisable pour des petites structures
      mais la longueur des champs doit être fixe pour un décodage correct ou la recherche de séparateur de champs; bref du traitement derrière...
   - Cela dit pour des petites structures, c'est facile, ça m'arrive de l'utiliser encore dans ce cas.
A+
Jean_Jean
0
Utilisateur anonyme
19 déc. 2008 à 21:46
Je suis d'accord avec JeanJean : le type record est mieux

Sinon petite proposition :

procedure TForm4.Button1Click(Sender: TObject);
Var
  i : Integer;
begin
  //Pour tout les composants faire
  For i:=0 To ComponentCount-1 do
  //Si c'est un TEdit et que la propriété text est vide alors
  If (Components[i] is TEdit) And ((Components[i] As TEdit).Text='') Then
    Begin
      //Bool est vrai
      Bool:=True;
      //La couleur du TEdit est rouge
      (Components[i] As TEdit).Color:=ClRed;
    End
  //Sinon elle est blanche
  Else (Components[i] As TEdit).Color:=ClWhite;
end;
0
Rejoignez-nous