te56350
Messages postés6Date d'inscriptionjeudi 28 décembre 2000StatutMembreDernière intervention27 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
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;
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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
te56350
Messages postés6Date d'inscriptionjeudi 28 décembre 2000StatutMembreDernière intervention27 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.
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 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.
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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
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;