我在应用程序服务器上写了一个过程,是获得服务器上所有数据库的名称,代码如下(其中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”,这个错误是怎么产生的?
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”,这个错误是怎么产生的?
还有,我根本没用type library来建立,只是直接写了个函数。看来就是这个原因吧,可是说了别笑,这个type library我不会用(怎么在里面声明函数啊)。
dbname:=CreateOleObject('应用程序服务器的类名.接口');//增加这句,同时要uses comobj
dbname:=DCOMConnection1.AppServer.getDataBase;