Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Поиск по всему сайту: www.delphimaster.net;
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];




Вниз

Ввод данных в две таблицы из одной формы 


grav   (2008-04-17 17:49) [0]

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



grav   (2008-04-17 17:50) [1]

Использую IBX, помоему он как то не дружит с TDBCtrlGrid. Компоненты не отображаются (TDBEdit).



ANB   (2008-04-17 17:58) [2]

2 грида + мастердетал.



grav   (2008-04-17 18:03) [3]


> ANB

Да вот параметров по задниям и объектам много, строчка динная получится и соответственно не удобно будет. Еще и пользователям надо переходить из поля в поле по Enter.



ANB   (2008-04-17 18:31) [4]


> grav   (17.04.08 18:03) [3]

Тогда грид + форма редактирования + детал грид + детал форма редактирования.
Вместо отдельных форм можно использовать вкладки - получается довольно удобно.

Во всяком случае TDBCtrlGrid - не совсем подходит для этих целей. Плюс их все равно нужно будет 2. Да и неудобный он.



grav   (2008-04-18 12:07) [5]

Тогда грид + форма редактирования + детал грид + детал форма редактирования
А как это? Можно поподробнее? Что означает грид + форма редактирования ?



zorik ©   (2008-04-18 12:31) [6]

1. На главной форме грид со списком зданий. В гриде отображай основные параметры (название, и т.д.)
2. кнопки "добавить здание", "редактировать здание", "удалить здание". При нажимании на кнопку появляется модальная форма для редактирования конкретного здания. На которой DBEdit-ы для редактирования параметров здания и грид для объектов здания. И опять же кнопки "добавить объект", "редактировать объекты", "удалить объект".
3. Нажимаешь на кнопку и модальная форма редактирования объекта

З.Ы. Это для редактирования вариант. Для просмотра можно получше придумать, например с закладками



grav   (2008-04-18 12:59) [7]


> zorik ©

Если бы все так легко было. Надо реализовать ввод с клавиатуры с минимальным использованием мыши. Будут работать одновременно несколько девушек (более 5). Нужно ввести данные об около 10 тыс предприятиях, десятках тысяч зданий и сотнях тысяч объектов. И все это нужно ввести за несколько дней.



Anatoly Podgoretsky ©   (2008-04-18 13:16) [8]

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



Сергей М. ©   (2008-04-18 13:34) [9]


> как такое правильно реализуется?
>


Это зависит от того, что в последствии планируется со всем этим введенным "добром" делать.

Подозреваю, что двухтабличная структура подобного рода БД никуда не годится.



grav   (2008-04-18 14:11) [10]


> И что у вас есть такие люди?

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



grav   (2008-04-18 14:17) [11]


> Сергей М. ©   (18.04.08 13:34) [9]

>
> Это зависит от того, что в последствии планируется со всем
> этим введенным "добром" делать.
>
> Подозреваю, что двухтабличная структура подобного рода БД
> никуда не годится.

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



Anatoly Podgoretsky ©   (2008-04-18 14:21) [12]

> grav  (18.04.2008 14:11:10)  [10]

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



tesseract ©   (2008-04-18 14:21) [13]


> База моя, программа тоже моя будет.


Жадный какой, всё под себя, всё под себя.


>  Простые гриды не годятся для этого.


Сложные тоже. Это задачка из папки Demos, не сложнее. Напихай DBControlo-в, расставь связи между ними и пошли грид нафиг.



Сергей М. ©   (2008-04-18 14:24) [14]


> Простые гриды не годятся для этого


Конечно не годятся.
И тем более не понятно, почему ты на них зациклился..
Что, разве мало разных data-aware-контролов, "заточенных" под интерактивный ввод инф-ции той или иной специфики ?



Anatoly Podgoretsky ©   (2008-04-18 14:29) [15]

> grav  (18.04.2008 14:17:11)  [11]

Для выбора из справочника не нужна мышь. Вводи значение с клавиатуры.
Твоя проблема видимо в том, что ты хреновый разработчик интерфейсов пользователя.
В старые времена (ДОС/ФоксПро) мышь была предметом особой гордости, вводили с клавиатуры, в том числе и с выпадающих и других списков, с тех пор ничего не изменилось, только мышь стала доступна всем и работа со справочниками стала еще проще.



Dennis I. Komarov ©   (2008-04-18 14:32) [16]

Шаг 1 - проектирование БД
.....
Шаг (околопоследний) - проектирование данного интерфейса



