我在应用程序服务器上写了一个过程,是获得服务器上所有数据库的名称,代码如下(其中adoquery1是为了用SQL语句得到所有数据库的名称,因为我用的是ADO,好象没有现成的获得数据库名称的方法):
function ttestsql.getDataBase:olevariant;
var name:tstrings;
i,n:integer;
begin
name:=tstringlist.Create;
try
adoquery1.Open;
n:=adoquery1.RecordCount;
result:=vararraycreate([0,n-1],varolestr);
for i:=0 to n-1 do begin
   name.Add(adoquery1.fieldbyname('name').Asstring);
   result[i]:=name[i];
   adoquery1.next;
end;
finally
name.Free;
end;
end;
然后我又在前台的formcreate事件里把所有的数据库名称添加到combobox1中,代码如下:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
dbname:olevariant;
begin
dbname:=DCOMConnection1.AppServer.getDataBase;
if varisarray(dbname) then
   for i:=0 to vararrayhighbound(dbname,1) do
      combobox1.Items.Add(dbname[i]);
combobox1.OnClick(self);
end;
运行却报错,什么“Method'getdatabase'not supported by automation object”,这个错误是怎么产生的?

解决方案 »

  1.   

    getdatabase这个方法是使用type libary 建立的吗?也就是说会不会是因为没有公布的原因?
      

  2.   

    getdatabase不能只是简单的在datamodule,通过view/type library 新建成一个过函数,刷新。再回到datamodule里写个函数的实现。在别的机器上调用,还得注册应用服务器!
      

  3.   

    问:我在应用程序服务器上写了一个过程,是获得服务器上所有数据库的名称答:TADOConnection这个组件好像有这个功能。如果不明白的话,读一下TADOConnection的帮助或它的源码
      

  4.   

    我查过帮助,TADOConnection没有这个方法,只有得到一个数据库中表的名称的方法。
    还有,我根本没用type library来建立,只是直接写了个函数。看来就是这个原因吧,可是说了别笑,这个type library我不会用(怎么在里面声明函数啊)。
      

  5.   

    有没有人能够告诉我怎么在type library声明一个函数?
      

  6.   

    begin
    dbname:=CreateOleObject('应用程序服务器的类名.接口');//增加这句,同时要uses comobj
    dbname:=DCOMConnection1.AppServer.getDataBase;
      

  7.   

    我在书上看到说打开type library编辑窗口,添加一个新的方法,然后设置这个方法的Declaration参数,可我怎么也找不到哪儿有设置这个Declaration参数
      

  8.   

    我知道我问的问题太那个了点,可是大家就算是帮一位Delphi初学者领个路吧。