我正在使用customer_id = 5的客户存储过程来记录记录。
现在程序获取数据并在网格中显示它,我想添加一条新记录。 我怎样才能确保当我在网格中添加新记录时,它自动具有相同的customer_id(5)?
我不想一直把它写下来。我以前知道这个但是我忘记了.DB是sql server。
答案 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;