Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > отображение данных в TDBGrid из базы Постгрес


Автор: maxfox111 4.2.2015, 22:12
Добрый день,

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

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

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)