Ошибка 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, либо добавить\заменить уже существующие.


Студворк — интернет-сервис помощи студентам

здравствуйте! пишу в делфи 7 телефонный справочник.
использую: Table, DBGrid, DataSource, Query.
в Database Desktop создал базу данных Paradox 7 из 3-ёх ячеек:
телефон — имя — адрес
пример записи:
2-10-15 Пупкин Ул.Каштановая 51

делаю поиск по телефону: разместил Edit, событие по изменению содержимого.
смысл сделать так, чтобы при вводе в него 21015 находило запись выше^

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Edit2Change(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
//Query1.SQL.Add('SET Telephone = REPLACE(Telephone, "-", ""');
//Query1.SQL.Add('SELECT * FROM peoples.db WHERE Telephone LIKE "%'+Edit2.Text +'%"');
Query1.SQL.Add('SELECT * FROM peoples.db WHERE REPLACE(Telephone, "-", "") LIKE "'+Edit2.Text +'"');
Query1.Open;
DataSource1.DataSet:=Query1;
end;

но как только начинаю вводить числа, выскакивает ошибка
capability not supported
помогите, пожалуйста.


Форум программистов Vingrad

Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> BDE Error: Capability not supported. Что это за ошибка? 

:(

   

Опции темы



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

Problem Description

     I am using Delphi to access the QODBC driver. Simple test program. Have a query, data source, and grid on a form. Database Name in the Query properties is set to QuickBooks Data. Some things work fine; some do not. For example… ‘Select * from Transaction’ works just fine, but ‘select * from Account’ returns the error:

‘Capability not supported. [QODBC] Driver not capable.’

    But when I run the QODBC Support Wizard and put the same SQL statement in, it returns data just fine. I installed QB, then the QODBC drivers then I had to repair QB.

    Below is some error information from the qodbctra.txt file:

ISAMGetData
0x005A3268 [ISAM]
0x09141968 [Account]
COLUMN: 7 (Pass Through)
OFFSET: 0 RawXML: FALSE
ForceUnoptimized: FALSE
DoNotMoveToCache: FALSE
UpdateOptimized: FALSE
SQL_C_SHORT
-13108
MAX LENGTH: 2
LENGTH RETURNED: 2
ERR_NOTCAPABLE S1C00 IM001 [QODBC] Driver not capable
ISAMGetErrorMessage
0x005A3268 [ISAM]
S1C00 IM001 [QODBC] Driver not capable
ISAMCloseTable
0x005A3268 [ISAM]
0x09141968 [Account]
NO_ISAM_ERR 00000 00000

     After further checking, the VENDOR table has columns that are Boolean/Bit/YesNo fields (IsActive), and ‘select * from Vendor’ gives the same results.

Solution

     The issue is that the driver is having problems with the data type SQL_C_SHORT. I am not sure why Delphi wants Booleans returned as SQL_C_SHORT. Considering how many copies of QODBC are out there, this does not come up. Try the query below:

SELECT ListID, {fn CONVERT(«IsActive», SQL_INTEGER)} AS «IsActive» FROM Customer

     The select statement did work, and Delphi does want the Booleans as SQL_C_SHORT. The problem was with the BDE.

Note: If testing with a simple BDE TQuery with the database name set to ‘QUICKBOOKS DATA,.’ Along with the error above, you could always get a pop-up for the login info. So an option is to switch to using an ADOConnection and an ADOQuery with the connection string set to:

Provider=MSDASQL.1;Persist Security Info=False;Data Source=QuickBooks Data;

That could get rid of the pop-up, AND it handles the Boolean issue just fine.

Всем добрый день, бьюсь почти неделю не могу понять в чем дело в приведенном куске кода (см. ниже) TDBThread = class(TThread); FDB: TDatabase; возникает ошибка Capability not supported, но возникает странно раз в два дня, раз в день. Приложение работает круглосуточно. Не подскажите куда копать и что делать
Заранее всем благодарен.

destructor TDBThread.Destroy;
begin
  if Assigned(FDB) then
  begin
    if FDB.Connected then FDB.Close;
    FreeAndNil(FDB)
  end;
  inherited Destroy;
end;

Здравствуйте, SdrCoder, Вы писали:

Копать — во-первых, точно отловить, где возникает это исключение. Первое что стоит сделать — поиск процитированной строки по исходникам VCL. Если не поможет — посадить свой обработчик на RaiseErrorProc, и фиксировать стек вызовов.

Кроме того, стоит отметить, что всю эту конструкцию почти наверняка отлично заменит единственный FreeAndNil(FDB).

И наконец — уничтожение компонента соединения в потоке есть несколько сомнительная операция. Довольно велика вероятность того, что ее стоит заменить на использование пула соединений, в котором использованный объект просто возвращается в список свободных; часто это значительно экономит ресурсы.

Понравилась статья? Поделить с друзьями:
  • Ошибка ce 34878 0 на ps4 как исправить
  • Ошибка ce 34878 0 ps4 ведьмак
  • Ошибка cant load library engine dll
  • Ошибка ce 34878 0 на ps4 pro
  • Ошибка ce 34878 0 ps4 решение horizon