使用企业版XE2的,其中包括原生的dbExpress ODBC的支持,我已经成功创建了“连接”里的数据库名称是系统DSN的名称和密码是MS Access数据库的密码。
我可以点击修改连接页面上的测试连接,数据库资源管理报告测试连接成功。
拖放从Data Explorer的连接创建一个带有驱动程序属性设置为ODBC和PARAMS托收一个TSQLConnection:
drivername=ODBC
database=myaccessdbDSN
password=accessdbpwd
虽然这是伟大的测试,我宁愿不要求一个ODBC系统DSN创建为它工作。
从我记得,一个DSN可以只由正确格式的ConnectionString的更换,通常可以通过查看DSN的文本想通了。 不幸的是,数据资源管理器中XE2只能用系统DSN的作品,而不是文件DSN的。
我应该使用ODBC连接到MS Access数据库文件时,将TSQLConnection的ConnectionString是什么?
编辑1
考虑到与数据绑定的网格,一个TDataSource,用适当的SQL命令TSQLQuery和私人设为TSQLConnection形式(未形成部分),以下工作:
FSQLConnection := TSQLConnection.Create(nil);
FSQLConnection.DriverName := 'ODBC';
FSQLConnection.LoginPrompt := false;
FSQLConnection.Params.Values['Database'] := 'myaccessdbDSN';
FSQLConnection.Params.Values['Password'] := 'accessdbpwd';
FSQLConnection.Connected := true;
SQLQuery1.SQLConnection := FSQLConnection;
SQLQuery1.Active := true;
我看到在网格中的查询结果。
我需要做的是取代“myaccessdbDSN”有一个连接字符串。 如果我这样做,这似乎是它应该工作的方式,我收到了从ODBC驱动程序管理器“连接无法打开”的错误。
FSQLConnection := TSQLConnection.Create(nil);
FSQLConnection.DriverName := 'ODBC';
FSQLConnection.LoginPrompt := false;
FSQLConnection.Params.Values['ConnectionString'] := 'Provider=Microsoft.ACE.OLEDB.12.0;'+
'Data Source=myaccessdb.mdb;'+
'Jet OLEDB:Database Password=accessdbpwd;';
FSQLConnection.Connected := true;
SQLQuery1.SQLConnection := FSQLConnection;
SQLQuery1.Active := true;
请注意,通常情况下,在运行时设置DriverName属性时,你必须设置一些在该dbxdrivers.ini文件通常定义的其他属性。 如果的DriverName设置为“MSSQL”,它们是:
GetDriverFunc=getSQLDriverMSSQL
LibraryName=dbxmss.dll
VendorLib=sqlncli10.dll
但是,当了DriverName设置为“ODBC”,这些都是空白。 这与dbxDriver的ODBC或没有错吗?
我已经通过帮忙看着http://docwiki.embarcadero.com/RADStudio/Berlin/en/Setting_Up_TSQLConnection ,但它并没有告诉我了,我还没有尝试过,而且它的时候了一句让我充满自信
要显示连接编辑器,双击TSQLConnection组件。
在XE2,XE5,西雅图或柏林不起作用。
编辑2
我在看这个的全部原因是因为开放式ODBC驱动程序dbxExpress不再工作于柏林。 下面将XE2工作:
FSQLConnection.DriverName := 'DbxOpenOdbc';
FSQLConnection.GetDriverFunc := 'getSQLDriverODBCW';
FSQLConnection.LibraryName := 'dbxoodbc.dll';
FSQLConnection.VendorLib := 'odbcjt32.dll';
FSQLConnection.Params.Values['DriverPackageLoader'] := 'TDBXDynalinkDriverLoaderOpenOdbc';
FSQLConnection.Params.Values['IsolationLevel'] := 'ReadCommitted';
FSQLConnection.Params.Values['RowSetSize'] := '20';
FSQLConnection.Params.Values['Database'] := '?';
FSQLConnection.Params.Values['ConnectionString'] := 'DRIVER={Microsoft Access Driver (*.mdb)};'+
'DBQ=myaccessdb.mdb;'+
'UID=;'+
'PWD=accessdbpwd;'+
'DriverId=25;'+
'FIL=MS Access;';
但是,当相同的代码在柏林运行时,我得到一个“重复不准”的错误,从AddCommandFactory,这是关系到这个代码在Dbx34Drv单元,如下图所示:
constructor TDbxOpenOdbcDriver.Create(DriverDef: TDBXDriverDef);
begin
{$IF CompilerVersion > 18.50}
inherited Create(DriverDef, TDBXDynalinkDriverLoader);
InitDriverProperties(TDBXOpenOdbcProperties.Create(DriverDef.FDBXContext));
// '' makes this the default command factory.
AddCommandFactory('', CreateCommandOpenOdbc);
//AddCommandFactory(TDBXCommandTypes.DbxMetaData
{$ELSE}
raise EDbxOODBCDriverError.Create('Not Implemented: TDbxOpenOdbcDriver.Create(DriverDef: TDBXDriverDef)');
{$IFEND}
end;
作为开放ODBC驱动程序dbxExpress尚未自2013年起保持,而XE2和柏林的企业都拥有自己的ODBC驱动程序dbxExpress(Data.DBXOdbc),我想改变的属性和参数,以获得其在XE2工作的代码与本地ODBC驱动程序的工作,并确认其工作在柏林。
在螺纹https://sourceforge.net/p/open-dbexpress/discussion/119359/thread/703de7d9/表明它应该只是定期ODBC那些更换打开ODBC值的问题。
在该表http://docwiki.embarcadero.com/RADStudio/Berlin/en/DbExpress_Supported_Database_Management_Systems没有列出“ODBC”任何图书馆,所以我想这将是空白。
编辑3(并回答)
经过一番faffing有关的代码,我有以下两个XE2企业和柏林企业合作,以打开MS Access数据库使用本机ODBC驱动程序dbxExpress一个TSQLConnection对象。
FSQLConnectionAccess.DriverName := 'ODBC';
FSQLConnectionAccess.GetDriverFunc := 'getSQLDriverODBCW';
FSQLConnectionAccess.LibraryName := '';
FSQLConnectionAccess.VendorLib := 'odbcjt32.dll';
FSQLConnectionAccess.Params.Values['DriverPackageLoader'] := 'TDBXOdbcDriverLoader';
FSQLConnectionAccess.Params.Values['IsolationLevel'] := 'ReadCommitted';
FSQLConnectionAccess.Params.Values['RowSetSize'] := '20';
FSQLConnectionAccess.Params.Values['Database'] := '?';
FSQLConnectionAccess.Params.Values['ConnectionString'] := 'DRIVER={Microsoft Access Driver (*.mdb)};'+
'DBQ=myaccessdb.mdb;'+
'UID=;'+
'PWD=accessdbpwd;'+
'DriverId=25;'+
'FIL=MS Access;';
注意使用的连接字符串是如何没有像中所示的那些http://www.connectionstrings.com ,这是最主要的原因,我不使用该网站的Delphi开发。
如果你使用DevArt SQL Server驱动程序,并且需要更改到本机MS SQL Server的一个类似的变化是必需的:
// FSQLConnectionSQL.DriverName := 'DevArtSQLServer';
// FSQLConnectionSQL.GetDriverFunc := 'getSQLDriverSQLServer';
// FSQLConnectionSQL.LibraryName := 'dbexpsda40.dll';
// FSQLConnectionSQL.VendorLib := 'sqloledb.dll';
变
FSQLConnectionSQL.DriverName := 'MSSQL';
FSQLConnectionSQL.GetDriverFunc := 'getSQLDriverMSSQL';
FSQLConnectionSQL.LibraryName := 'dbxmss.dll';
FSQLConnectionSQL.VendorLib := 'sqlncli10.dll';
使用Open ODBC和DevArt的SQL Server驱动程序我们一直的原因是,我们原本有XE2专业,其中不包括ODBC或SQL驱动作为标准配置。 现在,我们正在使用的企业,这已不再是一个问题。 剩下要做的唯一事情是确定新老司机的行为不同。