对于第一种方法你是调用ClientDataSet1.Appserver.DisplayInfo,这样用的话,需要加入什么
接口库,我以前到试验过,李维的书有介绍,另外,我想你在客户端不通过Appserver调用,通过
CreateInstance创建一服务对象,在调用相应的过程,我就是这么干的
接口库,我以前到试验过,李维的书有介绍,另外,我想你在客户端不通过Appserver调用,通过
CreateInstance创建一服务对象,在调用相应的过程,我就是这么干的
解决方案 »
- sql server 2000,在表中再增加一列的问题?
- ReportMachine 安装方法
- 提一个不关技术的问题
- [Fatal Error] dbfm.pas(61): Could not create output file 'D:\档案\dbfm.dcu'
- 如何使DBGRID中的某一网格的下拉列表的内容从一个数据库中用ADOQUERY导入
- 就是隐藏不了qq的登陆窗口
- 大家帮忙看一下,如何实现如WINDOWS搜索功能的搜索条件选择的实现,UP有分!
- 救急呀!!!
- 小弟想学习网络编程,谁有网络聊天的原程序可以给小弟参考一下,最好有显示在线功能的
- 请局域网高手帮我!
- delphi与access
- 何处可下载到金山词霸2002?
我的Server是这样定义的: Server:ICommonCDM;//CommonCDM是Corba对象类名,并且我也:
Server:=TCommonCDMCorbaFactory.CreateInstance('dd');
其他设置我想都正常,所以省略了。
------------------------------------------------------------------------------
我想,既然静态的SQL语句能行,为什么动态不行呢?
若在服务器端写静态SQL语句,客户端CLientDataSet直接Open就可以了。
要不CLientDataSet.CommandText:='SQL语句'也行,但我不希望在客户端编写SQL语句。
易有个动态的,还是在客户端写的。
VCL源代码,发现它在SetPrepared过程里取的Text还是原来的值,不知为什么
在试一试
服务器DCOM模块:
procedure Displayinfo;
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add(SQL语句);
Query.Open;
end; 在客户端调用:
...
ClientDataSet.Close;
DCOMConnection.AppServer.DisplayInfo;
ClientDataSet.Open;
完全正常,但用Corba模块仍然不行。
同时感谢Jneu、xzgyb、Tense的热切关注和支持。
在接口中添加其他方法,然后在客户端通过AppServ直接调用接口方法是
不行的(使用DCOM可以),不知是不是这个原因。若是,解决方法可参考
李维的系统篇。
我的Server是这样定义的: Server:ICommonCDM;//CommonCDM是Corba对象类名,并且我也:
Server:=TCommonCDMCorbaFactory.CreateInstance('dd');
--------------------------------------------------------------------------------
希望关注此问题的朋友将此问题提前,谢谢!
我将为此问题付出1000分,悬赏高手求解!
注意delphi5对corba支持的很差
我用的是java做服务端,delphi只用来做客户端,连接的时候并不用delphi的corbaConnection
to qiandeng(千灯):你用什么控件连接服务器?
无论你如何在中间层怎样赋值,在客户端ClientDataSet.Open时,中间层Query.SQL总是保持
原值,除非你用CommandText或DataRequest来传递SQL语句。
为什么在客户端ClientDataSet.Open时,中间层Query.SQL总是保持
原值?
------------------------------------------------------------------------------
这一点xzgyb(老达摩) 已提早发现。
server:=IUnknown(CorbaConnection1.AppServer) AS ICORBA_PassSQL;
这样就可以确保Server和ClientDataSet所调用的是同一个实例。通过上述修改后,程序能顺利运行。补充说明:我不是高手(初学DELPHI),以上回答可能存在错误,请大家指正并共同进步。
server:=IUnknown(CorbaConnection1.AppServer) AS ICORBA_PassSQL;
一句,我不能编译,请问需要加入什么其他单元吗?
在中间层创建时改为
TCorbaVclComponentFactory.Create('TESTFactory', 'TEST', 'IDL:Project1/GYBFactory:1.0', ITEST,
TTEST, iSingleInstance, tmSingleThread);
倒数第二个改为iSingleInstance也行,默认为iMultiInstance
这样就为同一个实例了,呵呵
真的心情可以好起来了..呵呵
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBClient, CorbaCon, ExtCtrls, DBCtrls, Grids, DBGrids, Project1_TLB,
StdCtrls;type
TForm3 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
CorbaConnection1: TCorbaConnection;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
server:ICORBA_PassSQL;
public
{ Public declarations }
end;var
Form3: TForm3;implementation{$R *.DFM}procedure TForm3.FormCreate(Sender: TObject);
begin
ClientDataSet1.Active:=false;
try server:=IUnknown(CorbaConnection1.AppServer) AS ICORBA_PassSQL; Except
On E:Exception Do ShowMessage(E.Message);
end;end;procedure TForm3.Button1Click(Sender: TObject);
begin
try
ClientDataSet1.Active:=false;
server.DisplayInfo_Title;
ClientDataSet1.Active:=true;
except
on E:Exception Do ShowMessage(E.Message);
end;
end;procedure TForm3.Button2Click(Sender: TObject);
begin
try
ClientDataSet1.Active:=false;
server.DisplayInfo_Employee;
ClientDataSet1.Active:=true;
except
on E:Exception Do ShowMessage(E.Message);
end;
end;end.To xzgyb(老达摩):你这样做CORBADataModual就变成ShareInstance模式了,效率也许会有所下降。
是吗,但这也是李维书上提到的Shared Server模式,不说是一般都用这种模式吗
这也是无状态对象,多个客户端共享一实例,
另外用Appserver接口不也需要注册接口吗
我不太懂,还得看看书在说