Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ввод данных в две таблицы из одной формы [D7, IB6.x, FireBird 1.5]


Страницы:   1 2 3 4 5

grav ©   (2008-04-17 17:49:00) 

Требуется реализовать ввод данных в БД. Данные следующие. Имеется здание, в нем располагаются объекты (склад, столовая и т.д.). Нужно чтобы пользователь вводил: Здание №1, его параметры (год постройки, общая площадь, полная стоимость и т.д.). Потом на этой же форме вводил все объекты располагающиеся в этом здании: 1. Столовая, площадь, проектная мощность и т.д. 2. Спортзал .... 3...
Потом Здание №2 и его объекты. И чтобы это все на одной форме располагалось.
Своих варианта два. Первый - использовать два DBGrid, вверху для зданий, внизу для объектов. Второй - использовать TDBCtrlGrid, с которым не могу разобраться :)
Подскажите, как такое правильно реализуется?


Сергей М.   (2008-05-13 13:11:00) [21]


> есть более красивый метод?
>


Есть - пройтись в циклепо всем компонентам-наследникам класса TIBCustomDataSet


grav   (2008-05-13 13:07:00) [22]


> Сергей М. ©   (13.05.08 12:56) [72]

Спасибо, работает.
Но еще вопрос появился :) У меня три дбгрида и пять IBTable. Три из них связаны мастер-детайл. Еще два для LookUp полей.
Последовательно проверять UpdatesPending для каждой таблицы или есть более красивый метод?


Сергей М.   (2008-05-13 12:56:00) [23]


> Что не так?


см. ApplyUpdates


grav   (2008-05-13 12:48:00) [24]


> Сергей М. ©   (13.05.08 12:36) [70]

Использую IBTable. Поставил CachedUpdates:=True; Действительно, меняю что нибудь в гриде, отлавливает, что произошли изменения.
Делаю коммит. Но данные почему то не сохраняются. Что не так?


Сергей М.   (2008-05-13 12:36:00) [25]


> Как отследить, что они менялись?


Простейший способ - анализировать св-во TIBDataSet.UpdatesPending, если, конечно же, этот  компонент используется и работает в режиме кэширования изменений.


grav   (2008-05-13 12:32:00) [26]


> Anatoly Podgoretsky ©   (13.05.08 12:29) [68]

А если случайно нажал пользователь что то? Или не хочет сохранять изменения, передумал?


Anatoly Podgoretsky   (2008-05-13 12:29:00) [27]

> grav  (13.05.2008 12:21:04)  [64]

Зачем знать, просто делай Commit


Сергей М.   (2008-05-13 12:29:00) [28]


> TIBTransaction


Нет там подобных свойств.


> как узнать менялись ли данные в DBGrid


В DBGrid нет никаких данных, данные имеются в DataSet, к которому через DataSource подключен DBGrid. А уж у DataSet на этот счет есть события AfterPost, AfterDelete


grav   (2008-05-13 12:28:00) [29]


> Sergey13 ©   (13.05.08 12:24) [65]

Криво вопрос сформулировал я. Вот есть форма с гридами. Пользователь чего то поменял, автоматически запустилась транзакция. Пользователь форму закрывает, измененные данные теряются.
Можно поставить на автоматическое подтверждение транзакции, а хочется чтобы выводилось сообщение "Данные изменены. Сохранить?"
Как отследить, что они менялись?


Sergey13   (2008-05-13 12:24:00) [30]

> [64] grav   (13.05.08 12:21)
> менялись ли данные в DBGrid

Нет конечно. Их, данных, там просто нет.


grav   (2008-05-13 12:21:00) [31]


> Ты о каком компоненте речь ведешь ?

TIBTransaction

А как узнать менялись ли данные в DBGrid и надо ли делать коммит?


Сергей М.   (2008-05-13 12:06:00) [32]


> поставить глобальную переменную и отслеживать ее


Это уж как угодно - хоть глобальную хоть не глобальную.


> самой транзакции нет свойства, которое отслеживает рпошел
> коомит или нет?


Ты о каком компоненте речь ведешь ?


grav   (2008-05-13 12:03:00) [33]


> Сергей М. ©   (13.05.08 12:01) [61]

Т.е. поставить глобальную переменную и отслеживать ее. У самой транзакции нет свойства, которое отслеживает рпошел коомит или нет?


Сергей М.   (2008-05-13 12:01:00) [34]


> если коммит прошел, можно очищать поля на форме


Если коммит прошел, то он прошел.
Иначе бы возникло исключение.
Отсутствие исключения и есть факт успешного выполнения коммита.


grav   (2008-05-13 11:56:00) [35]

Сорри, за то что пишу в старой теме.
Как в программе определить был Commit или нет?
Хотел так: if not MainForm.WriteTr.Active then ....
Не срабатывает после коммита.
Я думал, если коммит прошел, то транзакция становится не активной.
PS
Нужно для очитски полей ввода. Т.е. если коммит прошел, можно очищать поля на форме.


Плохиш   (2008-04-25 11:33:00) [36]


> опять надо IBQuery.SQL.Clear;

Совершенно не надо и даже вредно. Стоит посмотреть какие ещё свойства есть у TStrings.


Сергей М.   (2008-04-25 11:16:00) [37]

with GroupBox do
 for i := 0 to ControlCount - 1 do
   if Controls[i] is TEdit then
     TEdit(Controls[i]).Text := '';


grav   (2008-04-25 11:11:00) [38]

Подскажите пожалуйста, как очистить все TEdit в пределах одного TGroupBox перед вводом новой записи?


grav   (2008-04-23 14:49:00) [39]


> Anatoly Podgoretsky ©   (23.04.08 13:19) [55]
> Неверный подход, используй параметры.

Эх. А про параметры я совсем и забыл. Мучаюсь с вставкой занчений из пустых эдитов. Спасибо!


Anatoly Podgoretsky   (2008-04-23 13:19:00) [40]

Неверный подход, используй параметры.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо