三层问题,函数调用(30分)

  • 主题发起人 主题发起人 xuhuizhe
  • 开始时间 开始时间
X

xuhuizhe

Unregistered / Unconfirmed
GUEST, unregistred user!
我在调用应用服务器的函数时出现如下错误:
Method 'Addsql' not supported by automation object.
请问如何解决
 
应用服务器没有声明这个"AddSQL"方法。
另外调用“dcom.appserver.addsql”???
 
应用服务器:
function Txuhuizhe.AddSQL(ClearFlag: WordBool;
const SqlString: WideString;
ExecFlag: WordBool): WordBool;
begin
with self.ADOQuery1do
try
active:=false;
if ClearFlag then
Sql.Clear;
Sql.Add(SqlString);
if ExecFlag then
execsql;
result:=true;
except
result:=false;
end;
end;

客户端:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ClientDataSet1.Active then
ClientDataSet1.Close;
DCOMConnection1.AppServer.Addsql(true,'select * from jxc_base_Client',false);
ClientDataSet1.open;
end;

 
类型库(.TLB)的接口部分有它的声明吗??仔细检查一下。
 
我在delphi的demos中看到有申明,
可是我在project1_tlb.pas中怎样申明呢?
具体步骤是怎样的?
 
这个问题实在不难啊,只是手头没这方面的书,各位帮帮忙
 
把类型库的窗口调出来---(打开project1_tlb.pas,然后按F12)
在里面添加一个method,名称AddSQL,参数名和AddSQL的参数名一致就行了
 
我试了一下,不行,提示:'灾难性错误'
我的参数ClearFlag,ExecFlag为WordBool类型,在tlb中设为VARIANT_BOOL(找不到其它bool类型),不知有没问题.
因为我将返回值VARIANT_BOOL,再设modifier为[out, retval]提示
'out parameter requires pointer type'.
 
返回值必须是指针,你在Variant_bool后加入一个空格、一个*号即可。
 
这样:
clearflag---variant_bool ---in
execflag----variant_bool --in
sqlstring---bstr------------in
isok ---variant_bool * -out,retval
 

VARIANT_BOOL
改成
VARIANT_BOOL *
 
tlb的参数type和delphi的类型不一致,请问他们的对应关系在哪可以找到
 
具体在哪里可以找到,我就不清楚了
你完全可以这样,先把数据模板(DM)里的那个函数(AddSQL)的声明和实现代码删除掉,然后在tlb中声明后,刷新就可以了(DM)里自动生成,然后再将你的实现代码拷贝到里面
ok
 
谢谢各位!
特别感谢hongxing_dl
 
后退
顶部