100分! Midas技术中,在中间应用层的TQuery如何接受客户端的参数?(100分)

  • 主题发起人 主题发起人 e-zhong
  • 开始时间 开始时间
E

e-zhong

Unregistered / Unconfirmed
GUEST, unregistred user!
在应用层的TQuery的SQL中有相应的待定参数,而这些参数需要从客户端得到。
哪位大虾可告知在客户端调用哪些事件可上传参数,在应用层有哪些Request的响应可接收参数并执行查询?
 
动态设置查询参数的示范程序,它可以在C:/ProgramFiles/Borland/Delphi4/
Demos/ Midas/Setparam目录中找到。
 
1.服务端的PROVIDER有一个ONDATAREQUEST事件,当客户端的CLIENTDATASET提交查询内容时,可以用CLIENTDATASET.DATAREQUEST(SQL),可以传递SQL语句给服务端的ONDATAREQUEST事件,所以,在服务端,在这事件中可以写上TQUERY.sql.text:=input;
2.也可以利用客户端调用服务器端方法,在服务端的远程数据模块上的类型库中加上你自己定义的方法。
 
agree 沈前卫
 
沈前卫,
应该是
动态设置查询参数的示范程序,它可以在X:XXXXX/Borland/Delphi4/
Demos/ Midas/Setparam目录中找到。
XXXX代表自己装Delphi的目录:)
 
同意 http、千中元、沈前卫
 
去控制PROVIDER的ONQUERY吧。
 
可以在Application Server中添加自己的接口,可操作性最强
 
To everyone,
我今天已经通过了clientDataSet.open访问Server中的TQuery,多谢!
但是,我添加DataSetProvider作为Server中的Interface,调用客户端的
clientDataSet.open就得不到结果了。
请问:客户端访问Server的Provider和直接访问Server中的TQuery.interface
有何区别?似乎后者,也就是DELPHI的例子更简单。
e-zhong
 
>我添加DataSetProvider作为Server中的Interface,调用客户端的
>clientDataSet.open就得不到结果了
到底谁掉谁?
 
?
ClientDataSet1.Active:=False;
ClientDataSet1.Provider.DataRequest(SQL语句);
//此句不是必须,视你需要而定
ClientDataSet1.Params.ParamByName('参数名').as参数类型:=XXXX;
ClientDtaaSet1.Active:=True;
 
请问:客户端访问Server的Provider和直接访问Server中的TQuery.interface
有何区别?
 
一个是通过variant访问,一个是通过调用接口访问。
 
用delphi的ttable,tquery必须使用bde,也就是
TQUERY。INTERFACE必须使用BDE,但如果使用
PROVIDER则可以脱离BDE,比如如果你用DIAMOND ACCESS
组件连接ACCESS,DIAMOND的TABLE组件便没有包含INTERFACE
所以就必须加PROVIDER,PROVIDER是为不支持BDE的东西提供的。
 
我通过 clientDataSet.open访问Server中的TQuery(SQL 语句写在TQUERY的
SQL 方法中),是可以通过的,数据可正常传输到客户端,
但通过 (server 端) (PROVIDER1.ondataquest事件)
query1.sql.text :=input;
(client 端) ClientDataSet1.Active:=False;
ClientDataSet1.Provider.DataRequest('select * from customer');
ClientDtaaSet1.open;
编译正常通过,但在运行客户端程序时,系统总是告诉我 "没有可利用的SQL 表达式"

这好象是 PROVIDER 接口的数据没有传输给SERVER 端,但CLIENT 端的open
已执行,这是为什么呢?

 
midas真的实现起来,问题总是很多。
不好意思,随便说说,主要是为了g
 
你要在应用段的RemoteModule中写方法,此方法要用view菜单下的type library
定义。而且一定要在此定义才能被客户端调用。
在客户端通过Dcomconnection来调用,,,DcomConnection1.Appserver.你定义的方法
 
可在ClientDataSet.CommandText中写SQL语句
用ClientDataSet.Open或Execute 执行
 
客户端:
Procedure Tfrom1.Botton1.click(sender:Tobject);
Begig
ClientDataSet1.Data:=ClientDataset1.Provider.DataRepuest('select * from employee);
end;
服务器端:
function TGetDataServer.DataSetProvider1DataRequest(Sender:Tobject;
Input:Olevariant):OleVariant;
var
iRecords:Integer;
begin
Query1.close;
Query1.sql.clear;
Query1.sql.add(Input);
Query1.open;
DataSetProvider1.Reset(true);
Result:=DataSetProvider1.GetRecords(10,iRecords);
end;
 
后退
顶部