想 請問Delphi 的高手: DCOM 和SocketConnection 是否可以使用帶參數的有返回值的存儲過程呢?

longwycn 2004-04-28 04:07:00
另外?:
DCOM 中有狀態的和無狀態的,有何不同!
...全文
185 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
webstorm 2004-05-12
  • 打赏
  • 举报
回复
是你方法的Parameters的Modifier和数据类型设置不对,将需要传值的参数设置为[in,out]和指针类型,根据你的设置应为VARIANT *
webstorm 2004-05-12
  • 打赏
  • 举报
回复
to hewei2003() :
无状态并不是没有属性,它是不能为某个客户端保持特征值,使服务器可同时服务更多客户,也使系统的容错性能增强。
hewei2003 2004-05-12
  • 打赏
  • 举报
回复
to longwycn(longser (微龙人))
我也不知道为什么会产生你那个错误,“无状态”我的理解是没有属性的对象。
hugo668 2004-05-11
  • 打赏
  • 举报
回复
但是,在另一台电脑上运行就失败!找不到相应的函数!
webstorm 2004-05-09
  • 打赏
  • 举报
回复
to hugo668(无与争锋)
如果你的SetAccountcon 是在IAppServer接口中实现的方法的话,只要中间层服务器程序运行无问题的话,说明你的服务器端配置没有太大问题,但你需要保证客户端有相应的权限,能够下载IAppServer接口以调用你的方法,它是不需要注册的。
hugo668 2004-05-08
  • 打赏
  • 举报
回复
请问:webstorm(mars)
我使用的是 SocketConnection 的连接方式。

我在服务器中写了一个涵数如:

procedure TServer_Account.SetAccountCon(ZT_CODE: OleVariant;
var ISCON: WordBool);
begin
if ZT_CODE = 'A' then
ISCON := Ture
else ISCON := False ;
end;

其中 ISCON 为out 输出参数到客户端中。
然后在客户端中调用方法 SocketConnection 的 AppServer 。
如:SocketConnection1.AppServer.SetAccountcon(t_str,t_bit) ;

现在的问题是:
1、如果中间层程序放在开发中间层的电脑上时,再运行程序,不会出错。
2、如果把中间层放到另一台电脑上再运行时出错!
提示为:Invalid Variant type conversion.
(可能是没有注册相应的涵数)

请问这样的问题如何处理?如何注册相应的涵数!(中间层程序运行没有问题!)
longwycn 2004-05-06
  • 打赏
  • 举报
回复

學習先:


謝謝hewei2003() (回答,為什麼我在測試的時候會提示我 無狀態的服務是不行的那
我的環境是: C++ Buider 6.0 SocketConnection ,SQL Server 2000

謝謝 webstorm(mars) ( 你的方法我會去測試一下,不過可否有案例>



請大家討論~

longwycn 2004-04-30
  • 打赏
  • 举报
回复
謝謝,那我想請問: 為什麼DCOM 和SocketConnection不可以 是否可以使用帶參數的有返回值的存儲過程呢?
webstorm 2004-04-30
  • 打赏
  • 举报
回复
可以,不过你要在应用服务器接口中实现方法。
有状态是指:应用程序服务器能自动识别客户端,并保存客户端访问状态,能保证服务的专门性和连续性,在客户端较少的情况下使用,缺点是:效率低、大势已去。
无状态是指:应用程序服务器不保存客户端访问状态,识别客户端和维护客户端信息需要编程,效率高、大势所趋。
webstorm 2004-04-30
  • 打赏
  • 举报
回复
可能是我没有说清楚,使搂主理解有误。
使用DCOMConnection和SocketConnection只是代表使用了不同的连接协议,只要应用服务器是使用MIDAS技术,应用服务器都是用同一应用服务器接口实现的,即IAppServer.
你可以通过在Delphi的View ----> Type Library 打开应用服务器接口设定来定义服务器接口。在打开的窗口中你能发现一个以字母I 打头以你的应用服务器名命名的接口,右击该接口添加方法,在方法的Parameters中设置你要传递的参数, 注意参数的Modifier设定,[in]代表传入,[out]代表传出, [in,out]代表双向。根据你参数的传递情况进行设置即可。
完成设定之后,你可在Servers_TLB中见到该接口的具体定义。
在你应用服务器应用的远程数据模块单元中,已经有你服务器方法的定义了。你只需要实现你的参数传递即可。调用方法ClientDataSet中有AppServer。
hewei2003 2004-04-30
  • 打赏
  • 举报
回复
答案是可以的!

测试环境:Oracle9i Delphi7 ADO SocketConnection

--表
create table tab1(id number,bookname varchar(10))

--插入记录
insert into tab1 values(1,'book_name')

--过程
create or replace procedure p(v1 in number,v2 out varchar) is
begin
select bookname into v2 from tab1 where id = v1 and rownum <= 1;
end;

--在Oracle中测试
set serveroutput on

declare
result tab1.bookname%type;
begin
p(1,result);
dbms_output.put_line(result);
end;

显示book_name

--服务器端程序
在Delphi7中创建Remote Data Module,放入ADOConnection1,ADOStoredProc1,DataSetProvider1控件,设置好数据库连接和ADOStoredProc1的两个参数(一个名称叫v1,input类型,另一个名称叫v2,output类型),打开ScktSrvr.exe,端口为默认的211。

--客户端程序
创建工程,设置好SocketConnection1和ClientDataSet的连接属性,放一个按钮在单击事件中:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet.Execute;
ShowMessage(ClientDataSet.Params.ParamByName('v2').AsString);
end;
弹出字符串book_name

Email:cqhw2003@126.com
longwycn 2004-04-29
  • 打赏
  • 举报
回复
如果不行話,那真的很不爽 ,害的我弄了一天!
也覺的很不方便的說!
longwycn 2004-04-29
  • 打赏
  • 举报
回复
請大家討論一下吧 ,
yueshujiang 2004-04-28
  • 打赏
  • 举报
回复
应该不可以吧。
Erice 2004-04-28
  • 打赏
  • 举报
回复
有状态无状态是指的应用服务器是否保持客户当前的状态,(数据游标),根据状态不同返回不同的数据

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