Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема доступа к индексно-организованной таблице / 25 сообщений из 26, страница 1 из 2
21.08.2007, 10:45:30
    #34740802
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
При попытке связаться с индексно-организованной таблицей Oracle я посылаю запрос:
SELECT RG, RG_NAME FROM TABLE
Но в моей программе на этапе ADOQuery1->Open() выдаётся исключение следующего вида:
ФОРМАТ ДАННЫХ НЕ ПОДДЕРЖИВАЕТСЯ.
Причём при работе с обычной таблицей всё проходит нормально. Подскажите, кто знает, как решить проблему.
...
Рейтинг: 0 / 0
21.08.2007, 10:46:14
    #34740804
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Забыл сказать, я работаю на Builder C++
...
Рейтинг: 0 / 0
21.08.2007, 11:30:50
    #34740992
ODAC-овец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Использовать вместо ADO библиотеку, которая нормально умеет работать с Oracle - ODAC/AnyDAC/DOA.
...
Рейтинг: 0 / 0
21.08.2007, 12:25:19
    #34741229
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Я слышал про DOA. Но чтобы переходить на DOA мне нужно коренным образом переделывать свою программу. Может кто подскажет, как решить проблему с помощью ADO?
...
Рейтинг: 0 / 0
21.08.2007, 12:31:00
    #34741248
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
А может дело таки в запросе?
Чье исключение возникает? полный текст можете привести?
...
Рейтинг: 0 / 0
21.08.2007, 13:24:50
    #34741505
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Исключение генерируется Ораклом:
ТИП ДАННЫХ НЕ ПОДДЕРЖИВАЕТСЯ
...
Рейтинг: 0 / 0
21.08.2007, 13:53:01
    #34741635
Проблема доступа к индексно-организованной таблице
Может быть проблема в несоответствии Oracle-клиента (старенькая версия)...
Посмотрите версии клиента и сервера.
И код ошибки, если можно... ORA-?????
...
Рейтинг: 0 / 0
21.08.2007, 13:53:13
    #34741636
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
BiosiИсключение генерируется Ораклом:Тогда должен быть номер ошибки ORA-XXXXX
...
Рейтинг: 0 / 0
21.08.2007, 14:01:20
    #34741669
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Странно... Но кода ошибки нет. Вот сообщение, выдаваемое отладчиком Builder.
...
Рейтинг: 0 / 0
21.08.2007, 14:06:09
    #34741687
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
У меня стоит Oracle 10g
...
Рейтинг: 0 / 0
21.08.2007, 14:14:23
    #34741728
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
BiosiСтранно... Но кода ошибки нет. Вот сообщение, выдаваемое отладчиком Builder.А счего вы взяли, что E Ole Exception генерируется Ораклом?
...
Рейтинг: 0 / 0
21.08.2007, 14:40:13
    #34741849
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
По всей видимости, я ошибся. Не Ораклом генерируется ошибка. Но суть остаётся та же - с индексно-организованной таблицей ADOQuery не хочет работать.
...
Рейтинг: 0 / 0
21.08.2007, 16:11:15
    #34742217
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Я создал маленький проект. Вот текст его основного модуля:

#include <vcl.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM TABLE");
ADOQuery1->Open();
}

Выдаётся всё та же ошибка что формат данных не поддерживается (для индексно-организованной таблицы). Я подозреваю, что ADO пытается сам индексировать таблицу, а так как она уже индексирована, то получается ошибка. А как сделать чтобы ADOQuery не индексировал таблицу?
Может
...
Рейтинг: 0 / 0
21.08.2007, 16:15:34
    #34742231
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
BiosiЯ создал маленький проект. Вот текст его основного модуля:
...
#include "main.h"
...А покажите, плиз, main.h
...
Рейтинг: 0 / 0
21.08.2007, 16:23:23
    #34742264
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Вот текст хидера:

#ifndef mainH
#define mainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TADOQuery *ADOQuery1;
TADOConnection *ADOConnection1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
...
Рейтинг: 0 / 0
21.08.2007, 16:26:56
    #34742283
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Вы уверены, что таблицы, которая дает ошибку и которая не дает ошибку, абсолютно идентичны за исключением типа?
...
Рейтинг: 0 / 0
21.08.2007, 16:40:31
    #34742349
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Вот SQL - текст создания неиндексированной таблицы (с которой всё работает нормально):

create table TABLE1
(
RG NUMBER(10) not null,
RG_NAME VARCHAR2(60),
DT DATE,
VAL FLOAT,
STATUS NUMBER(10)
);

А вот индексно-организованная таблица, при обращении к которой выдаётся ошибка:

