[Delphi] Ca marche là-bas et pas ici... /début de solution/

Ca marche là-bas et pas ici... /début de solution/ [Delphi] - Programmation

Marsh Posté le 25-11-2001 à 14:23:38    

C'est à dire,
Dans un projet déja pas mal avancé, les instructions pour parser un fichier texte (ReWrite, CloseFile) génèrent une erreur d'entrée/sortie, alors que dans un projet vierge, elles marchent sans problème...  :??:  
 
Qu'est-ce qui dans un projet peut faire merder ce genre de commandes ?

 

[edtdd]--Message édité par ciler--[/edtdd]

Reply

Marsh Posté le 25-11-2001 à 14:23:38   

Reply

Marsh Posté le 25-11-2001 à 14:33:39    

fichier non fermé à un moment ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-11-2001 à 14:36:29    

:( NOn, c'est le seul moment dans l'appli ou j'ouvre/edite/ferme un fichier


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 25-11-2001 à 14:39:47    

C quoi commes les erreurs ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 25-11-2001 à 14:55:46    

C'est une erreur d'entrée sortie, mais j'ai plus le n° en tête...


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 25-11-2001 à 15:26:26    

ciler a écrit a écrit :

C'est une erreur d'entrée sortie, mais j'ai plus le n° en tête...  




 
Benh quand tu le vois, tu le note puis tu fais CTRL+F1 tu regardes I/O Error et tu verras ce que c'est... Mais sans le numéro, on sait rien, mais alors rien faire pour toi...  :heink:

Reply

Marsh Posté le 26-11-2001 à 07:49:38    

:D J'ai les numéros, vous allez voir c'est fun
Je fais AssignFile puis
CloseFile -> Erreur 103 "fichier non ouvert"
ReWrite -> Erreur sans numéro
 
Mais...
Si j'utilise ces fonctions dans la procédure Click d'un bouton, ça marche sans erreur (jusque la, elles étaient dans une procédure à part et  :o qd j'appelais la procédure)


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 15:07:31    

T'as un bug dans ton code....
T'appelle deja close dans un evenement ou un truc comme ça...... non ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 26-11-2001 à 19:08:57    

[SDF]Poire a écrit a écrit :

T'as un bug dans ton code....
T'appelle deja close dans un evenement ou un truc comme ça...... non ?  




 
Ben non... et c'est bien le problème... J'ai rien qui se rattache à la fermeture d'un fichier (à part un fichier qui est ouvert/parsé/refermé par une dll, mais ça m'étonnerais que le pb vienne de là). De toute façon, je vais re-tester sur un projet vierge en mettant le traitement de fichier en procédure seule ou dans un bouton.


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 19:16:02    

Et t'as pas des pb à l'ouverture ? (Tu fais la gestion des erreurs ?)

 

[edtdd]--Message édité par [SDF]Poire--[/edtdd]


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 26-11-2001 à 19:16:02   

Reply

Marsh Posté le 26-11-2001 à 19:18:14    

tu peux mettre le code exaste, demoin depuis l'ouverture jusqu'a la fermeture :)
 
j'ai peux être une idée mais je veux voir le code avant ;)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 26-11-2001 à 19:24:38    

procedure TFormMain.MakeCommandLine();
var
   LSTFile: TextFile;
Begin
   LSTCount := LSTCount + 1; //LSTCount est une variable locale de TFormMain
   AssignFile(LSTFile, 'C:\test.txt');
   CloseFile(LSTFile); <- Et là, erreur 103
end;
 
Euh, si tu veut le code du projet in-extenso... J'ai peur qu'il fasse un peu 3 unités et pas mal de lignes...

 

[edtdd]--Message édité par ciler--[/edtdd]


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 19:53:50    

ciler a écrit a écrit :

procedure TFormMain.MakeCommandLine();
var
   LSTFile: TextFile;
Begin
   LSTCount := LSTCount + 1; //LSTCount est une variable locale de TFormMain
   AssignFile(LSTFile, 'C:\test.txt');
   CloseFile(LSTFile); <- Et là, erreur 103
end;
 
Euh, si tu veut le code du projet in-extenso... J'ai peur qu'il fasse un peu 3 unités et pas mal de lignes...  
 
 




Elle est où la gestion des erreurs ?
Pq tu l'ouvres pour le fermer tout de suite ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 26-11-2001 à 19:54:59    

Ben, si je fais ReWrite, ça merde aussi
J'ai pas fait de gestion d'erreur parce-que il devrait pas encore y avoir d'erreur à ce niveau...


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 19:56:38    

ciler a écrit a écrit :

Ben, si je fais ReWrite, ça merde aussi
J'ai pas fait de gestion d'erreur parce-que il devrait pas encore y avoir d'erreur à ce niveau...  




Fais la tjs on sait jamais.....


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 26-11-2001 à 19:58:28    

T sur que ton fichier n'est pas déjà ouvert ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 26-11-2001 à 20:01:41    

Certain ! :cry:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 20:09:45    

avant de pouvoir écrire dans ton fichier tu dois l'ouvrir avec reset (après assignfile)

Reply

Marsh Posté le 26-11-2001 à 20:14:27    

Idem barre, erreur avec reset comme avec ReWrite...


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 26-11-2001 à 20:46:29    

Donne la valeure de LSTFile


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 27-11-2001 à 13:05:59    

Comment je fais ça ? LSTFile, c'est un nombre ? (Pour moi, c'est un TextFile, donc une référence à un fichier, mais peut-être que cette ref est un entier ?)


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 27-11-2001 à 19:52:22    

ciler a écrit a écrit :

