BDE, ODBC драйвер до ACCESS, не работает ORDER BY

yolki

есть таблица document:

Ident VARCHAR(1
DATA LONGVARCHAR, // по-видимому BLOB
Page SMALLINT,

следующий оператор вызывает исключение:

select data from document where ident='blabla' order by page

исключения такие:

если убрать "order by page" всё работает
аналогичные ошибки возникают при

select * from document order by ident

щас ещё попробую погуглить по ошибкам BDE, но может, кто уже сталкивался?

0000

Я бы на

DATA LONGVARCHAR, // по-видимому BLOB

матюкнулся. BDE наверно то же
Ой, блина, перечитал пост - наверно не из-за этого

artimon

Возможно из-за этого:
In the SQL-92 standard, an ORDER BY clause may only use result column names or numbers

yolki

поясни плиз.
как следует модифицировать запрос, чтобы заработало?
вот такой работает:

select page from document order by page

а вот такой нет:

select ident, data, page from document where ident='blabla' order by page

yolki

причём

select ident, page from document order by page

работает

artimon

Хотя я не понимаю, почему это не работает, но попробуй
… order by 3

UPD: А может проблема в DATA?

artimon

Твоя вторая ошибка не про это ли как раз?

yolki

может, проблема и в DATA.
но ведь так работает:

select data, ident, page from document where ident='137'


а вот так - нет:

select data, ident, page from document where ident='137' order by page

и даже order by 3 не помогает

yolki

и ведь самое противное - эта ошибка проявляется на одних машинах, но не проявляется на других.
попробую сверить версии JET-а, может что и прояснится.

bastii

мб как раз проблема с сортировкой при наличии data?

yolki

именно. как наличие дополнительных полей в запросе может влиять на сортируемость?

artimon

Похоже на устаревшие версии.
Вот что-то нагуглилось: http://archives.postgresql.org/pgsql-general/1998-07/msg0031...

yolki

апгрейд джета не помогает. там есть какой-то хот-фикс для джета (windows2000-kb829558-x86-rus.exe) - тоже не помогает

yolki

Есть ещё такая проблема - возможно, я пошёл бы по этому пути, если бы оно работало везде.
Доступ к Access-у можно получить и не через ODBC, а через BDE, создав там алиас с драйвером MSACCESS. благо база в формате аксеса 2.0 и версия её точно не изменится.
производительность не требуется.
На одной машине я могу создать алиас и нормально с ним работать, на другой - алиас создаётся, но работать с базой нельзя: всё тот же "General SQL Error"

поиски про ошибку № -2147221164 ($80040154) приводят на сайт микрософта за апдейтами к джету. апдейты не помогают.
версии джета и дельфи на двух машинах совпадают.
есть одно "НО":
на машине, на которой не работает, стоит 2003 офис.
на той, на которой работает - стоит 2000 офис.
к этому есть другое "НО":
на машине MS Windows 2003 Server с 2003 офисом работает

0000

А так если попробовать?

select d.data, d.page from document d where ident='blabla' order by page

yolki

тот же эффект.
могу дать mdb-файл, желающие могут поупражнятся
хочу заметить, что у тебя способ не "через COM к Аксессу" - а "через COM к ODBC к Аксессу".

0000

Давай
P.S. Ну поставь другую строку соединения - и будет ADO - просто я для dbf формата это писал

yolki

Проблему закрыл следующим способом:
1) Используется ADO, connection string:
Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Persist Security Info=False;Data Source=';
2) CursorLocation = clUseServer у ADOConnection и у ADOQuery
в такой конфигурации работает.
Странно, что при выставлении CursorLocation в другое значение ORDER BY перестаёт работать в запросах, возвращающих LOB-ы
Оставить комментарий
Имя или ник:
Комментарий: