| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > отображение данных в cxGrid |
| Автор: holodnaya 2.11.2009, 00:22 |
| Здравствуйте, опытные программисты! У меня возникла сложность в следующем: при разработке приложения, в cxGrid отображаются нужные мне данные из таблицы, а при запуске приложения этих данных в таблице нет, остаются только заголовки таблицы. Может быть, нужно что-то дополнительно прописывать в коде (например, при открытии формы), чтобы эти данные отображались в таблице? Или у меня происходит разрыв соединения с базой? В чем причина такого явления? Что мне сделать, чтобы приложение работало корректно? |
| Автор: holodnaya 2.11.2009, 02:06 |
| Отличный ответ А если в коде ничего нет? и все устанавливается в свойствах объектов IBDatabase1, IBTransaction1, IBTable1, DataSource1 в ДатаМодуле. В cxGrid ссылка на DataSource1. А можете ли сказать, когда лучше прописывать все свойства в коде, а когда просто у объекта указывать? |
| Автор: Данкинг 2.11.2009, 02:34 | ||
Видимо, при запуске программы происходит некая выборка данных, которая ничего не возвращает.
Какие свойства? К примеру, IP БД, к которой подключается программа, лучше указывать в INI-файле. Для большей мобильности. Добавлено через 45 секунд И вообще, что это за программный продукт такой, если ? |
| Автор: 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 | ||
Да, всё активировать (соединения, таблицы, запросы) надо в коде. |
| Автор: Beltar 2.11.2009, 11:47 | ||
Я делаю так, размещаю необходимые для соединения компоненты в дата-модуле и ставлю его первым при создании форм, там же в дата-модуле расположены всякие ресурсы вроде имейдж-листов. Там определяется функция коннект, которая после считывания параметров из инишек пытается установить соединение. Если это удалось, то открываются нужные наборы данных, если нет, софтина все равно запускается, так чтобы можно было откорректировать настройки не залезая в инишки, ну и там ес-но форма (можно сделать одну для всех проектов на одном типе БД) для логина. Помимо прочего стоит определить еще одну процедурку в главной форме, которая будет чего-то на этой форме менять после установки соединения. Вызывается в 2-х местах в FormCreate, если есть соединение и после успешного коннекта руками (возможнось на лету изменить подключения вообще крайне желательна т. к. сильно упрощает настройку прав пользователей). Это для случая, когда коннект автоматом, а если юзер каждый раз должен логин и пароль вводить, то можно в том же дата-модуле просто создавать и показывать форму для логина. Только создавай ее fmLogin:=TfmLogin(Application), а не через Application.CreateForm иначе она главной формой станет. Вообще чем больше ошибок предусмотришь, тем лучше, а для БД типовые ошибки, это отсутствие или потеря соединения. |
| Автор: holodnaya 2.11.2009, 19:57 | ||
а разве не главная форма должна создаваться первой? и соответсвенно стоять первой при создании форм? |
| Автор: Beltar 2.11.2009, 20:16 |
| Главная это та, которая первая, через Application.CreateForm полностью (отработало событие onCreate) создалась |
| Автор: 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 | ||
Добавлено через 40 секунд Откуда такие утверждения, да ещё и неправильные? Перед тем как советовать, сам хоть почитай руководства. Добавлено через 1 минуту и 25 секунд holodnaya, а если ты работаешь с firebird, то хотябы почитай немного об этой СУБД. |
| Автор: Данкинг 4.11.2009, 17:18 | ||
Почему неправильные? Не знаю, как в IBDatabase, но в IBExpert при создании БД надо именно Win1251 указывать. Добавлено через 1 минуту и 37 секунд
А вообще, где у IBDatabase такой параметр? |
| Автор: Beltar 4.11.2009, 17:38 | ||
Из воспоминаний (с IB я правда всего один раз сталкивался). Впрочем воспоминания у меня действительно неверные. |
| Автор: holodnaya 4.11.2009, 19:20 | ||
Вернёмся снова к cxGrid... использовал ли кто-нибудь новигатор? Почему у меня кроме кнопок, позволяющих перейти на первую, последнюю, предыдущую и следующую никакие больше не доступны (добавить, удалить, обновить)? Скажите, пожалуйста, что мне нужно сделать.
А вы думаете, я совсем ленивая и ничего не читаю, надеясь на ответы на форуме? Читала, но, видимо, недостаточно. Почитаю ещё. |
| Автор: bems 4.11.2009, 21:55 | ||
|