Tomsk Sysadmins Forum
Windows => Программирование => Topic started by: sie on May 26, 2006, 20:16:48
-
СУБД: PostgreSQL 8.0
Среда: C++Builder 6.0 или Delphi 6.0
Компоненты: TADOConnection и TADOQuery
Проблема: Сообщение о "Неопознанной ошибке" при попытке выполнения запроса SELECT,
который возвращает хотя бы одно поле типа DATE
Само соединение с базой успешное.
pgAdmin III выполняет все запросы без ошибок.
Ошибка возникает и в среде программирования и непосредственно в скомпилированной программе.
Пожалуйста, дайте совет/ссылки/направления поиска решения/etc.
Сам найти ответ пока не смог.
Тестовая таблица была такая:
CREATE TABLE table_clients (
ClientID INTEGER NOT NULL,
ClientFamilyName VARCHAR(20) NOT NULL,
ClientName VARCHAR(15) NOT NULL,
ClientPatronymicName VARCHAR(15) NOT NULL,
ClientBirthday DATE NOT NULL,
PRIMARY KEY (ClientID)
);
Свойства компонента ADOConnection1
LoginPrompt: false
ConnectionString: Provider=PostgreSQL.1;Password=mypass;User ID=postgres;Data Source=127.0.0.1;Location=testbase;Extended Properties=""
Свойства компонента ADOQuery1
Connection: ADOConnection1
SQL: SELECT * FROM table_clients - вызывает ошибку
или
SQL: SELECT ClientID, ClientBirthday FROM table_clients - вызывает ошибку
или
SQL: SELECT ClientID FROM table_clients - выполняется без ошибок
-
СУБД: PostgreSQL 8.0
Среда: C++Builder 6.0 или Delphi 6.0
Компоненты: TADOConnection и TADOQuery
Проблема: Сообщение о "Неопознанной ошибке" при попытке выполнения запроса SELECT,
который возвращает хотя бы одно поле типа DATE
Какую версию OLEDB-провайдера используете?
1.0.0.20 с http://pgfoundry.org/projects/oledb (http://pgfoundry.org/projects/oledb) у меня работает на таблице, созданной вышенаписанным скриптом.
-
Какую версию OLEDB-провайдера используете?
И действительно, проблема решилась со сменой версии.
У меня была библиотека pgoledb.dll версии 1.0.0.15
из того же дистрибутива, что и сам сервер PostgreSQL.
С переходом на версию 1.0.0.19 проблема исчезла.
Спасибо Victor Snezhko за подсказку и всем за внимание.
А кто-нибудь знает, как попроще заставить ADOQuery/ADOTable
определять поля типа char/varchar как строки?
У меня они определяется как Memo-поля.
Наглое навязывание своего типа дает ошибку.
Пока знаю только способ отображения как строк через
вычисляемое поле, а хотелось бы действительно строковое поле.
-
А кто-нибудь знает, как попроще заставить ADOQuery/ADOTable
определять поля типа char/varchar как строки?
У меня они определяется как Memo-поля.
Наглое навязывание своего типа дает ошибку.
Пока знаю только способ отображения как строк через
вычисляемое поле, а хотелось бы действительно строковое поле.
Эта ошибка исправлена в версии 1.0.0.20
В 1.0.0.19 в качестве максимального размера строковой колонки возвращалось ~0, и ADO может интерпретировать такие колонки только как Memo.
-
Эта ошибка исправлена в версии 1.0.0.20
Еще раз спасибо. В следующий раз сразу буду пробовать версию, которую советуют.
-
Простите, что влезаю с вопросом, подскажите, как подключиться к базе данных PostgreSQL из программы и считать данный из таблиц.