rt:
怎样通过odbc的连接取得其连接的数据库名?
我用的是odbc连接数据库,但是数据库名称可能会变化,
怎样通过odbc连接取得其连接的数据库名称?

解决方案 »

  1.   

    其實可以通過TDatabase的Params來得到下面的一段程序是:
    在窗體上放了一個TDatabase,
    同時設置其Databasename為:AAAA
    將一個TQuery的Dabasename設置為AAAA
    然後通過這個TQuery的Dabasename找到相應的TDatabase
    並從其Params中取得數據庫的名字procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
    begin
      for I := 0 to Self.ComponentCount - 1 do
      begin
        if (Self.Components[I] is TDatabase) and
          (TDatabase(Self.Components[I]).DatabaseName =
            Query1.DatabaseName) then
          ShowMessage(TDatabase(Self.Components[I]).Params.Values['DATABASE NAME']);
      end;end;
    如果TQuery是直接通過ODBC來連接的話,那就得通過注冊表來讀取信息了
    其代碼如下:
    uses Registry;procedure TForm1.Button2Click(Sender: TObject);
    var
      Reg: TRegistry;
      strOpenKey: string;
    begin
      strOpenKey := '\Software\ODBC\ODBC.INI\' + Query1.DatabaseName;
      Reg := TRegistry.Create;
      try
        Reg.RootKey := HKEY_CURRENT_USER;
        if Reg.OpenKey(strOpenKey, False) then
        begin
          //你要的數據庫名就在這裡了
          ShowMessage(Reg.ReadString('Database'));
          Reg.CloseKey;
        end;
      finally
        Reg.Free;
      end;
    end;