Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отображение данных в TDBGrid из базы Постгрес, или за что не любят Дельфистов 
:(
    Опции темы
maxfox111
Дата 4.2.2015, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Добрый день,

Если можно подскажите (ткните носом ) где могу ошибаться, при отображении данных в 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 и проверял)

В чем может быть моя ошибка?

PM MAIL   Вверх
Zloxa
Дата 6.2.2015, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Цитата(maxfox111 @  4.2.2015,  23:12 Найти цитируемый пост)
В чем может быть моя ошибка?

В постгре тип text - неограниченной длинны строка. Т.е. гипотетически она может занимать и 4Гб. Если сдуру попытаться затащить такую запись одним махом на клиента, можно и ян сдуру сломать. По этой причине типы данных неограниченного размера, как правило, не тащатся на клиета прям сразу полностью в результатах запросы, запросы на клинта отдают что-то вроде дескриптора, по которому клиент может затащить выборочно то, ему нужно и столько, сколько ему нужно. По этой причине Вы видите не значение а слово "MEMO". 

В общем, ответ на Ваш вопрос - вы не правльно выбрали тип данных для своих таблиц. Попробуйте varchar, он здесь определнно уместнее и работать с ним проще. smile 

Это сообщение отредактировал(а) Zloxa - 6.2.2015, 22:09


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.