2012-04-03 3 views
2

j'ai les ms suivantes accéder à la table 2003:champ 'INVOICE_DATE' ne peut pas être modifié

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

et code suivant (Delphi 7)

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

lorsque je tente d'ajouter un nouvel enregistrement i end avec erreur d'exception sys:

Le champ 'Invoice_Date' ne peut pas être modifié.

pls ce qui est mal

+2

sont les autres champs inscriptible? (peut-être que tout le jeu de données est en lecture seule). p.s. l'appel 'inherited' dans adoMasterEditNewRecord est inhabituel – mjn

Répondre

3

Vous le faites mal. :)

Vous devriez utiliser l'événement AfterEdit à la place. À partir du fichier d'aide sur TDataSet.AfterEdit:

Ecrivez un gestionnaire d'événements AfterEdit pour prendre des mesures spécifiques immédiatement après que le jeu de données passe en mode d'édition. AfterEdit est appelé par Edit après avoir activé la modification d'un enregistrement, recalculé les champs calculés et appelé le gestionnaire d'événements de données pour traiter un changement d'enregistrement.

utiliser comme ceci:

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

De votre texte, cependant, vous semblez vouloir le faire quand un enregistrement est inséré, pas modifié ("lorsque je tente d'ajouter un nouvel enregistrement Je termine avec une erreur d'exception sys: "). Si tel est le cas, utilisez AfterInsert exactement la même manière:

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

je veux que l'utilisateur voir la date avant qu'il publie l'enregistrement, j'ai utilisé hérité pour un autre but non mentionné ici .. merci pour l'aide – BlueOcean

+0

@Ken White, je ne suis pas d'accord. 'OnNewRecord' est en fait le bon gestionnaire d'événements pour définir les valeurs par défaut lors de l'utilisation de Insert/Append – kobik

+0

... Mais je ne comprends pas non plus la partie' inherited'. L'OP pourrait-il expliquer? 'TfmInvoiceMaster' est-il sous-classé? – kobik

Questions connexes