aleem
aleem

Reputation: 11

Saving record to file Error 'file access denied'

When I run my code an select the save button which i created. The record doesnt save but i get an error 'file access denied'.

my code :

The code i split into 2 units MainUnit and AddTenantUnit.

I think the problem lies within the procedure at the end of the code. If you scroll down I made it clear which procedure (TAddTenantForm.SaveButtonClick).

unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMainForm = class(TForm)
    AddTenantButton: TButton;
    procedure FormCreate(Sender: TObject);
    procedure AddTenantButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TTenantRecord = record
    FirstName : string[20];
    LastName : string[20];
  end;

var
  MainForm: TMainForm;
  Tenant : TTenantRecord;
  TenantFile : file of TTenantRecord;

implementation

uses AddTenantUnit;

{$R *.dfm}

procedure TMainForm.AddTenantButtonClick(Sender: TObject);
begin
  AddTenantForm.ShowModal;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  assignfile (TenantFile, 'Tenant.dat');
  if not fileexists ('Tenant.dat')
  then
    begin
      rewrite (TenantFile);
      closefile (TenantFile)
    end
  {endif};
end;

end.


unit AddTenantUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MainUnit, StdCtrls;

type
  TAddTenantForm = class(TForm)
    MainFormButton: TButton;
    FirstNameLabel: TLabel;
    FirstNameEdit: TEdit;
    LastNameLabel: TLabel;
    LastNameEdit: TEdit;
    SaveButton: TButton;
    ClearButton: TButton;
    procedure SaveButtonClick(Sender: TObject);
    procedure LastNameEditChange(Sender: TObject);
    procedure ClearButtonClick(Sender: TObject);
    procedure FirstNameEditChange(Sender: TObject);
    procedure MainFormButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  AddTenantForm: TAddTenantForm;

implementation

{$R *.dfm}

procedure TAddTenantForm.MainFormButtonClick(Sender: TObject);
begin
  AddTenantForm.Close;
end;

procedure TAddTenantForm.FirstNameEditChange(Sender: TObject);
begin
  Tenant.FirstName := FirstNameEdit.Text;
end;

procedure TAddTenantForm.ClearButtonClick(Sender: TObject);
begin
  FirstNameEdit.Clear;
  LastNameEdit.Clear;
end;

procedure TAddTenantForm.LastNameEditChange(Sender: TObject);
begin
  Tenant.LastName := LastNameEdit.Text;
end;

// This is where the problem lies when I run this piece of
// code. This represents the Save button being clicked.
procedure TAddTenantForm.SaveButtonClick(Sender: TObject);
begin
  assignfile (TenantFile, 'Tenant.dat');
  write(TenantFile, Tenant);
  closefile (TenantFile);
end;


end.

Upvotes: 1

Views: 2075

Answers (1)

Abelisto
Abelisto

Reputation: 15624

You are trying to write data into not opened file.

procedure TAddTenantForm.SaveButtonClick(Sender: TObject);
begin
  assignfile (TenantFile, 'Tenant.dat');
  // Rewrite(TenantFile) or Reset(TenantFile) missed here
  write(TenantFile, Tenant);
  closefile (TenantFile);
end;

Upvotes: 2

Related Questions