如何在程序运行时调用ADO的那个build connectionstring的那个对话框?这样可以让用户选择数据库。

解决方案 »

  1.   

    那不如把数据库填入一个 ComboBox 让用户选择呢,那样岂不是更直观一些...
      

  2.   

    SELECT name FROM master.dbo.sysdatabases
      

  3.   

    那不一样的,用combobox还需要根据用户选的数据库来手动生成connString,有些数据库还需要输密码,很不方便的。调用那个对话框的话就可以省去很多代码和步骤。我现在查到好像是要调用windows里的oledb32.dll文件,不过具体的还不是太清楚怎么调用
      

  4.   

    function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
      

  5.   

    smiler007(笑一笑)你说的有道了,呵呵,我没考虑到用户的可操作性,只是想用起来方便。
      

  6.   


    现在已经找到一个办法了,我认为很不错,用起来很方便,不用直接去连oledb32.dll文件。*********************************以下内容为转载***************************
    新建一个ActiveX Library,再新建一个COM Object,起个名字MSDASC。保存。 
    然后选菜单View->Type Library,在右边Uses页中点右键,选择查看所有类型库,找到Microsoft OLE DB Serivce Component 1.0 Type Library,保存。OK,在你的保存目录下有了一个MSDASC_TLB.pas,拷出来,其它的可以删除啦:) 
    再新建一个Delphi工程,保存。 
    添加我们刚才的文件MSDASC_TLB.pas到工程,在主窗体中uses MSDASC_TLB,我们要用的是其中的IDataSourceLocator接口。 
    添加一个按钮,一个ADOConnection。代码如下 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    DataSourceLocator:IDataSourceLocator; 
    ADOConn:IDispatch; 
    begin 
    DataSourceLocator := CoDataLinks.Create; //创建接口指针 
    ADOConn := DataSourceLocator.PromptNew; // 打开配置窗体 
    self.ADOConnection1.ConnectionObject := IDispatch(ADOConn) as _Connection;//赋值给ADOConnection 
    showmessage(self.ADOConnection1.ConnectionString); //打出来看看对不对 
    DataSourceLocator := nil; //记着释放啊 
    end; 
    取到字符串啦,你可以自己加密,你可以存到你能读到的任何地方。 
    打开MSDASC_TLB.pas,你可以看到IdataSourceLocator接口还有PromptEdit方法,看名字就知道是干什么的啦,参数类似,就不多说啦。 ********************************************************************************大家还有别的方法吗,说出来,我送分了
      

  7.   

    其实ADOConnection有个Properties[PropertyIndex]属性,用起来相对比较简单并且也方便,比如属会了一个服务器名或者数据库名,或者用户名,或者密码,都可以直接对其进行赋值即可,并且也不至于改变原来的连接串的其它内容。
      

  8.   

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls,adoconed;(最后一个为新添加的--->>adoconed)添加一个ADOConnection1和Button1procedure TForm1.Button1Click(Sender: TObject);
    begin
      EditConnectionString(ADOConnection1);//Here
    end;OK!!