|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Доброго времени суток. Работаю с SQLite совсем недавно, и натолкнулся на такую проблему: нужно получать информацию о таблице; запрос стандарьный: Код: sql 1.
В оболочке SQLite Expert выполняется на ура, хоть в кавычках имя, хоть без. Есть надстройка - программа, которая должна коннектиться к БД не только SQLite'ной, но и к MS, а в перспективе - к PG (пере-соединение - "на лету"). Поэтому используются компоненты TADOConnection и TADOQuery; БД описана через ODBC (SQLite3 ODBC driver). ЛЮБЫЕ запросы выполняются на ура, кроме этого. Хоть с наборами данных (данные приходят коректно), хоть просто команды. Код: pascal 1. 2.
Кусок кода, вызывающий ошибку: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Выкладываю запрос в TMemo на форме - один он там, хоть убей; смотрю текст запроса через инспектор дэлфи - вижу: Код: pascal 1.
Кто-нибудь сталкивался с такой проблемой? Может, дело в настройках БД / ODBC / ADOConnection? Какие-нибудь идеи есть? Просто мозг сломал... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 17:23 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_Gap, А зачем точка с запятой? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 17:51 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Привычка. Пробовал и без нее,- разницы никакой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 17:56 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_Gap, Попробуйте тот же запрос, через тот же драйвер, но в другой среде. Например, через MS Access. Сравните, будут ли различия в поведении. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 19:18 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Не, Access кроме DML ничего не понимает... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 19:32 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
RXLПопробуйте тот же запрос, через тот же драйвер, но в другой среде. Например, через MS Access. Сравните, будут ли различия в поведении. А смысл? - Access, насколько я помню, не поддерживает команду PRAGMA; - этот запрос мне нужен в моей среде. Пока что обхожусь парсингом поля 'SQL' из sqlite_master. Но это - самоделка, рядом с удобной, фирменной вещью, которая есть, но не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2012, 09:13 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_Gap, Смысл чтобы понимать, кто виноват. Фирменная вещь занимается тем же самым. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2012, 09:45 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
RXLФирменная вещь занимается тем же самым. Получается, что нет. Там откуда-то вылазит ВТОРОЙ рекордсет. Если я выполняю запрос: Код: sql 1.
, то все выполняется корректно, приходит один рекордсет с одной записью, и с данными можно разбираться. Значит, PRAGMA делает что-то еще, кроме Select'а; именно PRAGMA, а не ODBC / ADOConnection. RXLСмысл чтобы понимать, кто виноват. Согласен. Но не способен: SQLite - на сях написан, там можно было бы посмотреть (и увидеть!) реализацию этой самой прагмы. Потому и спрашиваю здесь, а не просмотриваю коды на официальной странице лайта. Должен же кто-нибудь знать разницу между Select'ом и прагмой? (Как в фильме "ДМБ": - Суслика видишь? - Нет. - И я - нет. А он - есть. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2012, 11:08 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_Gap, какой набор данных ты ждешь от прагмы?! pragma - это ExecSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 18:19 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
MaratIskкакой набор данных ты ждешь от прагмы?! Просто один набор данных, тот самый, который появляется в SQLite Expert. Но там - я его вижу, а на приложении - получаю исключение. В этом и причина появления моего вопроса здесь (см.мое первое сообщение). Причем ошибка - не ОТСУТСТВИЕ набора данных, а присутствие БОЛЕЕ, ЧЕМ ОДНОГО набора данных. Это и поставило в тупик. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 09:12 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
2MaratIsk: Да, вот еще что забыл сказать: те компоненты, что используют sqlite3.dll (в сети есть модули SQLite3.pas и SQLiteTable3.pas) прекрасно переваривают строку Код: sql 1.
как текст запроса, и возвращают ровно один набор данных. Просто в моем проекте они не могут использоваться; причины - указал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 09:42 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
И еще 2MaratIsk: MaratIskpragma - это ExecSQL Это - СОВСЕМ НЕ ExecSQL для ADO-компонентов; этот метод не возвращает набор данных, даже если таковой появляется при выполнении запроса. Попробуйте в ADOQuery задать текст запроса (свойство SQL): Код: sql 1.
, и увидите разницу между ExecSQL и Open. В первом случае - привязанный грид остается пустым. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 16:26 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_GapПричем ошибка - не ОТСУТСТВИЕ набора данных, а присутствие БОЛЕЕ, ЧЕМ ОДНОГО набора данных. Это и поставило в тупик.Ну а что тебе мешает выбрать эти несколько наборов данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 17:50 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
White OwlНу а что тебе мешает выбрать эти несколько наборов данных? Мне - ничего; что такое NextRecordset - знаю, пользовал, но с MS SQL'ной БД. Но сообщение об ошибке - русским по белому: 'Текущий поставщик не поддерживает возврат нескольких наборов записей в результате выполнения одной операции.' ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 18:24 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_GapWhite OwlНу а что тебе мешает выбрать эти несколько наборов данных? Мне - ничего; что такое NextRecordset - знаю, пользовал, но с MS SQL'ной БД. Но сообщение об ошибке - русским по белому: 'Текущий поставщик не поддерживает возврат нескольких наборов записей в результате выполнения одной операции.'Значит меняй поставщика. Или хотя-бы напиши разработчику, вдруг они почешутся и исправят ошибку? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 21:32 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
White Owl хотя-бы напиши разработчику Только и остается. Благо всемирная сеть дает такую возможность. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 09:57 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Разработчику думаю можно и не писать - либо очень старая версия OLEDB провайдера, либо разработчик забил на свое поделие. Потому как PRAGMA для SQLite - свято. Это надо было догадаться использовать dbGo для SQLite ... Cмотри в сторону других универсальных библиотек - (Any|Uni)DAC. Как минимум PRAGMA там работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 22:13 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Dmitry ArefievЭто надо было догадаться использовать dbGo для SQLite ...А ты откуда знаешь что там dbGo используется? Еще раз просмотрел посты ТС и нигде ничего характерного именно для dbGo не увидел... Или ты по ошибке определил? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 22:32 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_GapПоэтому используются компоненты TADOConnection и TADOQuery ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2012, 12:41 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Dmitry ArefievРазработчику думаю можно и не писать Поздно. Уже написал, и именно разработчику ODBC-драйвера, Кристиану Вернеру (Christian Werner, chw@ch-werner.de). Dmitry ArefievPRAGMA для SQLite - свято. А он так не считает... Его ответ: Christian WernerThe PRAGMA handling is left out by intent: - ODBC is an abstraction layer which isolates you from the details of a specific database - the PRAGMA command is SQLite specific - you should use SQLGetTables() et.al. instead of "PRAGMA table_info" Даже продолжать переписку не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 11:34 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Serg_GapChristian WernerThe PRAGMA handling is left out by intent: Ответ в мусорную корзину. Разработчику заняться другими проектами. А тебе больше не работать с SQLite через dbGo / ADO / ODBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 13:26 |
|
Связка SQLite + Delphi: ошибка выполнения запроса PRAGMA при коннекте через ODBC
|
|||
---|---|---|---|
#18+
Dmitry ArefievА тебе больше не работать с SQLite через dbGo / ADO / ODBC. Рад бы в рай... Все предыдущие проекты переписывать? Там есть и MS, и PG отчасти, и теперь вот SQLite уже есть... Полиморфизм, однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 14:42 |
|
|
start [/forum/topic.php?fid=54&fpage=18&tid=2009018]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 409ms |
0 / 0 |