【问题标题】:Delphi ODBC Connection Dialog Component?Delphi ODBC 连接对话框组件?
【发布时间】:2009-09-25 11:27:04
【问题描述】:

我正在考虑将 ODBC 数据库连接添加到应用程序。

用户将在运行时配置并选择他们的数据库 odbc 连接。

是否有任何组件可以为我提供所需的一系列对话框?

允许用户选择数据源类型,选择驱动程序,已经浏览 定义的 ODBC 连接等。

干杯 山姆

【问题讨论】:

  • 我会尝试建议的解决方案并尽快回来。

标签: database delphi odbc runtime


【解决方案1】:

如果您使用的是 ADO 组件,您可以试试这个。

选项 1

  Uses
    OleDB,
    ComObj,
    ActiveX;

    function Edit_ADO_ODBC_ConnectionString(ParentHandle: THandle; InitialString: WideString;out NewString: string): Boolean;
    var
      DataInit  : IDataInitialize;
      DBPrompt  : IDBPromptInitialize;
      DataSource: IUnknown;
      InitStr   : PWideChar;
    begin
      Result   := False;
      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;

      {
      DBPROMPTOPTIONS_WIZARDSHEET = $1;
      DBPROMPTOPTIONS_PROPERTYSHEET = $2;
      DBPROMPTOPTIONS_BROWSEONLY = $8;
      DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION = $10;
      }
      if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
      begin
        InitStr   := nil;
        DataInit.GetInitializationString(DataSource, True, InitStr);
        NewString := InitStr;
        Result    := True;
      end;
    end;



Result:=Edit_ADO_ODBC_ConnectionString(0,OldConnectionString,NewString);

选项 2

Uses
ADODB;

PromptDataSource(Self.Handle, InitialString);

选项 3

Uses
ADODB,
AdoConEd;

procedure TMainForm.Button2Click(Sender: TObject);
Var
ADOConnection1 : TADOConnection;
begin
   ADOConnection1:=TADOConnection.Create(Self);
   EditConnectionString(ADOConnection1);
end;

您必须选择“Microsoft OLE DB Provider for ODBC Drivers”

再见。

【讨论】:

    【解决方案2】:

    来自 ADODB 单元的 PromptDataSource 函数。两个参数是 必填:

    1. 调用表单的句柄
    2. 一个连接字符串。如果您不想要默认连接字符串 只需将一个空字符串传递为:

      var sConn : WideString; begin sConn := PromptDataSource(Form1.Handle, ''); end;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多