Tomsk Sysadmins Forum

Windows => Программирование => Topic started by: sie on May 26, 2006, 20:16:48

Title: В PostgreSQL проблема с полями типа DATE
Post 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.
Сам найти ответ пока не смог.

Тестовая таблица была такая:
Code: [Select]
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 - выполняется без ошибок


Title: В PostgreSQL проблема с полями типа DATE
Post by: Victor Snezhko on May 27, 2006, 19:23:09
Quote from: sie
СУБД: 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) у меня работает на таблице, созданной вышенаписанным скриптом.
Title: В PostgreSQL проблема с полями типа DATE
Post by: sie on May 28, 2006, 10:22:02
Quote from: Victor Snezhko
Какую версию OLEDB-провайдера используете?
И действительно, проблема решилась со сменой версии.
У меня была библиотека pgoledb.dll версии 1.0.0.15
из того же дистрибутива, что и сам сервер PostgreSQL.
С переходом на версию 1.0.0.19 проблема исчезла.

Спасибо Victor Snezhko за подсказку и всем за внимание.

А кто-нибудь знает, как попроще заставить ADOQuery/ADOTable
определять поля типа char/varchar как строки?
У меня они определяется как Memo-поля.
Наглое навязывание своего типа дает ошибку.
Пока знаю только способ отображения как строк через
вычисляемое поле, а хотелось бы действительно строковое поле.
Title: В PostgreSQL проблема с полями типа DATE
Post by: Victor Snezhko on May 28, 2006, 16:42:40
Quote from: sie
А кто-нибудь знает, как попроще заставить ADOQuery/ADOTable
определять поля типа char/varchar как строки?
У меня они определяется как Memo-поля.
Наглое навязывание своего типа дает ошибку.
Пока знаю только способ отображения как строк через
вычисляемое поле, а хотелось бы действительно строковое поле.
Эта ошибка исправлена в версии 1.0.0.20
В 1.0.0.19 в качестве максимального размера строковой колонки возвращалось ~0, и ADO может интерпретировать такие колонки только как Memo.
Title: В PostgreSQL проблема с полями типа DATE
Post by: sie on May 28, 2006, 19:00:30
Quote from: Victor Snezhko
Эта ошибка исправлена в версии 1.0.0.20
Еще раз спасибо. В следующий раз сразу буду пробовать версию, которую советуют.
Title: В PostgreSQL проблема с полями типа DATE
Post by: arido on November 17, 2006, 17:07:18
Простите, что влезаю с вопросом, подскажите, как подключиться к базе данных PostgreSQL из программы и считать данный из таблиц.