Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
ВнизEDBEngineError: Capability not supported Найти похожие ветки
← →
Dgs (2003-02-18 18:33) [0]Ситуация следующая:
сервер Oracle 9i (под Windows)
клиент Oracle 7.3.4 (Настройки BDE: DLL32 - SQLORA32.DLL, VENDOR INIT - ORA73.DLL)
var
Table1: TTable;
begin
Table1.DataBase.StartTransaction;
Table1.Edit;
Table1.FieldByName("Field1").AsFloat := 123.55;
Table1.Post; // На данном методе выдает сообщение об ошибке
// "Capability not supported"
Table1.DataBase.Commit;
end;
Причем данная ошибка возникает только при стартованной транзакции.
Возможно кто-то уже сталкивался с этой ошибкой и знает пути ее решения.
PS: c клиентом Oracle 9 (Настройки BDE: DLL32 - SQLORA8.DLL, VENDOR INIT - OCI.DLL) таже история.
← →
Pat (2003-02-18 21:49) [1]> Table1.DataBase.StartTransaction
ИМХО надо коннектится через компонент TDataBase и у него стартовать транзакцию
ИМХО №2 транзакция уже активна. Проверяй Database.InTransaction, завершай и стартуй новую
← →
Dgs (2003-02-19 11:00) [2]Чтобы избежать неоднозначности, сразу оговорюсь:
компоненты TTable(TQuery) в любом случае содержат указатель на DataBase (TDataBase), даже если явно не использовать TDataBase в своем приложении, этот компонент будет создан автоматом Delphi.
В отрывке кода, который я привел не содержится проверки Database.InTransaction, это сделано специально, чтобы не "засорять" данный фрагмент кода. Ошибка возникает на вызове метода Post при стартованной транзакции. Если бы проблема была в попытке стартануть уже активную транзакцию - ошибка была бы на вызове Table1.DataBase.StartTransaction.
И еще один важный момент, в следуейщей связке:
сервер Oracle 7.3.4 (под Windows)
клиент Oracle 7.3.4 (Настройки BDE: DLL32 - SQLORA32.DLL, VENDOR INIT - ORA73.DLL) все работает нормально (ошибка не возникает)
← →
Reindeer Moss Eater (2003-02-19 11:03) [3]Проверяй Database.InTransaction
Клиент может не знать что транзакция уже стартована сервером.
← →
Desdechado (2003-02-19 11:38) [4]По существу - неявная транзакция в твоем коде абсолютно равнозначна явной (по логике).
Небольшой оффтопик:
>сервер Oracle 9i
>клиент Oracle 7.3.4
несколько странноватое подключение :)
А клиентом DB2 не пробовал подключаться?
И еще: Oracle и TTable - очень неудачное сочетание. На траффик не смотрел? А на набор запросов, которые при этом использует БДЕ?
← →
Reindeer Moss Eater (2003-02-19 11:41) [5]В любом случаее Capability not supported указывает на вложенные транзакции, которые не поддерживаются твоим сервером.
← →
Dgs (2003-02-19 13:19) [6]> В любом случаее Capability not supported указывает на вложенные > транзакции, которые не поддерживаются твоим сервером.
Это не так по одной простой причине - в Oracle нет вложенных транзакций. Плюс ко всему на связке Oracle 7.3.4(server)-Oracle 7.3.4(client) ошибка не возникает.
← →
gek (2003-02-19 13:26) [7]попробуй установить DataBase.TransIsolation:=tiDirtyRead;
и
if DataBase.inTransaction then
> И еще: Oracle и TTable - очень неудачное сочетание.
Согласен
← →
Reindeer Moss Eater (2003-02-19 14:19) [8]Dgs ©
Это не так по одной простой причине - в Oracle нет вложенных транзакций
Это не так, потому что в Oracle есть вложенные транзакции, но твой сервер их не поддерживает
← →
Dgs (2003-02-19 16:01) [9]Reindeer Moss Eater:
в Oracle есть вложенные транзакции, но твой сервер их не поддерживает
Если не секрет, что понимается под вложенными транзакциями?
Исходные условия следующие: Oracle 9.2.0.1 под Windows.
Насколько я знаю помимо обычных транзакций, не поддерживающие вложенность(SAVEPOINT - это не вложенные транзакции и BDE их не поддерживает) существуют AUTONOMOUS_TRANSACTION, но это тоже не вложенные транзакции.
И еще. Я прекрасно понимаю, что Oracle и TTable - очень неудачное сочетание. Более того оно идет вразрез с концепциями клиент-серверных приложений. Но существует такая проблема(которую я описал выше) и меня интересуют пути ее решения, а не мнения по поводу используемых компонент.
← →
Reindeer Moss Eater (2003-02-19 16:06) [10]Dgs ©
1.Любой поисковик + "orcale nested transaction" или прямо к Ларри.
2. Ты ничего не рассказал про значение параметров DBE SQLPATHTRU MODE для случаев когда работает и когда не работает.
← →
Dgs (2003-02-19 17:23) [11]Единственное что удалось найти по поводу nested transaction для Oracle - это описание все тех же AUTONOMOUS_TRANSACTION, про которые я уже упоминал. Более того, в документации сказано, что AUTONOMOUS_TRANSACTION НЕ являются вложенными.
------------------------
Autonomous Versus Nested Transactions
Although an autonomous transaction is started by another transaction, it is not a nested transaction for the following reasons:
1. It does not share transactional resources (such as locks) with the main transaction.
2. It does not depend on the main transaction. For example, if the main transaction rolls back, nested transactions roll back, but autonomous transactions do not.
3. Its committed changes are visible to other transactions immediately. (A nested transaction’s committed changes are not visible to other transactions until the main transaction commits.)
4. Exceptions raised in an autonomous transaction cause a transaction-level rollback, not a statement-level rollback.
------------------------
Что касается SQLPATHTRU MODE, этот параметр установлен в SHARED AUTOCOMMIT (пробовались и другие варианты, результат тотже)
Если есть желание и время дальнейшее обсуждение можно продолжить по ICQ: 136395177 или в чате
← →
Reindeer Moss Eater (2003-02-19 17:33) [12]Для самостоятельно (явного) управления транзакциями нужно использовать значение NOT SHARED.
Хотя не уверен, что это поможет
← →
Suntechnic (2003-02-20 07:03) [13]>Dgs ©
Глянь сюда:
http://community.borland.com/article/0,1410,25183,00.html
>All
И ещё. Не надо путать явные/неявные транзакции с режимом autocommit. Понятия хоть и в чём то пересекаются, но всё-таки разные. В Oracle нельзя явно стартовать транзакцию. Они по умолчанию все стартуются неявно.
← →
Sergey13 (2003-02-20 10:21) [14]2Dgs © (18.02.03 18:33)
>Ситуация следующая:
сервер Oracle 9i (под Windows)
клиент Oracle 7.3.4 (Настройки BDE: DLL32 - SQLORA32.DLL, VENDOR INIT - ORA73.DLL)
Шаманство конечно, но если попробовать поставить на сервер с 9 параметр совместимости на твою 7(если встанет). Может попрет. Хотя какой тогда смысл юзать 9 8-)
← →
Dgs (2003-02-20 10:30) [15]>Suntechnic ©
> http://community.borland.com/article/0,1410,25183,00.html
читал я эту статью, как и впрочем некоторые другие на эту тему, результат - все таже ошибка. Да и к тому же, это немного не то. В этой статье идет речь про парсинг SQL, а мы имеем дело с таблицей.
Мне кажется здесь дело исключительно в BDE. Либо данную конфигурацию оно пока не поддерживает, либо нужно прописать в настройках BDE какую-то хитрую DLL, либо добавить\заменить уже существующие.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c