Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.71 MB
Время: 0.047 c
2-1209976099
Aleksei
2008-05-05 12:28
2008.06.08
Проверка нового файла на ФТП


11-1189516515
vampir_infernal
2007-09-11 17:15
2008.06.08
MHToolTip и GRush


2-1210859584
Василий Василич Пупкинд
2008-05-15 17:53
2008.06.08
Ищется элегантное решение.


15-1209021341
inew
2008-04-24 11:15
2008.06.08
Язык ввода по умолчанию


15-1209158924
Petr V. Abramov
2008-04-26 01:28
2008.06.08
афигистика





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский