![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод данных в две таблицы из одной формы [D7, IB6.x, FireBird 1.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]
Вижу, что к транзакциям уже пришел, целостность не должна нарушаться ни на начальном этапе ни в будущем, или все или ничего.