发一个SQL语句: Select Name From Master..Sysdatabases order by Name
我试了一下,用TSession.GetDatabaseNames只能列出在BDE中设置的Alias,直接在TQuery中用select name from sysdatabases也不行,最后想了一个曲线救国的办法,建了一个存储过程 CREATE PROCEDURE dbo.sp_listdbs AS select name from sysdatabases然后在Delphi程序中写: var db: TDatabase; sproc: TStoredProc; begin db := TDatabase.Create(Application); try with db do begin DatabaseName := '007'; DriverName := 'MSSQL'; Params.Text := 'SERVER NAME='+Edit1.Text; Open; sproc := TStoredProc.Create(db); try sproc.DatabaseName := DatabaseName; sproc.StoredProcName := 'sp_listdbs'; sproc.Open; ListBox1.Items.Append( Edit1.Text+' Has Databases:' ); while not sproc.EOF do begin ListBox1.Items.Append( sproc.Fields[0].AsString ); sproc.Next; end; finally sproc.Free; end; Close; end; finally db.Free; end;过程需要输入用户标识和口令(你可以在db中设置Params和LoginPromt来避免这点),于是ListBox1中会有数据库名出现,你也可以在存储过程中的select中加条件限制来只选用户数据库。另外,db和SProc可以用Form上的组件。最后忘了,其实用系统提供的sp_databases也能行,不过就不好做筛选了。
奇怪,后来再试结果可以用select * from sysdatabases。原来必须是master..sysdatabases,分给zou5655(周围)吧,他是高手。
Select Name From Master..Sysdatabases order by Name
CREATE PROCEDURE dbo.sp_listdbs AS
select name from sysdatabases然后在Delphi程序中写:
var
db: TDatabase;
sproc: TStoredProc;
begin
db := TDatabase.Create(Application);
try
with db do
begin
DatabaseName := '007';
DriverName := 'MSSQL';
Params.Text := 'SERVER NAME='+Edit1.Text;
Open; sproc := TStoredProc.Create(db);
try
sproc.DatabaseName := DatabaseName;
sproc.StoredProcName := 'sp_listdbs';
sproc.Open;
ListBox1.Items.Append( Edit1.Text+' Has Databases:' );
while not sproc.EOF do
begin
ListBox1.Items.Append( sproc.Fields[0].AsString ); sproc.Next;
end; finally
sproc.Free;
end; Close;
end;
finally
db.Free;
end;过程需要输入用户标识和口令(你可以在db中设置Params和LoginPromt来避免这点),于是ListBox1中会有数据库名出现,你也可以在存储过程中的select中加条件限制来只选用户数据库。另外,db和SProc可以用Form上的组件。最后忘了,其实用系统提供的sp_databases也能行,不过就不好做筛选了。