我在这里执行多线程,因此需要为每个线程动态创建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;