我试过好几种情况。 1。服务器端:AdoDataset, 不设置动态参数 客户端:ClientDataset,commandText:='select * from table1 where dtt <=:param1 and dtt>=:param2';设置动态参数 程序中 ClientDataset.close; ClientDataset.parms.parambyname('param1').AsDateTime:=DateTime1; ClientDataset.parms.parambyname('param2').AsDateTime:=DateTime2; ClientDataset.Open. 但是总出现提示:至少还有一个参数没有被指定值。 很莫名其妙。
AllowCommandText=TRUE设置没错,参数的类型,size我都注意了,都设置过了。
sqlTxt := 'select * from table1 where dtt >=:dtStart and dtt <=:dtEnd '; with ClientDataSet1 do begin Close; params.ParseSQL(sqlTxt,true); CommandText := sqlTxt; paramsByName('dtStart').AsDateTime := StrToDateTime('2002-2-1 12:00:00'); paramsByName('dtEnd').AsDateTime := StrToDateTime('2002-2-1 18:00:00'); Open; end;也不行!
提示异常EOLEException,出错信息:至少有一个参数没有被指定值! 真是莫名其妙!
在客户端产生sql语句不好,还是把参数传到应用服务器上,再产生sql语句。 客户端: Flag:=-1; vData:=VarArrayCreate([0,1],VarVariant); vData[0]:=sProjectID; vData[1]:=gNode.Text; MPObj.GetData(GET_FIELD,vData,Flag); if Flag=0 then begin ClientDataSetField.Data:=vData; end else sBarText('取表的字段值的时候发生错误!');应用服务端: procedure TCoManPro.GetData(iType: Integer; var vData, Flag: OleVariant);//一个接口 begin Case iType of ...... GET_FIELD: GetFieldData(vData,Flag); else end; end;procedure TCoManPro.GetFieldData(var vData,Flag:OleVariant); var StrTemp: WideString; begin StrTemp:='select * from FIELD '; Flag:=-1; try if VarIsArray(vData) then begin if vData[0]<>'' then StrTemp:=StrTemp+' where ProjectID='''+vData[0]+''''; //动态的sql语句 if vData[1]<>'' then StrTemp:=StrTemp+' and TableName='''+vData[1]+''''; StrTemp:=StrTemp+' Order by TableName,OrderID'; Flag:=AdoQueryOpen(AdoQueryField,StrTemp,false); if Flag=0 then vData:=DataSetProviderField.Data; end; finally AdoQueryField.Close; end;end;
不用那么的复杂吧?直接用SQL语句就行了呀, sqlstr:='select * from table where field1='+''''+param1 +'''' +' ,field2='+''''+param1 +'''';
主要是你的时间参数有问题 考虑用两个时间控件来代替时间参数 Eg;:CommandText:='select * from student where birthday:= w';
接上: CommandText:='select * from student where birthday>=:date1 and birthday<=:date2'; paramsByName('date1').AsDateTime:=TDateTimePicker1.DateTime; paramsByName('date2').AsDateTime:=TDateTimePicker2.DateTime; open;
ClientSet1.close;
ClientSet1.DataRequest('select * from 表1');
ClientSet1.open;
ClientSet1.close;
ClientSet1.DataRequest('select * from 表2');
ClientSet1.open;
服务器端出路DataSetProvider的OnDataRequest事件:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(Input)
ADOQuery1.Open;( 或 ADOQuery1.Active := True;)
服务器端:ADOquery,或者ADODataSet,
客户端:ClientDataset,
这种情况该如何处理?
李维的书我看过,我试过了,老是提示错误:至少还有一个未知信息。
而且,ClientDataset右键点fetch params,无法出现服务器端的参数。
ClientSet1.commandtext:='select * from xxx';
ClientSet1.open;
即可;
ADOQuery带参数的话,设计期间必须在前端指定Params[i]的数据类型和Input还是Output,不能是默认的Unkown
1。服务器端:AdoDataset, 不设置动态参数
客户端:ClientDataset,commandText:='select * from table1 where dtt <=:param1 and dtt>=:param2';设置动态参数
程序中 ClientDataset.close;
ClientDataset.parms.parambyname('param1').AsDateTime:=DateTime1;
ClientDataset.parms.parambyname('param2').AsDateTime:=DateTime2;
ClientDataset.Open.
但是总出现提示:至少还有一个参数没有被指定值。
很莫名其妙。
and dtt <=:dtEnd ';
with ClientDataSet1 do
begin
Close;
params.ParseSQL(sqlTxt,true);
CommandText := sqlTxt;
paramsByName('dtStart').AsDateTime := StrToDateTime('2002-2-1 12:00:00');
paramsByName('dtEnd').AsDateTime := StrToDateTime('2002-2-1 18:00:00');
Open;
end;也不行!
真是莫名其妙!
客户端:
Flag:=-1;
vData:=VarArrayCreate([0,1],VarVariant);
vData[0]:=sProjectID;
vData[1]:=gNode.Text;
MPObj.GetData(GET_FIELD,vData,Flag);
if Flag=0 then
begin
ClientDataSetField.Data:=vData;
end else sBarText('取表的字段值的时候发生错误!');应用服务端:
procedure TCoManPro.GetData(iType: Integer; var vData, Flag: OleVariant);//一个接口
begin
Case iType of
......
GET_FIELD:
GetFieldData(vData,Flag);
else end;
end;procedure TCoManPro.GetFieldData(var vData,Flag:OleVariant);
var
StrTemp: WideString;
begin
StrTemp:='select * from FIELD ';
Flag:=-1;
try
if VarIsArray(vData) then
begin
if vData[0]<>'' then StrTemp:=StrTemp+' where ProjectID='''+vData[0]+''''; //动态的sql语句
if vData[1]<>'' then StrTemp:=StrTemp+' and TableName='''+vData[1]+'''';
StrTemp:=StrTemp+' Order by TableName,OrderID';
Flag:=AdoQueryOpen(AdoQueryField,StrTemp,false);
if Flag=0 then vData:=DataSetProviderField.Data;
end;
finally
AdoQueryField.Close;
end;end;
sqlstr:='select * from table where field1='+''''+param1 +''''
+' ,field2='+''''+param1 +'''';
考虑用两个时间控件来代替时间参数
Eg;:CommandText:='select * from student where birthday:= w';
CommandText:='select * from student where birthday>=:date1 and birthday<=:date2';
paramsByName('date1').AsDateTime:=TDateTimePicker1.DateTime;
paramsByName('date2').AsDateTime:=TDateTimePicker2.DateTime;
open;