我正在比较 BDE 和 DBExpress 组件并尝试在 TMPTABLE 中执行简单更新。
当我使用 BDE TQuery Query.ExecSQL 工作正常,但如果我使用 DBExpress TSQLDataSet,它冻结在 SQLDataSet.ExecSQL。
我在 Win7 64b 中使用 Delphi XE3。数据库是甲骨文。
BDE Query 使用 ODBC 连接,但 DBExpress SQLDataSet 使用 Oracle 驱动程序。
这有什么问题?
procedure Test;
var
Query : TQuery; // dbe
SQLDataSet : TSQLDataSet; // dbexpress
begin
Query := TQuery.Create(nil);
Query.DatabaseName := 'DatabaseName';
Query.SQL.Add('update TMPTABLE set STATUS = 1');
Query.ExecSQL; // <-- OK
Query.Free;
SQLDataSet := TSQLDataSet.Create(nil);
SQLDataSet.SQLConnection := SQLConnection;
SQLDataSet.CommandType := ctQuery;
SQLDataSet.CommandText := 'update TMPTABLE set STATUS = 1';
SQLDataSet.ExecSQL; // <-- Freezes here
SQLDataSet.Free;
end;
这些是 SQLConnection 参数:
DriverUnit=Data.DBXOracle
DriverPackageLoader=TDBXDynalinkDriverLoader,DBXCommonDriver170.bpl
DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borland.Data.DbxCommonDriver,Version=17.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b
MetaDataPackageLoader=TDBXOracleMetaDataCommandFactory,DbxOracleDriver170.bpl
MetaDataAssemblyLoader=Borland.Data.TDBXOracleMetaDataCommandFactory,Borland.Data.DbxOracleDriver,Version=17.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b
GetDriverFunc=getSQLDriverORACLE
LibraryName=dbxora.dll
LibraryNameOsx=libsqlora.dylib
VendorLib=oci.dll
VendorLibWin64=oci.dll
VendorLibOsx=libociei.dylib
DataBase=Database Name
User_Name=user
Password=password
MaxBlobSize=-1
LocaleCode=0000
IsolationLevel=ReadCommitted
RowsetSize=20
OSAuthentication=False
MultipleTransactions=False
TrimChar=False
BlobSize=-1
ErrorResourceFile=
OS Authentication=False
Multiple Transaction=False
Trim Char=False
Decimal Separator=.