powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQLTables
9 сообщений из 9, страница 1 из 1
SQLTables
    #34654364
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно не могу понять, что я делаю не так
PostgreSQL 8.1.5-6.1C для Linux
ODBC драйвер версии 3.5.1 для Win

К базе подключен, таблица _1SSYSTEM гарантированно существует, и владелец ее - postgres
Делаю запрос
SQLTablesW(Hstmt, NULL,0, "postgres", 8, "_1SSYSTEM", 9, "TABLE", 5)
а в ответ на
SQLFetch - тишина, код возврата 100 - данные не найдены.

Что я делаю не так?
Требуется разобраться именно с функциями ODBC драйвера, а не менять это дело на SQL запрос таблицы pg_tables

Заранее благодарен.
...
Рейтинг: 0 / 0
SQLTables
    #34654585
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по спеке:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQLHSTMT hstmt
SQLWCHAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLWCHAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLWCHAR *szTableName,
SQLSMALLINT cbTableName,
SQLWCHAR *szTableType,
SQLSMALLINT cbTableType

четвертый параметр это имя схемы, а не имя вледельца объекта. Попробуйте заменить "postgres" на "public" (если вы явно не указывали другую схему во время создания таблицы)
...
Рейтинг: 0 / 0
SQLTables
    #34654677
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, на "public" тоже не находит таблицу, я пробовал.
И если залезть поглубже в исходники ODBC драйвера постгресса, то можно увидеть, что там внутри SQLTables вызывается PGAPI_Tables, которой параметр szSchemaName передается как cbTableOwner, что, конечно, странно :)

Скажу то, что успел найти еще:
Имя таблицы: _1SSYSTEM - так оно создавалось
На запросы выдает следующее:

SELECT * FROM pg_tables WHERE tablename='_1SSYSTEM';
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers
------------+-----------+------------+------------+------------+----------+-------------
(записей: 0)

А теперь, внимание:
SELECT * FROM pg_tables WHERE tablename='_1ssystem'
master-# ;
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers
------------+-----------+------------+------------+------------+----------+-------------
public | _1ssystem | postgres | | f | f | f
(1 запись)


При этом:
select * from _1SSYSTEM;
curdate | curtime | eventidta | dbsign | dbsetuuid | snapshper | accdate | flags
---------+---------+-----------+--------+-----------+-----------+---------+-------
(записей: 0)

И:

SELECT * FROM _1ssystem;
curdate | curtime | eventidta | dbsign | dbsetuuid | snapshper | accdate | flags
---------+---------+-----------+--------+-----------+-----------+---------+-------
(записей: 0)

Видимо поэтому и через SQLTables не находится таблица. Создавалась она большими буквами, а ее существование выводится маленькими.
Хелп ми :)
...
Рейтинг: 0 / 0
SQLTables
    #34654728
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А помочь в чем?

Zashibis
SQLFetch - тишина, код возврата 100 - данные не найдены.

SELECT * FROM pg_tables WHERE tablename='_1ssystem'
(1 запись)

SELECT * FROM _1ssystem;
(записей: 0)


У вас есть таблица, но в ней нет записей. Что здесь не так?
...
Рейтинг: 0 / 0
SQLTables
    #34654796
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помочь в том, что не выполняется запрос
SELECT * FROM pg_tables WHERE tablename='_1SSYSTEM';
Т.е. даже когда я создаю таблицу большими буквами, у постгресса она в системную таблицу pg_tables помещается в нижнем регистре. Ну и как бы да ладно. Но когда я запрашиваю у постгресса, существует ли таблица '_1SSYSTEM' - он говорит что нет, т.е. постгресс выполняет регистрозависимый поиск, и это делается как при
SELECT * FROM pg_tables WHERE tablename='_1SSYSTEM'
так и при выполнении функции SQLTables !!!, что в общем-то смотрится криво. Может у меня просто что-то не настроено?

Сейчас я впаял в ODBC драйвер в SQLTables понижение регистра для имени таблицы, и все заработало. Но ведь это же не правильно так делать.
...
Рейтинг: 0 / 0
SQLTables
    #34654960
tkopets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тебе сюда
...
Рейтинг: 0 / 0
SQLTables
    #34655557
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал, ничего нового для себя пока не открыл, то что "Foo" не равно "FOO" - это я знаю.
Вопрос ведь в другом, я создаю таблицу "_1SSYSTEM"
Постгрес ее создает. Но после этого я делаю запрос через SQLTables на имя "_1SSYSTEM" и мне говорят, что такой таблицы не существует! Зато этот же запрос на имя "1ssystem" проходит на ура, и таблица находится.
Это только у меня так или у всех? :)
...
Рейтинг: 0 / 0
SQLTables
    #34655618
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zashibis
Это только у меня так или у всех? :)

Только у тебя :)
Насколько я посмотрю тут народ предпочитает связку delphi + zeos.
...
Рейтинг: 0 / 0
SQLTables
    #34655846
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну мне выбирать особо не приходится, есть 1С, есть ее запросы.
1С создает базу, и через некоторое время проверяет ее существование через ODBC функцию SQLTables, и менять исходники 1С у меня возможности нет. Сейчас я временно поместил в ODBC драйвер функцию, которая переводит имя таблиц в нижний регистр, и SQLTables проходит нормально, но это не есть правильно :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQLTables
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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