Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.02.2015, 22:04
maxfox123 maxfox123 вне форума
Прохожий
 
Регистрация: 07.07.2013
Сообщения: 20
Версия Delphi: delphi 6
Репутация: 10
По умолчанию отображение данных в TDBGrid из базы Постгрес

Добрый день,

Если можно подскажите (ткните носом ) где могу ошибаться, при отображении данных в TDBGrid из базы Постгрес. Используя компоненты ZEOS.

В базе постгреса есть таблица, с полями как приведено ниже.
CREATE TABLE fmbz_user.table_accountfio
(
id serial NOT NULL, -- автоинкрементное поле таблицы
id_accountidentifier numeric NOT NULL, -- Уникальный идентификатор сотрудника
id_lastname text, -- Фамилия сотрудника
id_firstname text, -- Имя сотрудника
id_middlename text, -- Отчество сотрудника
id_birthday text, -- день рождения сотрудника
id_center text, -- Центр в котором работает сотрудник
id_state text, -- состояние сотрудника (активен/в резерве)
id_specialist text, -- квалификация сотрудника как специалиста
id_manager text, -- квалификация сотрудника как менеджера
CONSTRAINT firstkey PRIMARY KEY (id_accountidentifier)
)

На форме,
ZConnection_Main : TZConnection;
ZQuery_Main : TZQuery;
DBGrid_MainForm_FIO : TDBGrid;
DataSource_Main : TDataSource;
Код:
//Устанавливаю свойства :
ZConnection_Main.HostName	:= tConnectionData.sHostName;
ZConnection_Main.Database	:= ‘FMBZ_Base’;
ZConnection_Main.User	:= ‘fmbz_user’;
ZConnection_Main.Password	:= ‘fmbz_user’;
ZConnection_Main.Protocol	:= ‘postgresql-9’;
ZConnection_Main.Port	:= 5432;
ZConnection_Main.LoginPrompt:= False;
ZConnection_Main.Properties.Add('codepage=win1251');
ZQuery_Main.Connection	:= ZConnection_Main;

//Производим подключение
ZConnection_Main.Connect;

// в дебагере видно что подключение произведено

//Очистка мета-данных
ZConnection_Main.DbcConnection.GetMetadata.ClearCache;
ZQuery_Main.SQL.Clear;

//создание SQL запроса
sSQLText:=	‘SELECT * FROM fmbz_user.Table_AccountFIO';

//Установка DataSource
DataSource_Main.DataSet:= ZQuery_Main;
DBGrid_MainForm_FIO.DataSource:= DataSource_Main;

//установка полей DBGrid
DBGrid_MainForm_FIO.Columns[0].FieldName	:='id_lastname';
DBGrid_MainForm_FIO.Columns[1].FieldName	:='id_firstname';
DBGrid_MainForm_FIO.Columns[2].FieldName	:='id_middlename';
DBGrid_MainForm_FIO.Columns[3].FieldName	:='id_BirthDay';
DBGrid_MainForm_FIO.Columns[4].FieldName	:='id_Center';
DBGrid_MainForm_FIO.Columns[5].FieldName	:='id_State';
DBGrid_MainForm_FIO.Columns[6].FieldName	:='id_Specialist';
DBGrid_MainForm_FIO.Columns[7].FieldName	:='id_Manager';
DBGrid_MainForm_FIO.Columns[8].FieldName	:='id_AccountIdentifier';

//Выполнение SQL запроса
ZQuery_Main.SQL.Text :=	sSQLText;
ZQuery_Main.Active	:= True;
ZQuery_Main.Open;


// В дебагере,при выполнении следующего цикла, видно
// что текстовые поля id_lastname и тд имеют правильные значения ФИО // которые записаны в БД
for iQueryCnt:= 0 to ZQuery_Main.RecordCount - 1  do
Begin
	sSQLText:=ZQuery_Main.Fields.Fields[2].AsString;
	ZQuery_Main.Next;
End;
НО В результате
ВСЕ поля в DBGrid, за исключением поля 'id_AccountIdentifier', устанавливаются в значение “(MEMO)”
поля предназначенные для данных 'id_AccountIdentifier' показывают правильные значения
(открывал pgAdminIII и проверял)

В чем может быть моя ошибка?
Ответить с цитированием
  #2  
Старый 04.02.2015, 23:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,052
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Руки оторвать.
Переделывай таблицу:
1. id_accountidentifier д.б. INTEGER
2. Все TEXT поля д.б. VARCHAR нужного размера.

Если очень хочется оставить БД как есть, то в запросе сделай приведение типов TEXT к VARCHAR.
Ответить с цитированием
  #3  
Старый 04.02.2015, 23:42
maxfox123 maxfox123 вне форума
Прохожий
 
Регистрация: 07.07.2013
Сообщения: 20
Версия Delphi: delphi 6
Репутация: 10
По умолчанию

lmikle

К сожалению, я не могу переделывать типы и поля таблиц (прав нет) в БД.

Вы пишите
Цитата:
"Если очень хочется оставить БД как есть, то в запросе сделай приведение типов TEXT к VARCHAR."

Но как это применить к моему запросу, я до конца не понимаю.

Код:
‘SELECT * FROM fmbz_user.Table_AccountFIO';

Не могли бы Вы подсказать или показать текст запроса
с такими ограничениями?

Как я понимаю, запросом "SELECT * FROM таблица" я получаю все данные.
Как изменить на ограничение полей?
Ответить с цитированием
  #4  
Старый 05.02.2015, 07:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,052
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Запрос:
Код:
SELECT
  id serial,
  id_accountidentifier::INTEGER as id_accountidentifier,
  id_lastname::VARCHAR as  id_lastname,
  id_firstname::VARCHAR as id_firstname,
  id_middlename::VARCHAR as id_middlename,
  id_birthday::VARCHAR as id_birthday,
  id_center::VARCHAR as id_center,
  id_state::VARCHAR as id_state,
  id_specialist::VARCHAR as id_specialist,
  id_manager::VARCHAR as id_manager
FROM
   fmbz_user.table_accountfio
По крайней мере сконвертится к текстовому виду, не знаю, что за данные реально у тебя в этих полях.

ЗЫ. Тому, кто проектировал таблицу руки надо оторвать...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter