【问题标题】:How to use the functionality of the new Data.DBXOdbc unit included in Delphi 10.2 Tokyo如何使用 Delphi 10.2 Tokyo 中包含的新 Data.DBXOdbc 单元的功能
【发布时间】:2018-08-14 07:49:17
【问题描述】:

我曾经使用 Delphi 2007,我能够连接到许多不同的数据库管理。使用 Vadim V. Lopushanskiy 的开源 dbExpress 驱动程序的系统。现在我在 10.2 Tokyo 工作。我很高兴在阅读此thread 后可以再次连接到 Access。和 SQL Server,但我不使用它;-)

我遇到了问题,尤其是。当尝试以我习惯的灵活方式连接到 Oracle 和 Sqlite3 时。让我专注于连接到 Sqlite 时遇到的问题。我使用由 Christian Werner 开发的 SQLite ODBC 驱动程序。没有成功,即我得到这个错误:'不支持的信息选项 131'。不幸的是,关于如何使用新 Data.DBXOdbc 单元的功能的文档很少。希望 Embarcadero 对此有所作为。

在我的代码下面,来自一个带有 TSQLConnection 的 DataModule 单元,该单元分配给称为 FDatabase 的 TCustomConnection。这是连接Sqlite的代码:

with (FDatabase As TSQLConnection) do
begin
  VendorLib := 'sqlite3odbc.dll';
  Params.Values['TRIMCHAR'] := 'True';     // 'Trim Char'
end;
if aUseDsn then
  ConnStr := 'DSN=' + aDbxProviderStr + ';'
else
begin
  // Work the database qualifier into a connection string.
  // Assume that aDbxProviderStr contains that database qualifier.
  Connstr := 'DRIVER=SQLite3 ODBC Driver;Database=';
  Connstr := Connstr + aDbxProviderStr + ';';
end;
if (aUsername <> '') and  (aPassword <> '') then
begin
  ConnStr := ConnStr + 'UID=' + aUsername + ';PWD=' + aPassword + ';';
end;
with (FDatabase As TSQLConnection) do
begin
  Params.Values[DATABASENAME_KEY]  := '?';
  Params.Values[CONNECTION_STRING] := ConnStr + 'coEnableUnicode=0;';
end;
(FDatabase As TSQLConnection).Open;

我希望有人可以向我们展示如何克服这个问题。

【问题讨论】:

    标签: sqlite connection odbc dbexpress delphi-10.2-tokyo


    【解决方案1】:

    好的,显然可以使用 TSQLConnection 对象连接到不同的数据库,例如Sqlite、MS-Access 或 Oracle。当然是当时一个。您需要将 dbxconnections.ini 文件中提到的所有属性分配给 TSQLConnection 对象,从 DriverName 属性开始。这个ini文件可以在文件夹C:\Users\Public\Documents\Embarcadero\Studio\dbExpress\19.0中找到

    我希望我可以通过 Odbc 连接到上面提到的 3 个数据库管理系统 (dbms),但我放弃了。毕竟,错误“不支持的信息选项 131”来自 ODBC 驱动程序,这个错误对我来说很难解决。

    我没有将 1 个 TSQLConnection 对象添加到我的数据模块,而是添加了 3 个。每个 dbms 一个。当我想连接时,我将它分配给我的 TSQLDataset 对象的 SQLConnection 属性——也可以在数据模块上找到。在打开连接之前,我只更改了相关 TSQLConnection 对象的一些属性,即仅更改 Params.Values。这样,您最终会得到一个更稳定的应用程序。 TSQLConnection 和 TSQLDataset 对象使用的内存在数据模块被释放时被释放。

    这意味着当我想连接到 MS Access 时,我只使用 Data.DBXOdbc 单元。对于 Oracle,我使用 Delphi 中包含的 Oracle 驱动程序。对于 Sqlite,我使用 Sqlite 驱动程序。主要是我可以轻松切换到另一个数据库...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2017-11-14
      相关资源
      最近更新 更多