grav   (2008-04-18 14:56) [17]


> Что, разве мало разных data-aware-контролов

Не нашел ни одного подходящего



tesseract ©   (2008-04-18 15:00) [18]


> Не нашел ни одного подходящего


А тебе что аналог швейцарского ножа нужен ? Лень edit-ы покидать на форму ? .



grav   (2008-04-18 15:04) [19]

>Anatoly Podgoretsky ©

> Твоя проблема видимо в том, что ты хреновый разработчик
> интерфейсов пользователя.

Кто бы сомневался. Я даже и не программист. Так, любитель. Время от времени пишу программки н заказ, которые почему-то потом работают годами.
То что я интерфейсы писать не могу это еще пол беды. Я еще не могу правильно мысль свою сформулировать.
Но за программы меня хвалят, в т.ч. и за удобство интерфейса. Потому и не бросаю писать программки. Хобби :)
Спасибо, что есть такой форум, где можно получить ответы на свои вопросы. А главное, сформулировать и уточнить сами вопросы, чего часто бывает достаточно для решения своих проблем.



grav   (2008-04-18 15:08) [20]


> tesseract ©   (18.04.08 15:00) [18]

>
> А тебе что аналог швейцарского ножа нужен ? Лень edit-ы
> покидать на форму ? .

Как вы себе представляете на одной форме разместить несколько записей по зданиям и чтобы к каждому зданию было привязано по нескольку объектов?



Anatoly Podgoretsky ©   (2008-04-18 15:11) [21]

> grav  (18.04.2008 14:56:17)  [17]

Не ужели даже TDBEdit не работает? Ну тогда напиши свои



tesseract ©   (2008-04-18 15:15) [22]


>  и чтобы к каждому зданию было привязано по нескольку объектов?


Каждый день такое в 1с считай делаю. Слева здания в Grid или List  Справа тоже самое, но со списком объектов. Всё это связано master-detail.

В чём проблема ?



Сергей М. ©   (2008-04-18 15:23) [23]


> Как вы себе представляете на одной форме разместить несколько
> записей


Следует четко представлять себе разницу между функциональными назначениями формы просмотра/редактирования списка и формы просмотра/редактирования записи.



grav   (2008-04-18 15:24) [24]


> tesseract ©   (18.04.08 15:15) [22]

1. Проблема в том, что надо ввод реализовать, а не отображение.
2. В 1с по моему не реально работать без мышки



Сергей М. ©   (2008-04-18 15:26) [25]


> ввод реализовать, а не отображение


Ты не заболел ?)
Как можно вводить не видя что вводишь ?
Это же не ввод паролей)


> В 1с по моему не реально работать без мышки


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



tesseract ©   (2008-04-18 15:29) [26]


> В 1с по моему не реально работать без мышки


Да нет у нас склад, как раз больше клаву при наборе документа из 700 строк пользует.


> 1. Проблема в том, что надо ввод реализовать, а не отображение.


Это то по барабану.



Anatoly Podgoretsky ©   (2008-04-18 15:30) [27]


> Но за программы меня хвалят, в т.ч. и за удобство интерфейса

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



Anatoly Podgoretsky ©   (2008-04-18 15:31) [28]

> tesseract  (18.04.2008 15:15:22)  [22]

Можно и так и переход по ТАБ между мастер детайл, вариантов тьма.



grav   (2008-04-18 15:32) [29]

Пока не придумал лучшего, чем разместить на форме два грида. Один для зданий, второй для объектов зданий.
Видимо придется сделать две формы для ввода параметров зданий и объектов. А вызывать эти формы по нажатию кнопки Ввести здание и Ввести объект. Плюс вызов этих форм комбинацией клавиш.
Сами гриды нужны лишь для того, чтобы оператор видел чего ввел.
Есть вопрос. Данные введенные в таблицы в пределах транзакции не подтвержденные коммитом будут отображаться в DBGrid или для этого лучше обычный Grid использовать?



tesseract ©   (2008-04-18 15:34) [30]


>  Данные введенные в таблицы в пределах транзакции не подтвержденные
> коммитом будут отображаться в DBGrid


Вот в grid они как раз и будут. А вот в базе нет. Только один человек будет их видеть.



grav   (2008-04-18 15:36) [31]


> Anatoly Podgoretsky ©   (18.04.08 15:30) [27]

Общение помогает самому понять чего надо и как это сделать.
Поэтому огромное спасибо всем кто тратит на меня свое время.



grav   (2008-04-18 15:38) [32]


