У меня база весит 10 гигов, выслать не смогу, могу предоставить доступ.
Но я кажется понял в чем ошибка. Я задублировал процедуру в схеме PUBLIC и процедура нашлась.
В режиме coFetchAll=false драйвер видит только схему PUBLIC и не видит никаких других схем, как бы их не задавать (в опциях драйвера или в префиксе таблицы или процедуры).
Драйвер игнорирует все команды "set search_path ..." и "set schema ..." и ищет объекты в схеме Public.
Попробуйте написать в схеме XXX процедуру YYY и ZZZ, так чтобы YYY вызывала ZZZ.
ExecProc('YYY') выдаст ошибку:
SQL error: function ZZZ not found
PS
У меня в базе вообще нет схемы PUBLIC. Попробуете прогнать тесты драйвера без схемы Public.
В режиме coFetchAll=TRUE драйвер работает нормально, т.е. не надеится на схему Public, которая где -то в нем зашита!!!
Найдено 5 результатов
- Пт 16 дек 2016 19:34
- Форум: dbExpress драйверы
- Тема: Не работает параметр coFetchAll=false для драйвера dbxpgs38.exe
- Ответы: 6
- Просмотры: 22414
- Чт 15 дек 2016 16:48
- Форум: dbExpress драйверы
- Тема: Выдача ошибок в драйвере PostgreSQL
- Ответы: 1
- Просмотры: 17096
Выдача ошибок в драйвере PostgreSQL
Работаю в PostgreSQL 9.4 (база в кодировке UNICODE) на Delphi 7. Вопроса 2.
1. При возникновении ошибок драйвер выдает только первую строку от сообщение от сервера:
SQL Server error: operator does not exist: integer = character varying
однако SQL Manager for PostgreSQL выдает более понятную диагностику
SQL Server error: operator does not exist: integer = character varying
LINE 1: select INV_PORT FROM data.D_B_TDBS where DOC=varchar '124669...
^
Можно не обрезать сообщение от сервера?
2. При выдачи на сервере исключения на русском языке, например:
RAISE EXCEPTION '%', 'Попытка продублировать код ISO'
Драйвер выдает абракадабру
SQL Server error: 'Ïîïûòêà ïðîäóáëèðîâàòü êîä ISO'
SQL Manager for PostgreSQL выдает правильно:
SQL Server error: Попытка продублировать код ISO
Если на сервере исключение выдать с перекодировкой
RAISE EXCEPTION '%', convert_from(Message::bytea, 'WIN1251')
то тогда все наоборот, драйвер выдает правильно, а SQL Manager for PostgreSQL - нет.
Как настроить драйвер на выдачу сообщений в правильной кодировке?
1. При возникновении ошибок драйвер выдает только первую строку от сообщение от сервера:
SQL Server error: operator does not exist: integer = character varying
однако SQL Manager for PostgreSQL выдает более понятную диагностику
SQL Server error: operator does not exist: integer = character varying
LINE 1: select INV_PORT FROM data.D_B_TDBS where DOC=varchar '124669...
^
Можно не обрезать сообщение от сервера?
2. При выдачи на сервере исключения на русском языке, например:
RAISE EXCEPTION '%', 'Попытка продублировать код ISO'
Драйвер выдает абракадабру
SQL Server error: 'Ïîïûòêà ïðîäóáëèðîâàòü êîä ISO'
SQL Manager for PostgreSQL выдает правильно:
SQL Server error: Попытка продублировать код ISO
Если на сервере исключение выдать с перекодировкой
RAISE EXCEPTION '%', convert_from(Message::bytea, 'WIN1251')
то тогда все наоборот, драйвер выдает правильно, а SQL Manager for PostgreSQL - нет.
Как настроить драйвер на выдачу сообщений в правильной кодировке?
- Пт 09 дек 2016 15:46
- Форум: dbExpress драйверы
- Тема: Не работает параметр coFetchAll=false для драйвера dbxpgs38.exe
- Ответы: 6
- Просмотры: 22414
Re: Не работает параметр coFetchAll=false для драйвера dbxpgs38.exe
Работаю в PostgreSQL 9.4. Для того, чтобы не подставлять схему в каждый запрос даю в connection команду q.sql.Add('set schema ''data'' '); q.ExecSql. Все прекрасно работает, но по умолчанию для драйвера почему-то установлена опция coFetchAll=true (читать все записи курсора на клиента)
Если установbть coFetchAll=false, то любая таблица, заданная без префикса схемы, перестает находится.
В поддержку написал письмо и выслал пример на Delphi-7. Ответа нет более 2-х недель.
Придется наверное самому написать анализатор SQL и подставлять схему в нужные места запросов, т.к. работать в режиме coFetchAll=true слишком медленно.
Кстати почему такое значение опции coFetchAll по умолчанию, например для ORACLE драйвера правила умолчания coFetchAll=false???
Если установbть coFetchAll=false, то любая таблица, заданная без префикса схемы, перестает находится.
В поддержку написал письмо и выслал пример на Delphi-7. Ответа нет более 2-х недель.
Придется наверное самому написать анализатор SQL и подставлять схему в нужные места запросов, т.к. работать в режиме coFetchAll=true слишком медленно.
Кстати почему такое значение опции coFetchAll по умолчанию, например для ORACLE драйвера правила умолчания coFetchAll=false???
- Пн 21 ноя 2016 15:33
- Форум: dbExpress драйверы
- Тема: Не работает параметр coFetchAll=false для драйвера dbxpgs38.exe
- Ответы: 6
- Просмотры: 22414
Не работает параметр coFetchAll=false для драйвера dbxpgs38.exe
Попытка установить параметр coFetchAll=false приводит к ошибке "таблица не найдена" (dbх для Delphi-7).
Если одновременно установить coCursorWithHold=true, то становится лучше (таблицы находятся), но половина запросов заканчивается сообщением:
SQL Server Error: Assertion failure (D:\Projects\Delphi\Dac\PostgreSql\Source\PgSQLProtocol.pas, line 1342)
Работать в режиме coFetchAll=true, не есть целесообразно.
Подскажите, что делать?
Если одновременно установить coCursorWithHold=true, то становится лучше (таблицы находятся), но половина запросов заканчивается сообщением:
SQL Server Error: Assertion failure (D:\Projects\Delphi\Dac\PostgreSql\Source\PgSQLProtocol.pas, line 1342)
Работать в режиме coFetchAll=true, не есть целесообразно.
Подскажите, что делать?
- Пт 29 май 2015 12:27
- Форум: dbExpress драйверы
- Тема: dbExpress драйвер для DB2
- Ответы: 1
- Просмотры: 16772
dbExpress драйвер для DB2
Есть ли возможность заказать у вас разработку dbExpress драйвера для СУБД DB2 ISeries (V7R1, V7R2).
Каковы сроки и стоимость такой разработки.
Каковы сроки и стоимость такой разработки.