2014-10-27 58 views
1

當我運行我的代碼時,選擇我創建的保存按鈕。該記錄不保存,但我得到一個錯誤'文件訪問被拒絕'。將記錄保存到文件錯誤'文件訪問被拒絕'

我的代碼:

我分成2個單位MainUnit和AddTenantUnit的代碼。

我認爲問題在於程序末尾的代碼。如果你向下滾動,我明確了哪個程序(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. 
+1

我看不到路徑前綴。應用程序嘗試寫入哪個文件夾(** name **!)? – 2014-10-27 15:34:53

+1

您尚未在試圖寫入'Tenant.dat'的代碼塊中指定文件夾位置。您正在嘗試寫入的文件在哪裏? (如果你不能回答這個問題,那肯定是錯誤的地方。) – 2014-10-27 15:36:18

+0

你是否啓用UAC? – 2014-10-27 16:26:29

回答

2

您正試圖將數據寫入未打開的文件。

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