参考delphi的demo里的取Oracle数据库信息的程序

解决方案 »

  1.   

    发一个SQL语句:
      Select Name From Master..Sysdatabases order by Name
      

  2.   

    我试了一下,用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也能行,不过就不好做筛选了。
      

  3.   

    奇怪,后来再试结果可以用select * from sysdatabases。原来必须是master..sysdatabases,分给zou5655(周围)吧,他是高手。