create procedure proName
(
@id varchar(10),
@name varchar(20),
@time varchar(20)
)
as
begin
declare @ssql varchar(8000) set @ssql='select ...' if @id<>''
begin
set @ssql=@ssql+'and...'
end
if @name<>'' then
...end
(
@id varchar(10),
@name varchar(20),
@time varchar(20)
)
as
begin
declare @ssql varchar(8000) set @ssql='select ...' if @id<>''
begin
set @ssql=@ssql+'and...'
end
if @name<>'' then
...end
pro: commandText Does Not Returen A result set
我用的是clentdataset
语法威:
socket.open;
cds.close;
s:=Socket.appserver.sss('test',svalue);//test威过程名子
cds.open;
socket.close;
function TTT_S006_TIB.TT_S006004(const Pname: WideString; InFrames: OleVariant): OleVariant;
var
i,j:Integer;
begin
pro.ProcedureName := pname;
Pro.Prepared :=true;
pro.Parameters.Refresh;
with pro do
begin
j := Parameters.Count;
for i := 0 to j - 2 do
parameters[i + 1].value := inFrames[i];
//parameters[j - 3].value := '';
execproc;
//result := dsp.Data;
end;
end;
客户层威:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
s,ss:String;
svalue: Variant;
begin
svalue := VarArrayCreate([0, 50], varVariant);
svalue[0] := '';
svalue[1] := '';
svalue[2] := 'stype'; socket.open;
cds.close;
s:=Socket.appserver.TT_S006004('Test;1',svalue);
cds.open;
socket.close;
end;
数据库为:
CREATE procedure Test
@Mainid varchar(20),
@id varchar(30),
@name varchar (20)as
declare @sql varchar(3000)
set @sql='select * from tt_sendMain where SendMainid=200403231000001 '
GO//////////////
当直接写:'select * from tt_sendMain where SendMainid=200403231000001 就没有事情
就可以了
你的存储过程中少了一步重要的工作: set @ssql=...
之后,要加上:
exec(@ssql)
(
@id varchar(10),
@name varchar(20),
@time varchar(20)
)
as
begin
declare @ssql varchar(8000) set @ssql='select ... where 1=1 ' if @id<>''
begin
set @ssql=@ssql+'and...'
end
if @name<>'' then
begin
set @ssql=@ssql+'and...'
end
if @time<>'' then
begin
set @ssql=@ssql+'and...'
end
exec (@ssql)
end