在新记录上自动获取customer_id

时间:2018-04-26 00:49:14

标签: delphi

我正在使用customer_id = 5的客户存储过程来记录记录。

现在程序获取数据并在网格中显示它,我想添加一条新记录。 我怎样才能确保当我在网格中添加新记录时,它自动具有相同的customer_id(5)?

我不想一直把它写下来。我以前知道这个但是我忘记了.DB是sql server。

1 个答案:

答案 0 :(得分:0)

您可以将DefaultExpression设置为所需字段的已用ID。例如,您可以执行UniDAC存储过程对象( ParamCustID 是过程输入参数, FieldCustID 是返回的数据集字段名称):

var
  CustID: Integer;
begin
  CustID := 123;

  UniStoredProc1.StoredProcName := 'MyProcedure';
  UniStoredProc1.PrepareSQL;
  UniStoredProc1.ParamByName('ParamCustID').AsInteger := CustID;
  UniStoredProc1.Execute;

  UniStoredProc1.FieldByName('FieldCustID').ReadOnly := True;
  UniStoredProc1.FieldByName('FieldCustID').DefaultExpression := IntToStr(CustID);
end;

上面的代码将设置字段,为每个附加的元组分配相同的值,并使其为只读。出于好奇,FireDAC的相同任务就是这样(对于应用更改,必须有一个显式方法调用来更新字段属性):

var
  CustID: Integer;
begin
  CustID := 123;

  FDStoredProc1.StoredProcName := 'MyProcedure';
  FDStoredProc1.Prepare;
  FDStoredProc1.ParamByName('@ParamCustID').AsInteger := CustID;
  FDStoredProc1.Open;

  FDStoredProc1.FieldByName('FieldCustID').ReadOnly := True;
  FDStoredProc1.FieldByName('FieldCustID').DefaultExpression := IntToStr(CustID);

  FDStoredProc1.UpdateAttributes;
end;