0

我正在比较 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=.
4

1 回答 1

0

我终于明白这有什么问题了。例子太简单了。我没有看到已经有 bde 事务像这样运行。

DataBase.StartTransaction; // BDE StartTansaction 

BDEQuery.ExecSQL;       // <-- BDE update OK  
SQLDataSet.ExecSQL;     // <-- DBX update Freezes, because it waits for bde commit  

DataBase.Commit;        //  BDE Commit 
于 2014-01-21T05:55:21.007 回答