2013-10-14 98 views
0

我正在比較BDE和DBExpress組件,並嘗試在TMPTABLE中執行簡單更新。Delphi DBExpress SQLDataSet.ExecSQL凍結

當我使用BDE TQuery Query.ExecSQL工作正常, ,但如果我使用DBExpress TSQLDataSet,它凍結在SQLDataSet.ExecSQL中。

我在Win7 64b中使用Delphi XE3。 數據庫是Oracle。
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 PARAMS:

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=. 
+0

什麼說調試? – Hidden

+0

它凍結。我必須重置調試。你的意思是什麼調試? – pKarelian

+0

你可以通過select檢索記錄,然後做一個'SQLDataSet.Open'?也許你的提供者/驅動程序有問題。 – kobik

回答

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