2012-04-03 2 views
2

я следующие MS Access 2003 таблицы:Поле 'Invoice_Date' не может быть изменен

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

и следующий код (Delphi 7)

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

, когда я пытаюсь добавить новую запись я конец с ошибкой исключения sys:

Поле 'Invoice_Date' не может быть изменено.

пожалуйста, что неправильно

+2

другие поля которые можно записать? (возможно, весь набор данных доступен только для чтения). постскриптум «унаследованный» вызов в adoMasterEditNewRecord необычен – mjn

ответ

3

Вы делаете это неправильно. :)

Вместо этого вы должны использовать событие AfterEdit. Из файла справки по TDataSet.AfterEdit:

Написать обработчик события AfterEdit принять конкретные меры сразу же после того, как набор данных переходит в режим редактирования. AfterEdit вызывается Edit после того, как он разрешает редактирование записи, пересчитывает вычисленные поля и вызывает обработчик события данных для обработки изменения записи.

Используйте это так:

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

Из текста, однако, вы, кажется, хотят, чтобы сделать это, когда запись вставляется, не редактируется ("когда я пытаюсь добавить новую запись i заканчивается ошибкой исключения 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

+0

@Ken White, я не согласен. 'OnNewRecord' на самом деле является правильным обработчиком событий для установки значений по умолчанию при использовании Insert/Append – kobik

+0

... Но я также не понимаю« унаследованную »часть. может ли ОП объяснить? является подклассом 'TfmInvoiceMaster'? – kobik

Смежные вопросы