Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-29972
Vvedensky
2003-01-10 21:29
2003.03.10
Быстрый пинг


9-29694
Nostradamus
2002-10-08 18:51
2003.03.10
Как лучше?


14-30030
zzet
2003-02-19 21:53
2003.03.10
Программа научилилась писать программы


3-29741
Shrek
2003-02-19 14:24
2003.03.10
Как переименовать поле?


1-29856
Goyo
2003-02-28 13:28
2003.03.10
Запрет распечатки файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский