150,关于CORBA 中用CORBAConnection 传输 TQuery 的Params 类型出错问题,请求支援!!!,十万火急!!!(150分)

  • 主题发起人 主题发起人 tigerlion007
  • 开始时间 开始时间
T

tigerlion007

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,在客户端实现按日期查询的功能,用TQuery在服务端设置参数
StartDate ,EndDate,但在客户端用CORBAConnection 连接后,ClientDataSet的参数
StartDate,EndDate 的类型有变化,(Date --> Double),从而使参数无法回传,
请各路高手指点该如何处理,还有其他办法解决查询的功能吗?
 
tclientdataset.FetchParams
 
to autumn:
能否讲清楚些,我用DataModule1.Clientdataset1中的FetchParams
(在DataModule1.Clientdataset1右键),查看参数Start_Date ,End_Date.
其类型已变成double.
你是否指在程序中写入此句,写在何处,是在如下处吗:


procedure TForm2.Button2Click(Sender: TObject);//查询(按时间)
begin

{ The query on the server looks like this:

select * from Traffic01 where
Event_Date >= :Start_Date and
Event_Date <= :End_Date;

The Events ClientDataSet has the parameters from the server set up in the
Params property. At design time, you can right click on a ClientDataSet and
select "Fetch Params" to initialize the params from a TQuery or TStoredProc
on the server. At run-time you can call TClientDataSet.FetchParams to
initialize the params from the server. Or you can set the params up manually
by adding them yourself.

}
DataModule1.Clientdataset1.FetchParams;//(1)

DataModule1.ClientDataSet1.Close;

DataModule1.Clientdataset1.FetchParams;//(2)

DataModule1.ClientDataSet1.Params.ParamByName('Start_Date').AsDateTime := StrToDateTime(Start_Date.Text);
DataModule1.ClientDataSet1.Params.ParamByName('End_Date').AsDateTime := StrToDateTime(End_Date.Text);

DataModule1.Clientdataset1.FetchParams; //(3)

DataModule1.ClientDataSet1.Open;

end;

但是不行,请教该放于何处???

 
此外,注释中提到调用 TClientDataSet.FetchParams ,该如何调用?
 
我记得李维的书上曾经提到过Corba连接时无法象Dcom那样传递参数。
Date的实质就是double,但在Corba中,只能使用缺省的变量,Date
自然不行了。你可以试试能不能传字符串,如可以,就应该有办法了。
 
to Crane:
第一次用Delphi写CORBA,可否给个例子,用于传字符串,
谢谢,给你多加分,万分感谢!!!
 
此问题增值500分!!!请求支援!!!十万火急!!!
It takes my five days to find answer!!!
 
我是指字符串型参数是否可以传递,如果可以实现你的功能。
我现在手头没有环境,所以让你先试试能不能传递字符串型参数。
 
我用D5,ORACLE数据库做了一个同样的程序,传递DATETIME类型的参数,结果正确。
客户端程序如下:
clientdataset1.Close;
clientdataset1.Params.ParamByName('d_ccrq').asdatetime:=dateedit1.Date;
clientdataset1.Open;
注意以下几点:
1、设计时使用clientdataset的fetchparams获得服务端参数,如失败,可以自己写入params
属性。
2、params的datatype在向param赋值时自动改变,一般不人工设定。
3、clientdataset.open时自动传递参数到服务端。
只能这样了,我这里可以。
实在不行,你可以传一句sql到服务端,不用参数了。
 
to tigerlion007:
信已经收到,我以前回答的那个问题是这样,避开传递参数,而是直接向corba服务器
传递OleVariant包。例如
ClientDataSet1。close()
ClientDataSet1.DataRequest(日期);//###
clientDataSet1.Open();//%%%
在执行###句时服务端datasetprovider控件会触发:onDataRequest事件,
那么你就可以加入代码了
例如:
function Tforelook.pvdForeLookDataRequest(Sender: TObject;
Input: OleVariant): OleVariant;
begin
with aquery do
begin
close;
SQL.Clear;
SQL.Add("你的Sql语句前面的部分"+input+"你的Sql语句后面的部分");
////////////////////////////// ^
/////////////////////////// input就是你传过来的日期,记住要是字符串型的
Open;
result:=datasetprovider1.Data;//数据集回传。客户端执行%%%句
end;
end;
 
TO ppz_76:
1)我在服务器端的参数设置如下:
DataType : ftDateTime
Name: End_Date
ParamType:ptUnknown
Value: 99-12-30
Type :Date
2)在客户端用clientdataset的fetchparams获得服务端参数,
除Type变为Double 外,其他都没有问题,用
clientdataset1.Close;
clientdataset1.Params.ParamByName('End_Date').asdatetime:=End_Date.Date;
clientdataset1.Open;
在运行中发现End_date为Double,(Start_Date同End_Date)
3)服务器端的TQuery 的SQL内容如下:
select * from event
where Event_Date >= :Start_Date and
Event_Date <= :End_Date
order by Event_Date
4)客户端输入日期后,通过参数Start_Date ,End_Date 传回服务器,执行SQL ,
但我发现客户端输入的日期更本不起作用,而起作用的是服务器参数设置的最初的
Value .
请教问题出自何处?
万分感谢!

 
to Crane:
我刚刚试了一下,一个参数可以(尽管还有其他问题),但是,只能传一个参数,
最好能传两个,不知有何办法?请教请教。
谢谢!
 
to Crane:
在运行到服务器端的
Open;
result:=dspcustomerorders.Data;
时出错:dspcustomerorders.data值为:
Delphi exception EDBEngineError at $7E2F989
此外,如何知道input是string? input 值为 1996-1-1,(与客户端的一致)
另外,用module 中的interface的method 的 Parameters 可否实现多参数传递?
请指教
谢谢!
 
后退
顶部