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


Автор: holodnaya 2.11.2009, 00:22
Здравствуйте, опытные программисты!
У меня возникла сложность в следующем: при разработке приложения, в cxGrid отображаются нужные мне данные из таблицы, а при запуске приложения этих данных в таблице нет, остаются только заголовки таблицы.
Может быть, нужно что-то дополнительно прописывать в коде (например, при открытии формы), чтобы эти данные отображались в таблице? Или у меня происходит разрыв соединения с базой? В чем причина такого явления? Что мне сделать, чтобы приложение работало корректно?

Автор: Данкинг 2.11.2009, 00:24
Цитата(holodnaya @  2.11.2009,  00:22 Найти цитируемый пост)
Может быть, нужно что-то дополнительно прописывать в коде (например, при открытии формы), чтобы эти данные отображались в таблице?

Может быть. smile 

Цитата(holodnaya @  2.11.2009,  00:22 Найти цитируемый пост)
Или у меня происходит разрыв соединения с базой?

Или так. smile 

Цитата(holodnaya @  2.11.2009,  00:22 Найти цитируемый пост)
В чем причина такого явления? 

Вряд ли кто-нибудь ответит до тех пор, пока не увидит код программы.

Автор: holodnaya 2.11.2009, 02:06
Отличный ответ smile
А если в коде ничего нет? и все устанавливается в свойствах объектов IBDatabase1, IBTransaction1, IBTable1, DataSource1 в ДатаМодуле.  В cxGrid ссылка на DataSource1. 
А можете ли сказать, когда лучше прописывать все свойства в коде, а когда просто у объекта указывать?

 

Автор: Данкинг 2.11.2009, 02:34
Видимо, при запуске программы происходит некая выборка данных, которая ничего не возвращает.

Цитата(holodnaya @  2.11.2009,  02:06 Найти цитируемый пост)
А можете ли сказать, когда лучше прописывать все свойства в коде, а когда просто у объекта указывать?

Какие свойства? К примеру, IP БД, к которой подключается программа, лучше указывать в INI-файле. Для большей мобильности. smile

Добавлено через 45 секунд
И вообще, что это за программный продукт такой, если
Цитата(holodnaya @  2.11.2009,  02:06 Найти цитируемый пост)
А если в коде ничего нет?

? smile 

Автор: Beltar 2.11.2009, 08:03
Цитата

А можете ли сказать, когда лучше прописывать все свойства в коде, а когда просто у объекта указывать?


В идеале у контролов для БД все настройки соединения д/б перед запуском чистые и инициализироваться только по команде.
А таблица у тебя пустая, возможно, потому что Interbase-компоненты глючат, есть у них такая плохая привычка, как незнание количества данных в наборе до тех пор, пока он не будет полностью прокручен. Попробуй после открытия сделать таблице.
IBTable1.Last;
IBTable1.First;
Может есть более простой способ (Last в принципе ресурсоемкая операция м/б, хотя я гонял так наборы в 200000+ записей и ничего), узнаешь - скажешь.

Автор: Akella 2.11.2009, 08:58
holodnaya, сделай тестовый проект и выложи.

Автор: holodnaya 2.11.2009, 10:59
Я разобралась. Спасибо
Сначала данные не отображались. потому что у IBDatabase свойство LoginPrompt = True и соответсвенно соединение каждый раз отвалисвалось. И у  компонентов IBDatabase1, IBTransaction1, IBTable1 было установлено значение свойства Active = True, иногда менялись на false.
Затем, я решила, что проблема в IdleTimer, и установила туда значение 90 вместо 0 (но именно поэтому в конечном варианте данные и не отображались). Сейчас  LoginPrompt = False и у компонентов IBDatabase1, IBTransaction1, IBTable1 свойство Active = True.

Я правильно понимаю, что параметры соединения с базой лучше всего указывать в коде, а не в свойствах объекта и Connected = True у IBDatabase устанавливать в момент открытия главной формы (или создания)

Автор: Данкинг 2.11.2009, 11:36
Цитата(holodnaya @  2.11.2009,  10:59 Найти цитируемый пост)
Я правильно понимаю, что параметры соединения с базой лучше всего указывать в коде, а не в свойствах объекта и Connected = True у IBDatabase устанавливать в момент открытия главной формы (или создания)

Да, всё активировать (соединения, таблицы, запросы) надо в коде.

Автор: Beltar 2.11.2009, 11:47
Цитата

Я правильно понимаю, что параметры соединения с базой лучше всего указывать в коде, а не в свойствах объекта и Connected = True у IBDatabase устанавливать в момент открытия главной формы (или создания)