create table TABLE1
(
RG NUMBER(10) not null,
RG_NAME VARCHAR2(60),
DT DATE primary key,
VAL FLOAT,
STATUS NUMBER(10)
) organization index;

Название таблицы не TABLE, а TABLE1
...
Рейтинг: 0 / 0
21.08.2007, 17:56:33
    #34742736
binary_float
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Может быть ADO ругается на float? Это новый тип, введённый в 10-ке, проверьте без этого поля.

Но всё-же рекомендовал бы посмотреть в сторону ODAC/AnyDAC...
...
Рейтинг: 0 / 0
21.08.2007, 18:01:07
    #34742752
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Спасибо, я конечно почитаю побольше про этот DOA, но мне придётся тогда всю свою программу переделывать :(
FLOAT работает даже на Oracle 8i. Ведь таблицы то создаются без проблем!
...
Рейтинг: 0 / 0
21.08.2007, 18:15:12
    #34742811
binary_float
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
BiosiСпасибо, я конечно почитаю побольше про этот DOA, но мне придётся тогда всю свою программу переделывать :(
FLOAT работает даже на Oracle 8i. Ведь таблицы то создаются без проблем!
Я имел ввиду тип float для полей таблиц, какой Oracle 8 ? Это новый тип данных, появившийся в 10.1 : http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_whatsnew.htm#i971147
поэтому и предположил, что старая реализация ADO об нём понятия не имеет.

Попробуйте поработать с таблицами (в т.ч. и IOT), в которых нет float.
...
Рейтинг: 0 / 0
21.08.2007, 18:31:27
    #34742863
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
BiosiСпасибо, я конечно почитаю побольше про этот DOA, но мне придётся тогда всю свою программу переделывать :(Если уж переделывать, то, имхо, никак не на DOA.
...
Рейтинг: 0 / 0
22.08.2007, 10:55:34
    #34744006
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
binary_floatЯ имел ввиду тип float для полей таблиц, какой Oracle 8 ? Это новый тип данных, появившийся в 10.1
Я попробовал обращаться к таблице, в которой нет поля с типом float, но результат тот же :(
...
Рейтинг: 0 / 0
22.08.2007, 11:25:09
    #34744117
DBMonitor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Попробуйте каким-нибудь DBMonitor-ом посмотреть какой именно запрос отправляется от клиента к серверу, ADO иногда "умничает" и изменяет запросы (добавляет rowid, например).
Ну и проверьте с нормальной библиотекой, чтобы быть уверенным, что проблема именно в ADO.
...
Рейтинг: 0 / 0
22.08.2007, 11:32:36
    #34744150
Biosi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
Да, есть такое дело. Помимо моего запроса, сам ADO отправляет запрос на поле вида TABLE.ROWID, но, как мне сказали, в индексно-организованной секционированной таблице Oracle такого поля нет, а есть поле UROWID. И как мне перенастроить этот ADO чтобы он не умничал, я не знаю :(
...
Рейтинг: 0 / 0
22.08.2007, 12:07:28
    #34744310
Тынц.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема доступа к индексно-организованной таблице
По-видимому, проблема таки в uriowid. Только это не поле а тип данных логического поля rowid для index-organized таблиц.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 5 . 0  

SQL> create table TEST
   2   (
   3     ID NUMBER
   4   );
 
Table created
 
SQL> create table IOT_TEST
   2   (
   3     ID NUMBER not null,
   4     constraint PK primary key (ID)
   5   )
   6   organization index;
 
Table created
 
SQL> insert into test values( 1 );
 
 1  row inserted
 
SQL> insert into iot_test values( 1 );
 
 1  row inserted
 
SQL> commit;
 
Commit complete
 
SQL> select dump(rowid) from test;
 
DUMP(ROWID)
--------------------------------------------------------------------------------
Typ= 69  Len= 10 :  0 , 10 , 149 , 237 , 1 , 66 , 89 , 94 , 0 , 0 
 
SQL> select dump(rowid) from iot_test;
 
DUMP(ROWID)
--------------------------------------------------------------------------------
Typ= 208  Len= 10 :  2 , 4 , 1 , 66 , 89 , 136 , 2 , 193 , 2 , 254 
 
SQL> 

ADO, скорее всего, не понимает Typ=208.

Попробуй LockType = ltReadOnly, если нужно только чтение. Тогда ADO не будет добавлять rowid в запрос (оно ему нужно для уникальной идентификации строки для блокировок/обновлений).

Но намного лучшим решением будет переход на ODAC/AnyDAC. Подозреваю, что это не первая и последняя проблема при работе с Oracle через ADO.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема доступа к индексно-организованной таблице / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]