2013-05-14 55 views
-2

在我的程序中,用戶完成一個表格,然後按提交。然後,創建一個文本文件或一個隨機擴展文件,在其中寫入所有用戶的信息。因此,無論用戶何時運行申請表,它都會檢查包含所有信息的文件是否存在,然後複製信息並將其粘貼到表單中。但是,它不工作由於某種原因(沒有語法錯誤):Delphi7,保存用戶的更改或其他用戶的信息/備註

procedure TForm1.FormCreate(Sender: TObject); 
var 
    filedest: string; 
    f: TextFile; 
    info: array[1..12] of string; 
begin 
    filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt'; 

    if FileExists(filedest) then 
    begin 
    AssignFile(f,filedest); 
    Reset(f); 

    ReadLn(info[1], info[2], info[3], info[4], info[5], info[6], info[7], 
     info[8], info[9], info[10], info[11], info[12]);  

    Edit1.Text := info[1]; 
    Edit2.Text := info[2]; 
    ComboBox1.Text := info[3];    
    ComboBox5.Text := info[4]; 
    ComboBox8.Text := info[4]; 
    ComboBox6.Text := info[5]; 
    ComboBox7.Text := info[6]; 
    Edit3.Text := info[7]; 
    Edit4.Text := info[8]; 
    Edit5.Text := info[11]; 
    Edit6.Text := info[12]; 
    ComboBox9.Text := info[9]; 
    ComboBox10.Text := info[10];  

    CloseFile(f);           
    end 
    else 
    begin 
    ShowMessage('File not found'); 
    end; 

end; 

該文件存在,但它顯示的信息File not found。我不明白。

+0

您可以使用免費的JEDI代碼格式進一步提高代碼質量。 – OnTheFly 2013-05-14 09:44:54

+0

好吧,但我不明白爲什麼代碼不起作用 – user2296565 2013-05-14 09:51:57

+2

我個人認爲正確的代碼格式應該是自然的。 OP應該先學習手動格式化代碼。 – 2013-05-14 09:52:32

回答

5

我冒昧地爲您設置了格式化代碼。你看到差異(beforeafter)?另外,如果我是你,我會更好地爲控件命名。您可以使用eFirstName,eLastName,eEmailAddr等來代替Edit1,Edit2,Edit3等。否則,它將成爲維護代碼的PITA,您可能會混淆例如ComboBox7ComboBox4

與您的代碼的一個具體問題是這一行:

readln(info[1], info[2], info[3], info[4], info[5], info[6], info[7], 
    info[8], info[9], info[10], info[11], info[12]); 

你忘了指定文件f

此外,在我格式化您的代碼之前,程序的最終end丟失。也許你的代碼塊在你的實際代碼中是不正確的,所以即使文件存在,也會顯示ShowMessage? (另一個原因來正確地格式化代碼...)

如果我遇到了這個問題,並希望做一些快速的調試,我只是行後插入

ShowMessage(BoolToStr(FileExists(filedest), true)); 
Exit; 

filedest := ... 

只是爲了看看FileExists(filedest)的返回值是什麼。 (當然,你也可以設置一個斷點,並使用調試器。)

如果你false,你可能不知道的世界filedest實際上包含:嗯,這一個取代「調試代碼」上面:

ShowMessage(filedest); 
Exit; 

然後使用Windows資源管理器(或更好的:命令提示符)來查看文件是否真的存在或不存在。

+0

非常感謝你 – user2296565 2013-05-14 10:04:05

+0

我不知道如何調試工作,雖然 – user2296565 2013-05-14 10:05:32

+0

@ user2296565:這就是爲什麼我給你一個'正確'調試的替代方法,使用'ShowMessage(BoolToStr(...'。 – 2013-05-14 10:06:54

2

我想提一提的另一種可能性輸出調試消息(假設我們不知道如何操作還沒有真正的調試):

{ ... } 
    filedest := ExtractFilePath(ParamStr(0)) + 'User\Identity\IdentityofMyself.txt'; 

    AllocConsole;     // create console window (uses Windows module) - required(!) 
    WriteLn('"' + filedest + '"'); // and output the value to verify 

    if FileExists(filedest) then 
    { ... }