Я делаю так, размещаю необходимые для соединения компоненты в дата-модуле и ставлю его первым при создании форм, там же в дата-модуле расположены всякие ресурсы вроде имейдж-листов. Там определяется функция коннект, которая после считывания параметров из инишек пытается установить соединение. Если это удалось, то открываются нужные наборы данных, если нет, софтина все равно запускается, так чтобы можно было откорректировать настройки не залезая в инишки, ну и там ес-но форма (можно сделать одну для всех проектов на одном типе БД) для логина.
Помимо прочего стоит определить еще одну процедурку в главной форме, которая будет чего-то на этой форме менять после установки соединения. Вызывается в 2-х местах в FormCreate, если есть соединение и после успешного коннекта руками (возможнось на лету изменить подключения вообще крайне желательна т. к. сильно упрощает настройку прав пользователей).
Это для случая, когда коннект автоматом, а если юзер каждый раз должен логин и пароль вводить, то можно в том же дата-модуле просто создавать и показывать форму для логина. Только создавай ее
fmLogin:=TfmLogin(Application), а не через Application.CreateForm иначе она главной формой станет.

Вообще чем больше ошибок предусмотришь, тем лучше, а для БД типовые ошибки, это отсутствие или потеря соединения.

Автор: holodnaya 2.11.2009, 19:57
Цитата(Beltar @  2.11.2009,  11:47 Найти цитируемый пост)
Я делаю так, размещаю необходимые для соединения компоненты в дата-модуле и ставлю его первым при создании форм,


а разве не главная форма должна создаваться первой? и соответсвенно стоять первой при создании форм?

Автор: Beltar 2.11.2009, 20:16
Главная это та, которая первая, через Application.CreateForm полностью (отработало событие onCreate) создалась smile Но дата-модули не считаются. Первыми ыообще секции Initialization отрабатывают.

Автор: holodnaya 4.11.2009, 15:46
А можете ещё подсказать, что за параметр такой Character Set у компонента IBDatabase и на что он влияет. Это нормально, что у меня вообще он не определён (None)? 

Автор: Beltar 4.11.2009, 15:48
Кодировка, поставь Windows CP 1251.

Автор: Akella 4.11.2009, 16:44
Цитата(holodnaya @  4.11.2009,  15:46 Найти цитируемый пост)
А можете ещё подсказать, что за параметр такой Character Set у компонента IBDatabase и на что он влияет. 

 smile а при чём здесь cxGrid?

Добавлено через 40 секунд
Цитата(Beltar @  4.11.2009,  15:48 Найти цитируемый пост)
Кодировка, поставь Windows CP 1251. 

Откуда такие утверждения, да ещё и неправильные? Перед тем как советовать, сам хоть почитай руководства.

Добавлено через 1 минуту и 25 секунд
holodnaya, а если ты работаешь с firebird, то хотябы почитай немного об этой СУБД.

Автор: Данкинг 4.11.2009, 17:18
Цитата(Akella @  4.11.2009,  16:44 Найти цитируемый пост)
Откуда такие утверждения, да ещё и неправильные?

Почему неправильные? Не знаю, как в IBDatabase, но в IBExpert при создании БД надо именно Win1251 указывать.

Добавлено через 1 минуту и 37 секунд
Цитата(holodnaya @  4.11.2009,  15:46 Найти цитируемый пост)
А можете ещё подсказать, что за параметр такой Character Set у компонента IBDatabase и на что он влияет. 

А вообще, где у IBDatabase такой параметр?  smile 

Автор: Beltar 4.11.2009, 17:38
Цитата

Откуда такие утверждения, да ещё и неправильные?


Из воспоминаний (с IB я правда всего один раз сталкивался). Впрочем воспоминания у меня действительно неверные. smile 

Автор: holodnaya 4.11.2009, 19:20
Вернёмся снова к cxGrid... использовал ли кто-нибудь новигатор? Почему у меня кроме кнопок, позволяющих перейти на первую, последнюю, предыдущую и следующую никакие больше не доступны (добавить, удалить, обновить)? Скажите, пожалуйста, что мне нужно сделать.

Цитата(Akella @  4.11.2009,  16:44 Найти цитируемый пост)
holodnaya, а если ты работаешь с firebird, то хотябы почитай немного об этой СУБД. 


А вы думаете, я совсем ленивая и ничего не читаю, надеясь на ответы на форуме? Читала, но, видимо, недостаточно. Почитаю ещё.

Автор: bems 4.11.2009, 21:55

M
bems
Один топик — один вопрос!

Пожалуйста, ознакомьтесь с правилами форума.




Тема закрыта. Создайте по одной теме для каждого интересующего вас вопроса и не забывайте указывать язык программирования в заголовке.

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