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, с которым не могу разобраться :)
Подскажите, как такое правильно реализуется?


grav   (2008-04-23 12:32:00) [41]


> Anatoly Podgoretsky ©   (23.04.08 12:07) [50]

Ну а несколько записей в одну таблицу вставлять все равно одним IBQuery придется, опять надо IBQuery.SQL.Clear;


Anatoly Podgoretsky   (2008-04-23 12:11:00) [42]

> ASoft  (23.04.2008 11:53:48)  [48]

Я добивался от пользовательши полностью работы на клавиатуре, но через некоторое время вот к этому и приходило, даже Enter не нажимают.
Только надо учесть один факт - это методика оплаты, когда она в символах или в событиях, то и учить не надо, или без денег или сами понимают и осваивают.
Немного тяжелее с 10 пальцевым методом, но есть такие рабочии места, где без владения этим методом больше недели не проработать. Ведь убытки несут обе стороны и оператор и работодатель.


grav   (2008-04-23 12:09:00) [43]


> Sergey13 ©   (23.04.08 12:01) [49]
>
> А этот твой IBQuery с этой транзакцией работает?

Да с этой. У нее два Peoperties есть: AutoStopActions и DefaultActions
Второе я поставил в TARollBack, полагая, что действие по умолчанию будет роллбэк. Не получилось. Тогда я и первое поставил в saRollback. Вроде бы данные сохраняться перестали. Но перестали и селекты работать в пределах этой транзакции :(
PS
Справка по IBX почему то не работает


Anatoly Podgoretsky   (2008-04-23 12:08:00) [44]

Про commit забыл, видимо у тебя автоматический commit


Anatoly Podgoretsky   (2008-04-23 12:07:00) [45]

> Нельзя так, да? Надо в каждую таблицу своим IBQuery вставлять?

Нельзя, не экономь, сделай три компонента. У тебя при первом же Clear происходит разрушение транзакции, а результаты зависят от многих факторов. К тому же это может зависеть и от сервера.
Работать надо чисто, не давать никакого шанса для ошибки.
И чего ты съъкономил? 8 байт.


Sergey13   (2008-04-23 12:01:00) [46]

> [46] grav   (23.04.08 11:47)

А этот твой IBQuery с этой транзакцией работает?


ASoft   (2008-04-23 11:53:00) [47]


> Anatoly Podgoretsky ©   (18.04.08 16:02) [38]

ага, еще в ДОС программах, как правило, требовался переход между полями на форме Enter'ом, в фоксе досовском, по крайней мере, так было...


> grav   (21.04.08 14:31) [41]

А еще, если операторы будут действительно опытные, то они будут редко использовать мышь. Но, на своем опыте, сколько раз я не объяснял (показывал) пользователям преимущества юзания клавы, все равно, тянутся за мышью, а потом ищут ей кнопку Ок, которая и так по дефолту "Enter" :)


grav   (2008-04-23 11:49:00) [48]


> Anatoly Podgoretsky ©   (23.04.08 11:46) [45]

Нельзя так, да? Надо в каждую таблицу своим IBQuery вставлять?
IBQuery.SQL.Clear автоматически commit делает?


grav   (2008-04-23 11:47:00) [49]


> Sergey13 ©   (23.04.08 11:35) [44]
>
> Может проще код запостить?

> Экономишь?

Так чего их (IBQuery) плодить то?
Делаю так:

MainForm.WriteTr.StartTransaction;
IBQuery.SQL.Clear;
IBQuery.SQL.Add('insert into table1');
IBQuery.ExexSQL;

IBQuery.SQL.Clear;
IBQuery.SQL.Add('insert into table2');
IBQuery.ExexSQL;
....
IBQuery.SQL.Clear;
IBQuery.SQL.Add('insert into table6');
IBQuery.ExexSQL;
MainForm.WriteTr.Commit;

Хотелось бы, чтобы эта последовательная вставка была одной транзакцией.


Anatoly Podgoretsky   (2008-04-23 11:46:00) [50]

> Sergey13  (23.04.2008 11:35:44)  [44]

Может и экономит, но поплатится в рамках транзакции.


Sergey13   (2008-04-23 11:35:00) [51]

> [43] grav   (23.04.08 11:01)

Может проще код запостить?