> Вот в grid они как раз и будут. А вот в базе нет. Только
> один человек будет их видеть.

Это и требуется. Чтобы в случае чего пропала вся запись по предприятию.



Anatoly Podgoretsky ©   (2008-04-18 15:47) [33]

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

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



Anatoly Podgoretsky ©   (2008-04-18 15:47) [34]

> grav  (18.04.2008 15:36:31)  [31]

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



Anatoly Podgoretsky ©   (2008-04-18 15:48) [35]

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

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



Anatoly Podgoretsky ©   (2008-04-18 15:54) [36]

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

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

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



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


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

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



Anatoly Podgoretsky ©   (2008-04-18 16:02) [38]

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

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



Dennis I. Komarov ©   (2008-04-18 16:05) [39]

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

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



Anatoly Podgoretsky ©   (2008-04-18 16:41) [40]

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

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



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


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


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

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



Anatoly Podgoretsky ©   (2008-04-21 15:59) [42]

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

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



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

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



Sergey13 ©   (2008-04-23 11:35) [44]

> [43] grav   (23.04.08 11:01)

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

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

Экономишь?



Anatoly Podgoretsky ©   (2008-04-23 11:46) [45]

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

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



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


> 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;

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



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


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

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



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


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

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


> grav   (21.04.08 14:31) [41]

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



Sergey13 ©   (2008-04-23 12:01) [49]

> [46] grav   (23.04.08 11:47)

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



Anatoly Podgoretsky ©   (2008-04-23 12:07) [50]

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

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



Anatoly Podgoretsky ©   (2008-04-23 12:08) [51]

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



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


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

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



Anatoly Podgoretsky ©   (2008-04-23 12:11) [53]

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

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



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


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

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



Anatoly Podgoretsky ©   (2008-04-23 13:19) [55]

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



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


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

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



grav   (2008-04-25 11:11) [57]

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



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

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



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


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

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



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

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



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


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


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



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


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

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



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


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


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


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


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



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


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

TIBTransaction

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



Sergey13 ©   (2008-05-13 12:24) [65]

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

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



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


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

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



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


> TIBTransaction


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


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


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



Anatoly Podgoretsky ©   (2008-05-13 12:29) [68]

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

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



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


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

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



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


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


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



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


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

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



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


> Что не так?


см. ApplyUpdates



grav   (2008-05-13 13:07) [73]


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

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



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


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


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



Anatoly Podgoretsky ©   (2008-05-13 13:21) [75]

> grav  (13.05.2008 12:32:09)  [69]

Если не хочет сохранять, то Rollback
Всего то две операции Да и Нет



grav   (2008-05-13 14:21) [76]

Блин. А LookUp поля редактировать нельяз что ли?



Sergey13 ©   (2008-05-13 14:36) [77]

Ветка потихоньку превращается в блог. 8-)



grav   (2008-05-13 14:49) [78]


> Sergey13 ©   (13.05.08 14:36) [77]

Ну у мну своего нет блога, пусть будет :)
Там можно или нельзщя редактировать LookUp поля?



Sergey13 ©   (2008-05-13 15:03) [79]

> [78] grav   (13.05.08 14:49)
> пусть будет

Я не хочу быть святее Папы Римского (модератора), но вообще-то это запрещено правилами форума: одна ветка - один вопрос.

А что значит "LookUp поля редактировать нельяз"? В справочнике, на который ссылается поле, можно что угодно редактировать. В самой таблице (в которой это поле) можно менять ссылку на справочник и/или удалять ее. Что хочется то?



grav   (2008-05-13 15:16) [80]


> Я не хочу быть святее Папы Римского (модератора), но вообще-
> то это запрещено правилами форума: одна ветка - один вопрос.
>

Плодить много мелких веток тоже не есть хорошо.
Хочется менять значение этого поля, т.е. значение в другой таблице. Но если нельзя (а у меня не получилось), то нельзя. Добавлю еще один грид.



Sergey13 ©   (2008-05-13 15:22) [81]

> [80] grav   (13.05.08 15:16)
> Хочется менять значение этого поля, т.е. значение в другой таблице.
"Значение этого поля" - ссылка на значение в другой таблице.



grav   (2008-05-13 15:35) [82]


> "Значение этого поля" - ссылка на значение в другой таблице.

ясно. Спасибо.

А как сделать, чтобы ссылка была не на значение, а на целый датасет?

У самого случайным образом так получилось при использовании связки ClientDataSet+DataSource+DBGrid. Щелкаешь на ячейке мышкой и открывается отдельный грид с данными.



Sergey13 ©   (2008-05-13 15:38) [83]

> [82] grav   (13.05.08 15:35)
> А как сделать, чтобы ссылка была не на значение, а на целый
> датасет?

Создать поле с типом датасет.



grav   (2008-05-13 15:58) [84]


> Sergey13 ©   (13.05.08 15:38) [83]

А поподробнее? Вот создал я в IBTable новое поле. Выбрал его тип DataSet. А где ему назначить его IBTable? Оно ведь не вычисляемое и не лукап.



Sergey13 ©   (2008-05-13 16:01) [85]

> [84] grav   (13.05.08 15:58)

ИБ и его клоны не поддерживают вложенных таблиц, насколько я знаю. Из тех кто поддерживает я знаю только Оракл. Там (в реальной БД) поле может содержать таблицу. Поэтому в простом датасете смотрщим на реальную БД интербейса сделать этого вроде как не получится. А вот в клиентском датасете - можно.



grav   (2008-05-13 16:12) [86]

Как то не красиво у меня получилось.
Есть грид с кодом и наименованием организации. Много организаций - -много строк. Справа еще грид с финансовыми данными по каждой организации в отдельности. И в этом гриде только одна строка. Т.е. выбираешь в левом гриде предприятие, справа отображается одна строка с данными.
Снизу слева еще один грид, в нем перечислены здания организации, справа грид с одной строкой с данными по каждому зданию.
Еще ниже еще один грид со списком объектов в данном здании и справа данные по этому объекту из одной строки. :(((



Sergey13 ©   (2008-05-13 16:21) [87]

> [86] grav   (13.05.08 16:12)
> Как то не красиво у меня получилось.

А по мне так красотища!

Лепота! (с) И.Грозный

Еще бы красочек добавить поядовитее.
8-))))))))



grav   (2008-05-13 17:26) [88]

Не нравится мне, что для одной строки приходится целый грид отводить



Slym ©   (2008-05-14 04:29) [89]

MemoryDataset?
На клиента вбиваешь все в мемори датасеты, а потом на кнопачку "Сохранить" все датасеты в одной транзакции сохраняеш в "реальную" базу...
MemoryDataset можно заменить на какуюнибудь локальную СУБД, с возможностью при "крахе" восстановить последнее несохнаненное состояние



Sergey13 ©   (2008-05-14 08:44) [90]

> [88] grav   (13.05.08 17:26)
> Не нравится мне, что для одной строки приходится целый грид отводить

Ну и не отводи. ДБГрид не единственный компонент для отображения данных из БД. Тем более если отображается ВСЕГДА ТОЛЬКО ОДНА ЗАПИСЬ.



grav   (2008-05-14 10:32) [91]


> Sergey13 ©   (14.05.08 08:44) [90]

Разместил рядом с гридом групбокс и леплю DBEdit"ы и DBMemo. Так вот при изменении значения в DBMemo свойство UpdatesPending не срабатывает, почему?



grav   (2008-05-14 12:50) [92]

Возможно ли в IBTable упорядочение записей по возрастанию или убыванию?
Есть поле ID, по нему создан индекс. Что то в гриде здания отображаются, не в том порядке как в индексе



Sergey13 ©   (2008-05-14 13:44) [93]

> [92] grav   (14.05.08 12:50)
> Возможно ли в IBTable

Пора уже выкинуть этот IBTable и пользоваться нормальным IBDataSet-ом.



grav   (2008-05-14 14:01) [94]

Я IBTable первый раз использую, пользовался IBQuery и IBSQL. Сейчас потребовалось мастер-детайл и возможность редактирования. Вот и связался с IBTable.
IBDataSet вообще не использовал не разу. Надо посмотреть.
Так что, нельзя упорядочить по возрастанию?




Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Поиск по всему сайту: www.delphimaster.net;
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.96 MB
Время: 0.09 c
15-1208980904     MM_ASH                2008-04-24 00:01  2008.06.08  
Как сделать свой проект


2-1210090413      TStas                 2008-05-06 20:13  2008.06.08  
Как написать опережающее объявления класса?


15-1209048184     i                     2008-04-24 18:43  2008.06.08  
проблемы с win2003 r2..


2-1210770613      OLGA                  2008-05-14 17:10  2008.06.08  
Как отсоеденить сотую часть!!!!!!!!


2-1211034008      mahab                 2008-05-17 18:20  2008.06.08  
интефейс IADsMembers