1、怎样才能获得所有数据库服务器的名称列表,就是类似TADOConnection控件中用来的设置connectionstring属性的那个有四个分页的界面的第二个分页的功能。
2、或者怎样才能调用那个设置界面。

解决方案 »

  1.   


    function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
    var
    DataInit: IDataInitialize;
    DBPrompt: IDBPromptInitialize;
    DataSource: IUnknown;
    InitStr: PWideChar;
    begin
    Result := InitialString;
    DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
    if InitialString <> '' then
        DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,PWideChar(InitialString), IUnknown, DataSource);
    DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
    if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
        DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
        begin
            InitStr := nil;
            DataInit.GetInitializationString(DataSource, True, InitStr);
            Result := InitStr;
        end;
    end;
      

  2.   

    PromptDataSource(0,'');就可以了!
      

  3.   

    是不是还要引用什么单元的啊?
    程序报错,说不认识“IDataInitialize”、“IDBPromptInitialize”。
      

  4.   

    好像不行啊
    我的信箱是[email protected],能发个例子给我看看吗?
      

  5.   

    加这三个uses OleDb,comobj,ActiveX;
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,OleDb,comobj,ActiveX;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
    var
    DataInit: IDataInitialize;
    DBPrompt: IDBPromptInitialize;
    DataSource: IUnknown;
    InitStr: PWideChar;
    begin
    Result := InitialString;
    DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
    if InitialString <> '' then
        DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,PWideChar(InitialString), IUnknown, DataSource);
    DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
    if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
        DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
        begin
            InitStr := nil;
            DataInit.GetInitializationString(DataSource, True, InitStr);
            Result := InitStr;
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    PromptDataSource(0,'');
    end;end.