2012-04-03 100 views
2

我有以下的MS Access 2003表:字段 'Invoice_Date' 不能修改

Invoice_Master 
(
    Invoice_Id Autonumber, 
    Customer_Id integer, 
    Invoice_Date Date/Time not null, 
. 
. 
. 
); 

和下面的代碼(德爾福7)

procedure TfmInvoiceMaster.adoMasterEditNewRecord(DataSet: TDataSet); 
begin 
    inherited; 
    adoMasterEditInvoice_Date.AsDateTime := Date; 
end; 

當我嘗試添加新記錄我結束有例外錯誤sys:

Field'Invoice_Date'can not be modified。

+2

是其他字段可寫嗎? (也許整個數據集是隻讀的)。附: adoMasterEditNewRecord中的'inherited'調用是不尋常的 – mjn 2012-04-03 20:12:11

回答

3

你做錯了什麼是錯的。 :)

您應該使用AfterEdit事件。從TDataSet.AfterEdit幫助文件:

寫一個AfterEdit事件處理程序,採取具體行動數據集進入編輯模式之後。 AfterEdit在編輯記錄後被調用,重新計算計算的字段,並調用數據事件處理程序來處理記錄更改。

使用這樣的:

procedure TfmInvoiceMaster.adoMasterAfterEdit(DataSet: TDataSet); 
begin 
    // No inherited call! This is an event handler, not an overridden method 
    adoMasterEditInvoice_Date.AsDateTime := Date; 
end; 

從你的文字,不過,你似乎想這樣做時,插入一條記錄,不能編輯(「當我嘗試添加新記錄我結束了異常錯誤sys:「)。如果是這種情況,請使用AfterInsert,方法相同:

procedure TfmInvoiceMaster.adoMasterAfterInsert(DataSet: TDataSet); 
begin 
    // No inherited call! This is an event handler, not an overridden method 
    adoMasterEditInvoice_Date.AsDateTime := Date; 
end; 
+0

我希望用戶在發佈記錄之前查看日期,我使用了其他目的繼承的用於此處未提及的其他用途..感謝幫助 – BlueOcean 2012-04-03 20:49:49

+0

@Ken White,我不同意。實際上,OnNewRecord是使用Insert/Append – kobik 2012-04-03 20:51:17

+0

時設置默認值的正確事件處理程序......但是我也無法理解'inherited'部分。 OP能解釋一下嗎?是'TfmInvoiceMaster'子分類? – kobik 2012-04-03 20:55:02