Comment je fais ça ? LSTFile, c'est un nombre ? (Pour moi, c'est un TextFile, donc une référence à un fichier, mais peut-être que cette ref est un entier ?)  




C un handle tu peux lire ça valeur (dans le pire des cas debugger->evaluer)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 27-11-2001 à 20:39:05    

:jap:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 27-11-2001 à 20:40:50    

ciler a écrit a écrit :

:jap:  




Ca me dit po sa valeur.....


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 28-11-2001 à 09:37:51    

Ca voulait dire merci... POur la méthode de récupérage...
 
Sauf qu'aucune ne marche, impossible de savoir la valeur :??:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 28-11-2001 à 12:36:14    

pose un point d'arrêt sur la ligne où ça merde (clique gauche sur coté gauche de la fiche de code), F9, hop ! ça passe directement en debug au niveau du pt d'arrêt, puis laisse le curseur de ta souris sur la variable dont tu veux connaitre la valeur, si il te dit valeur inaccessible, tu fais F7 pour qu'il passe à la ligne suivante et pour qu'il évalue l'expression, si t'as pas de ligne suivante, fais-en une bidon ( i := 0, par exple)
et puis récupère qd même les erreurs à l'ouverture, ça poura t'aider à comprendre ce qu'il se passe.

Reply

Marsh Posté le 28-11-2001 à 12:36:27    

pose un point d'arrêt sur la ligne où ça merde (clique gauche sur coté gauche de la fiche de code), F9, hop ! ça passe directement en debug au niveau du pt d'arrêt, puis laisse le curseur de ta souris sur la variable dont tu veux connaitre la valeur, si il te dit valeur inaccessible, tu fais F7 pour qu'il passe à la ligne suivante et pour qu'il évalue l'expression, si t'as pas de ligne suivante, fais-en une bidon ( i := 0, par exple)
et puis récupère qd même les erreurs à l'ouverture, ça poura t'aider à comprendre ce qu'il se passe.

Reply

Marsh Posté le 28-11-2001 à 12:36:55    

pose un point d'arrêt sur la ligne où ça merde (clique gauche sur coté gauche de la fiche de code), F9, hop ! ça passe directement en debug au niveau du pt d'arrêt, puis laisse le curseur de ta souris sur la variable dont tu veux connaitre la valeur, si il te dit valeur inaccessible, tu fais F7 pour qu'il passe à la ligne suivante et pour qu'il évalue l'expression, si t'as pas de ligne suivante, fais-en une bidon ( i := 0, par exple)
et puis récupère qd même les erreurs à l'ouverture, ça poura t'aider à comprendre ce qu'il se passe.

Reply

Marsh Posté le 28-11-2001 à 12:48:34    

Merci, mais comme je l'ai déja dit :

Citation :


Sauf qu'aucune ne marche, impossible de savoir la valeur  


 
[SDF]Poire m'a déja expliqué comment faire mais ça ne marche pas, c'est tout !
 
Au fait, testé sur projet vierge, que les procédures d'I/O sur un fichier texte soient passées dans le code d'un bouton ou une procédure, elles fonctionnent.
Dans mon prjet, elles fonctionnent seulement dans un code de bouton :??: Il doit y avoir un problème de déclaration...
 
PS : je suis pas exactement un newbie en prog... Donc l'art du debuggage, c'est les premières recherches que j'ai fait. Quand à de la gestion d'erreur, je refuse d'en faire parce-qu'a ce niveau de codage c'est pas admissible, il n'y a aucune opération à risque d'erreur dans mon programme.


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 03-12-2001 à 09:26:01    

:D J'ai trouvé la cause du problème... sans me l'expliquer pour autant...
 
Je résume tout :  
Dans un projet, les instructions d'entrée/sortie d'un fichier texte provoquent toutes une erreur (103 ou fichier non ouvert) sauf AssignFile si elles sont placées dans une procédure qui dépend directement d'unTForm. Par  contre pas d'erreur si elles sont dans le code Click d'un bouton par exemple. :??:
Après plusieurs heures de début, j'ai finis par déterminer d'où vient le problème.  
Dans ma Form, j'ai un TFileListBox et un TDriveComboBox.  
Dans le code onChange du TDriveComboBox, j'ai la ligne

Citation :


FileListBox.Directory := DriveComboBox.Drive + ':\MyDir\';


Eh bien si je met cette ligne en commentaire, les erreurs d'E/S disparaissent :??:
 
A votre avis, quelle est la relation ?
 
Et une remarque en passant :
- Créez un projet vierge, mettez y un TDriveComboBox et dans le code onChange de celui-ci, mettez la ligne

Citation :


ShowMessage(DriveComboBox.Drive);


Chez moi, si je change le disque dans le combo à l'exécution, le message apparait 2 fois  :(  
Et chez vous, ça fait ça aussi ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 03-12-2001 à 10:05:00    

ces trucs genre DriveComboBox c'est de Win3.1 c'est pas recommandé de l'utiliser.
pour remplacer DriveComboBox/DirectoryListBox en Delphi 6 y a le ShellTreeView ou ShellComboBox.
et pour remplacer FileListBox y a le ShellListView
c'est plus joli et je pense que ça pose moins de problèmes.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-12-2001 à 10:55:02    

antp a écrit a écrit :

 
c'est plus joli et je pense que ça pose moins de problèmes.  




 
Ben oui, mais dans mon cas, j'ai besoin de sélectionner un lecteur (DD ou CD), et pas le bureau ou la corbeille, alors comment je peut faire sans DriveComboBox ?
 
(a si, mettre une gestion d'erreur qui sort si bureau sélectionné...)


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 03-12-2001 à 11:10:57    

y a pas moyen de restreindre la sélection possible ?
 
edit: non apparemment pas :(

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed