Ciao a tutti.
Sono tornato ancora con questo problema, in parte risolto. Mi spiego meglio: ho un form contenente due Edit, un TMemo, un bottone "Salva" ed un bottone "Apri".
Gli obbiettivi che vorrei raggiungere sono due:
1) salvare i dati contenuti negli Edit e nel TMemo in un file cliccando sul tasto "Salva";
2) aprire il file salvato in precedenza ed inserire i dati nei rispettivi campi.
Con il primo obiettivo non ho avuto problemi mentre ne ho con il secondo.
Quando lancio l'applicazione, se clicco sul bottone "Apri", seleziono il file che mi deve aprire ma mi compare una finestra di "Notifica dell' eccezione del debugger".
Nella finestra è scritto testualmente:"Il progetto project1 ha sollevato una eccezione di classe 'RunError(103)'. In file 'unit1.pas' at line 80: Read (AddrFile, AddrRec);
Cliccando su continua ne apre un'altra con scritto:"Il progetto ha sollevato una eccezione di classe 'EinOutError' con messaggio:File not open. In file 'unit1.pas' at line 80: Read (AddrFile, AddrRec);
Qualcuno sa aiutarmi a risolvere il problema?
Ringraziando chiunque possa aiutarmi, riporto di seguito il codice che ho scritto:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
{ Indirizzo di salvataggio }
type
TAddressRec = record
Testo1 : String [255];
Testo2 : String [255];
Testo3 : String [255];
end;
{ TForm1 }
TForm1 = class(TForm)
ButtonCarica: TButton;
ButtonSalva: TButton;
Edit1: TEdit;
Edit2: TEdit;
Memo: TMemo;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
procedure ButtonCaricaClick(Sender: TObject);
procedure ButtonSalvaClick(Sender: TObject);
public
{ public declarations }
end;
var
Form1: TForm1;
AddrFile : File of TAddressRec;
AddrRec : TAddressRec;
const
MAXRECS = 2000;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.ButtonSalvaClick(Sender: TObject);
var
salvataggio: TAddressRec;
begin
salvataggio.Testo1:= Edit1.Text;
salvataggio.Testo2:= Edit2.Text;
salvataggio.Testo3:= Memo.Text;
If Savedialog.Execute then
assignfile (AddrFile,Savedialog.FileName);
If FileExists (Savedialog.FileName) then
begin
Reset (AddrFile);
end
else
Rewrite (AddrFile);
with AddrRec do
begin
Testo1:= Edit1.Text;
Testo2:= Edit2.Text;
Testo3:= Memo.Text;
end;
write (AddrFile, AddrRec);
end;
procedure TForm1.ButtonCaricaClick(Sender: TObject);
begin
try
if opendialog.Execute then
if fileexists (Opendialog.Filename) then
Read (AddrFile, AddrRec);
with AddrRec do
begin
Edit1.Text:= Testo1;
Edit2.Text:= Testo2;
Memo.Text:= Testo3;
end;
finally
end;
end;
end.
Ciao,
http://www.frameworkpascal.com/helphtml/run_errors.htm
Il file non sembra essere aperto.
In caso di salvataggio fai così:
If Savedialog.Execute then
assignfile (AddrFile,Savedialog.FileName);
If FileExists (Savedialog.FileName) then
begin
Reset (AddrFile);
end
else
Rewrite (AddrFile);
in lettura :
if fileexists (Opendialog.Filename) then
Read (AddrFile, AddrRec);
with AddrRec do
Dovresti aprirlo ...
http://www.freepascal.org/docs-html/rtl/system/reset.html
Ciao Stilgar. Grazie per l'aiuto.
Anche io ho pensato che il file non sembrava aperto, ma non capisco dove sbaglio.
Prima di questa istruzione: Read (AddrFile, AddrRec);
devi aprire il file con:
Alla fine sia della routine di scrittura che di quella di lettura, devi chiudere il file con:
Ciao, Mario