我在这里执行多线程,因此我需要为每个线程动态创建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中)具有ca。 30个参数,Delphi抱怨缺少其他参数。仅当我动态创建时才发生这种情况。通过拖放组件,它不会。
问题:是否可以自动填充所有参数并将它们设置为null(我以为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;
没有帮助: [NEW] BW_AUFTR_KOPF过程或函数'spBW_AUFTR_KOPF'需要未提供的参数'@ID'。我还有其他东西吗?我先尝试了True,然后再准备Refresh,也尝试了Refresh,然后是True。
更新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;
答案 0 :(得分:0)
解决方法是:
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;