> В разные таблицы вставляю данные одним IBQuery

Экономишь?


grav   (2008-04-23 11:01:00) [52]

Объясните пожалуйста по транзакциям.
Для ввода данных в таблицы использую IBQuery.
Перед первой вставкой в таблицу ставлю
MainForm.WriteTr.StartTransaction;
В разные таблицы вставляю данные одним IBQuery. Т.е. перед очередной вставкой делаю IBQuery.SQL.Clear; Добавляю новый запрос. И так для каждой таблицы в которую нужно занести запись.
Прерываю выполнение программы (не делаю коммит). В итоге во всех таблицах, кроме той в которую вставка проводилась последней находятся записи. Почему не сработал роллбэк, если по умолчанию в транзикции стоит TARollback?


Anatoly Podgoretsky   (2008-04-21 15:59:00) [53]

> grav  (21.04.2008 14:31:41)  [41]

У меня не хотят, но такое возможно для определенных интерфейсов. При вводе основной массы данных с цифровой клавиатуры использование клавиши Enter имеет оправдание.


grav   (2008-04-21 14:31:00) [54]


> Anatoly Podgoretsky ©   (18.04.08 16:02) [38]


> Закрытие формы в любом месте, по клавише Enter

С помощью энтер они хотят переходить из поля в поле. Это и понятно, 99% вводимой информации цифры, поэтому будет использоваться цифровая клавиатура (калькулятор). Да и все поля обязательны для ввода.


Anatoly Podgoretsky   (2008-04-18 16:41:00) [55]

> Dennis I. Komarov  (18.04.2008 16:05:39)  [39]

Что не нравится, а то помилуйте не технический термин.
Ты против транзакции, при вводе в связаные таблицы?


Dennis I. Komarov   (2008-04-18 16:05:00) [56]

> [35] Anatoly Podgoretsky ©   (18.04.08 15:48)

Помилуйте, Вы о чем? [19]


Anatoly Podgoretsky   (2008-04-18 16:02:00) [57]

> Anatoly Podgoretsky  (18.04.2008 15:47:34)  [34]

Пожалуй можно добавить еще, если ввод делается в поле с фиксированых количеством символов, то можно предусмотреть автоматический переход в следующее поле, тоже для не фиксированого ввода, при достижение максимального количества. Это тоже очень важный резерв. В ДОС программах он был как бы обязательных, а вот в Виндоус подход поменяли. Выбор из списков должен делаться с помощью ComboBox, в которых предусмотрен инкриментный поиск, как в раскрытом, так и в закрытом состоянии, наглядно ввод адресов в почте, справочником является адресная книга, этой особенностью легко пользуются даже неквалифицированые пользователи, а раньше они раскрывали справочник, сейчас уже редко это делают, несколько первых букв и далее не следующее поле. Закрытие формы в любом месте, по клавише Enter не заставляй проходить по всем полям до кнопки закрытие (это стандартное поведение для Виндоус программ, как отмена по Esc).


ANB   (2008-04-18 15:59:00) [58]


> В старые времена (ДОС/ФоксПро)

А я прикрутил к клипперу работу с мышей. Смотрелось ново и современно. Но кроме меня ей никто не пользовался :)


Anatoly Podgoretsky   (2008-04-18 15:54:00) [59]

> tesseract  (18.04.2008 15:29:26)  [26]

Вот я в форуме по ННТП как раз работаю почти исключительно с помощью клавиатуру, а там слева дерево, справа два окна, список тем и содержимое текущей темы. Ввод данных в отдельной форме, никаких затруднений не испытывают, скорость во много раз меньше, конечно ввод слепой десяти пальцевый, то что должна уметь делать квалифицированая машинистка.

Для Сергей М. как раз при вводе с бумаги оператор не должен видеть, что вводит, у него глаза направлены на документ, пальцы на клавиатуру, язык для разговоров с соседкой. а монитор лишнее устройство. Видимо тебе не посчастливилось видеть подобное, завораживает.


Anatoly Podgoretsky   (2008-04-18 15:48:00) [60]

> grav  (18.04.2008 15:38:32)  [32]

Вижу, что к транзакциям уже пришел, целостность не должна нарушаться ни на начальном этапе ни в будущем, или все или ничего.


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

Наверх

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