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

Delphi动态创建了ADOStoredProcedure参数

  •  1
  • user1937012  · 技术社区  · 7 年前

    我在这里执行多线程,因此需要为每个线程动态创建ADOStoredProcedures(除其他外)

    spBW_AUFTR_KOPF := TADOStoredProc.Create(nil);
    spBW_AUFTR_KOPF.Connection:=MSSQL;
    spBW_AUFTR_KOPF.ProcedureName:='spBW_AUFTR_KOPF;1';
    spBW_AUFTR_KOPF.Parameters.Refresh;
    

    这就是我动态创建过程的方式。然后我只想删除一些东西,这只需要3个参数。

    spBW_AUFTR_KOPF.Parameters.ParamValues['@OP']:='DEL';
    spBW_AUFTR_KOPF.Parameters.ParamValues['@AB']:=DELETE_ARRAY[i].AB;
    spBW_AUFTR_KOPF.Parameters.ParamValues['@DB_YEAR']:=DELETE_ARRAY[i].DB_YEAR;
    spBW_AUFTR_KOPF.ExecProc;
    

    问题是,由于程序(在MSSQL中)有大约30个参数,Delphi抱怨其他参数丢失。只有当我动态地创建它时,才会发生这种情况。通过拖放组件,它不会。

    问题: 是否可以自动填充所有参数并将其设置为空(我认为tadoStoredProcedure.parameters.refresh是否…但没有)

    谢谢你

    更新

    spBW_AUFTR_KOPF := TADOStoredProc.Create(nil);
    spBW_AUFTR_KOPF.Connection:=MSSQL;
    spBW_AUFTR_KOPF.ProcedureName:='spBW_AUFTR_KOPF;1';
    spBW_AUFTR_KOPF.Prepared:=true;
    spBW_AUFTR_KOPF.Parameters.Refresh;
    

    不起作用: [新]bw_auftr_kopf过程或函数“spbw_auftr_kopf”需要参数“@id”,但未提供该参数。我还缺什么吗?我试着先准备好真的,然后再刷新,我也试着先刷新,然后准备好真的。

    更新2

    以及建议的修复方法如下:

    spBW_AUFTR_KOPF := TADOStoredProc.Create(nil);
    spBW_AUFTR_KOPF.Connection:=MSSQL;
    spBW_AUFTR_KOPF.ProcedureName:='spBW_AUFTR_KOPF;1';
    spBW_AUFTR_KOPF.Parameters.Refresh;
    
              for i := 0 to spBW_AUFTR_KOPF.Parameters.Count-1 do
                spBW_AUFTR_KOPF.Parameters.Items[i].Value:=null;
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   user1937012    7 年前

    spBW_AUFTR_KOPF := TADOStoredProc.Create(nil);
    spBW_AUFTR_KOPF.Connection:=MSSQL;
    spBW_AUFTR_KOPF.ProcedureName:='spBW_AUFTR_KOPF;1';
    spBW_AUFTR_KOPF.Parameters.Refresh;
    
              for i := 0 to spBW_AUFTR_KOPF.Parameters.Count-1 do
                spBW_AUFTR_KOPF.Parameters.Items[i].Value:=null;