传字符串问题(com/dcom/midas),看看也给分

wlq 2000-03-31 10:59:00
我写个小程序,就是把数据表的名字从客户端传给服务器。用
的不是通过provider接口调ondatarequest方法,而是自己写接
口的方法,代码就几行,运行报‘意外错误’,怎么找也找不
错出在哪,正当我一筹莫展时,它自己又好了。事隔几天,我
又调出该程序,发现错误依旧!
程序很简单,就是把字符串传给服务器(D4)
我实在受不了这样的打击。。。
谁来帮帮我?
(如果我说的不够清楚,可否请留下地址我将程序发过去给您瞧瞧?)



........

其实很简单,说白了就是传字符串
谁能为我解释一下,类型库编辑器中方法的设置,在parameter页中(d4),
参数的第一列,Modifier项,选none和选空白有什么不同?那几个选项各
自是什么意思?
谢谢


...全文
443 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlq 2000-04-06
  • 打赏
  • 举报
回复
to 929:
昨天没有上网
刚刚看到你的信,非常感谢!
929 2000-04-05
  • 打赏
  • 举报
回复
我是这么做的,不知和你所想是否一样。在你的程序中多了一个获取PROVIDER: function Get_Provider1: IProvider; safecall;

function Ttest3.Get_Provider1: IProvider;
begin
Result := Provider1.Provider;
end;
我把它注释掉后,就正常了。

我的程序是这样的。
unit openimpl;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComServ, ComObj, VCLCom, StdVcl, BdeProv, DataBkr, DBClient, openserver_TLB,
Provider, Db, DBTables;

type
TOpenTable = class(TRemoteDataModule, IOpenTable)
Table1: TTable;
Provider1: TProvider;
private
{ Private declarations }
public
{ Public declarations }
protected
procedure SetTableName(const MyName: WideString); safecall;
function OpenTable: WordBool; safecall;
function Get_Table1: IProvider; safecall;
end;

var
OpenTable: TOpenTable;

implementation

{$R *.DFM}

procedure TOpenTable.SetTableName(const MyName: WideString);
begin
try
table1.close;
table1.TableName :=Myname;
except
table1.TableName:='';
end;
end;

function TOpenTable.OpenTable: WordBool;
begin
result:=true;
try
table1.close;
table1.open;
except
table1.close;
result:=false;
end;
end;

function TOpenTable.Get_Table1: IProvider;
begin
Result := Table1.Provider;
end;

initialization
TComponentFactory.Create(ComServer, TOpenTable,
Class_OpenTable, ciMultiInstance, tmApartment);
end.
coder 2000-04-04
  • 打赏
  • 举报
回复
传字符串应选择type: BSTR
wlq 2000-04-03
  • 打赏
  • 举报
回复
to 929:
收到了你的信,附件没收到。
不知你是怎么解决的我试了还是不行(不用provider也行呀,象demos/midas/adhoc
那样)
我正在学做一个midas程序,做了一半了,每天被意外错误所包围着,精神
快崩溃了:(
我觉得我还是有什么地方理解的不透,但又不知是什么地方?
929 2000-04-03
  • 打赏
  • 举报
回复
我看了你的程序,我想应是SERVER端的问题,把PROVIDER的输出重做一下就好了。另外加一些异常处理会好一些。
wlq 2000-04-03
  • 打赏
  • 举报
回复
to 929:
provider的输出指的是什么?
如果做异常处理应该怎样做呢?
wlq 2000-03-31
  • 打赏
  • 举报
回复
to 929:

已发.收到了吗
wlq 2000-03-31
  • 打赏
  • 举报
回复
to pacific:
西西,settablename方法就一行:table1.tablename:=name
to 929:
谢谢,我这就发
929 2000-03-31
  • 打赏
  • 举报
回复
我估计是由于接口类型的问题。把APPSERVER强置成你所定义的接口看看。请发份程序给我。jt74@263.net.
sadpacific 2000-03-31
  • 打赏
  • 举报
回复
服务器的SetTableName过程是怎么写的?
我怀疑表之所以没有打开很可能是因为这个过程有问题。
sadpacific 2000-03-31
  • 打赏
  • 举报
回复
我看了两遍了,可是,错误在哪儿呢?
wlq 2000-03-31
  • 打赏
  • 举报
回复
我彻底坦白了:
服务器端:
在远程数据模块上放了一个table,没有设tablename,按右键导出接口,打开
类编辑器,新建一个method,名为settablename,选parameter页,returntype
设为none,parameters中,modifer 为空白,name为 name,type为widestring
按refresh,运行注册,存盘。
客户端:
有dcomconnection,clientdataset,datasource,dbgrid,经反复试验设置正常。
在onclick中:
dcomconnection1.AppServer.settablename('country.db');
clientdataset1.Open ;
于是‘意外错误’出现了! WuWu................
各位大侠请看看,以上步骤哪里有错?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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