代码之家  ›  专栏  ›  技术社区  ›  user763539

在新记录上自动获取customer\u id

  •  -1
  • user763539  · 技术社区  · 7 年前

    我正在使用customer\u id=5的客户存储过程下拉记录。

    现在,该过程获取数据并将其显示在网格中,我想添加一条新记录。 如何确保在网格中添加新记录时,它自动具有相同的customer\u id(5)?

    我不想一直把它写下来。我以前知道这个,但我忘了。数据库是sql server。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Victoria zac    7 年前

    您可以设置 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;