采用三层结构中,把用来执行后台过程的TStoredProc放在中间层,在中间层写了调用后台过程的过程,在前台应用中要在线程里调用该过程,老报"Variant is not array",怎么解决?
代码如下:
constructor ThreadCalCu.Create(ProgressBar:TProgressBar;BarPro:TStatusBar;Unit_ID:String;JLDString:TStringList;SocketCEP:TSocketConnection);
Begin
FProgressBar:=ProgressBar;
FUnit_ID:=Unit_ID;
FJLDString:=JLDString;
FStringSCount:=FJLDString.Count;
FSocketCEP:=SocketCEP;
FBarPro:=BarPro;
inherited Create(False);
End;procedure ThreadCalCu.Execute;
Var
I:Integer;
ParamValues:WideString;
begin
try
For I:=0 to FStringSCount-1 do
Begin
If CancelCalCu then
Break;
ProgressStep:=I+1;
FJLD_ID:=FJLDString.Strings[I];
Synchronize(Refrash); ParamValues:=FJLD_ID+#13+FUnit_ID;
Try
FSocketCEP.AppServer.ExectProc('TEST','111');
Except
FTEXT :='计算【'+ FJLD_ID+'】时出错';
Synchronize(Refrash);
End;
End;
Finally
End;
end;
代码如下:
constructor ThreadCalCu.Create(ProgressBar:TProgressBar;BarPro:TStatusBar;Unit_ID:String;JLDString:TStringList;SocketCEP:TSocketConnection);
Begin
FProgressBar:=ProgressBar;
FUnit_ID:=Unit_ID;
FJLDString:=JLDString;
FStringSCount:=FJLDString.Count;
FSocketCEP:=SocketCEP;
FBarPro:=BarPro;
inherited Create(False);
End;procedure ThreadCalCu.Execute;
Var
I:Integer;
ParamValues:WideString;
begin
try
For I:=0 to FStringSCount-1 do
Begin
If CancelCalCu then
Break;
ProgressStep:=I+1;
FJLD_ID:=FJLDString.Strings[I];
Synchronize(Refrash); ParamValues:=FJLD_ID+#13+FUnit_ID;
Try
FSocketCEP.AppServer.ExectProc('TEST','111');
Except
FTEXT :='计算【'+ FJLD_ID+'】时出错';
Synchronize(Refrash);
End;
End;
Finally
End;
end;
解决方案 »
- delphi7可以调用c#写的dll么?
- 想做个文章采集器 用什么控件获取HTML源码好呢?
- 简单问题:怎么读取这样的数据:ADOQuery1.LockType:=ltBatchOptimistic,DBGrid1与ADOQuery1连接.在DBgrid1中写了多行数据,在保存前读取所
- 求助~
- 关于调用一个应用程序的问题。。。。。。。。
- 我怎么删除不了数据呢??
- 请问用ReportBuilder做的系统,用户如果想自己设计条件窗体怎么办?
- 文件文本设置成隐藏带来的问题,请高手们帮帮忙...
- SetChildOrder 的使用
- 今天,大富翁又可以访问了,并且大富翁自救开始行动了!
- 把DBGrid的一条记录值赋给另外一个窗体上的Edit.Text里,该怎么做?
- 主从表删除的问题
procedure TDMEPServer.ExectProc(const ProcName: WideString; const ProcValues: WideString);
Var
I:Integer;
ParamStrings:TStringList;
begin
ParamStrings:=TStringList.Create;
try
SpcEPPro.StoredProcName:=ProcName;
ParamStrings.Text:=ProcValues; For I:=0 to SpcEPPro.ParamCount-1 do
Begin
SpcEPPro.Params[I].Value:=ParamStrings.Strings[I];
End;
SpcEPPro.ExecProc;
Finally
ParamStrings.Free;
End;
end;