【发布时间】:2013-10-14 12:28:31
【问题描述】:
我正在比较 BDE 和 DBExpress 组件并尝试在 TMPTABLE 中执行简单更新。
当我使用 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 参数:
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=.
【问题讨论】:
-
它冻结了。我必须重置调试。你的意思是什么调试?
-
你可以通过select检索记录,然后做一个
SQLDataSet.Open吗?也许您的提供商/驱动程序有问题。 -
选择给出数据集。数据库连接正常。我也尝试了 DbGo 组件,但更新再次失败。 BDE 组件工作正常。
-
假设 dbExpress 提供了源代码,启用 DebugDCU 并进入 execSQL(以及其中的函数)以找出它实际冻结在哪一行。这将为正在发生的事情提供更好的线索
-
通常
T[SQL]DataSet不与ExecSQL一起使用。尝试使用TSQLQuery。我知道这是一个远射,因为TSQLDataSet也应该可以工作......
标签: delphi delphi-xe3 dbexpress