Вопрос № 101137: Всем привет!
Пишу БД. Firebird. На форме следующие компоненты:
IBDatabase: TIBDatabase;
IBTransaction : TIBTransaction;
IBDataSet: TIBDataSet;
DataSource: TDataSource;
И еще два TDBGrid:
DBGrid1: TDBGrid;
DBGrid2: TD...
Вопрос № 101.137
Всем привет!
Пишу БД. Firebird. На форме следующие компоненты:
IBDatabase: TIBDatabase;
IBTransaction : TIBTransaction;
IBDataSet: TIBDataSet;
DataSource: TDataSource;
И еще два TDBGrid:
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
В сетке DBGrid1 должны отображаться все данные БД, а в DBGrid2 результат некого запроса, который прописывается в IBDataSet.SelectSQL. Проблема заключается в том, при выполнении указанного выше запроса его результат виден в двух сетках. У меня есть вариант добавить второй комплект компонентов TIBTransaction, TIBDataSet, TDataSource и через них связать БД со второй сеткой. Но может есть более привлекательный вариант? Например, у IBDataSet есть свойства DisableControls и EnableControls. Думаю, объяснять его предназначение
здесь не имеет смысла, все и так все понимают. Вопрос: есть ли что-то подобное у DBGrid'a? Или придется применять для решения моей задачи описанный мной выше способ?
Отвечает: Delph
Здравствуйте, Бурда Александр Михайлович!
Вам нужно добавить ещё IBDataSet и DataSource, как и сказал уже sir henry. В рамках одной базы данных часто приходится работать одновременно с несколькими наборами данных (выборки из разных таблиц, представлений, общение с функциями/процедурами...) На каждый отображаемый набор данных делается связка IBDataSet ==> DataSource == > DBGrid, но все IBDataSet'ы ссылаются на один (как правило) IBDatabase. Два набора IBDatabase и IBTransaction нужны в том случае, если Вам нужно одновременно работать с ДВУМЯ РАЗНЫМИ
базами данных, например при перекачке данных из одной базы в другую.
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: 8-ой класс)
Ответ отправлен: 07.09.2007, 08:19 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Виктор Пырлик
Здравствуйте, Бурда Александр Михайлович!
Если запрос статический (не требует редактирования – только просмотр), то проще и лучще использовать компонент IBQuery. Если требуется редактировать, можно, и как правило используют компонент IBTable.
В вашем случае, можно организовать так:
Одни на всю базу.
--------------------------------------
IBDatabase: TIBDatabase;
IBTransaction : TIBTransaction;
Компоненты доступа и отображения данных
1. вариант ---------------------------------
IBTable + DataSource1 -> DBGrid1
IBQuery + DataSource2 -> DBGrid2
2. вариант ---------------------------------
IBQuery1 + DataSource1 -> DBGrid1
IBQuery2 + DataSource2 -> DBGrid2
Disable/Enable Controls в данном контексте совершено не применим – это не управление набором данных а их прорисовки.
Можно всё построить на SQL запросах (и редактирование тоже), но схема от этого не изменится – это классический (и практический) способ организации работы с данными в Delphi/Builder да и других продуктах. Для всех датасетов (IBTable, IBQuery) указываем одну и ту же транзакцию – IBTransaction и базу данных – IBDatabase.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 07.09.2007, 09:04 Оценка за ответ: 5 Комментарий оценки: Благодарю за консультацию.