![]() |
|
Модераторы: Akella |
![]()
|
|
| Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
нельзя так с генераторами индексы, индексы... Ты хочешь сказать, что после добавления, если выполнить refresh, то в наборе данных ты увидишь запись? Хм...
И не должен видеть, можно показывать в редких случаях. Ты этот код понимаешь? Для чего он?
Почитай про OLD_, NEW_ и MAS_ в докементации к фибам. И ты вообще знаешь для чего рефреш? Ты не увидишь новой записи в НД, пока не переоткроешь его. Добавлено через 1 минуту и 11 секунд
Опять же, посмотри, что за параметр можно вставить в скобки CloseOpen() |
||||||
|
|||||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Согласен. А как же область видимости транзакции? При возникновении исключения у меня выполняется Cancel в соответствующих событиях DataSet. Кроме того, открываем Хелен Борри (2-е издание) на стр. 700 и читаем, читаем... Почему? Ведь если в качестве ключа использовать другие уникальные данные, показывать их можно, так почему номер нельзя? Я же объяснил, что требуется четкая последовательность регистрационных карт. Есть определенная процедура (в смысле регламент) исключения и удаления регистрационной карты.
Если использовать генерацию в AutoUpdate Oprions или этот вариант, то после добавления/обновления записи (если установлено в Options RefreshAfterPost->true или принудительно обновлять в соответсвующем событии DataSet) запись появится в наборе данных и гриде и окажется в фокусе. Проверено. Читал. Еще раз повторю, что увижу. Это сообщение отредактировал(а) former - 9.9.2009, 21:59 -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Так я про это и говорю. Пример: Условие 1 все транзакции read commited Условие 2 триггер на проверку наличия типа
1. Старт транзакции 1 2. Старт транзакции 2 3. Транз№1 Insert into table (id) values (1); 4. Транз№2 Insert into table (id) values (1); 5. Транз№1 Commit 6. Транз№2 Commit Как думаешь сколько записей с id=1 будет в БД? И вызовется ли исключение? -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Потому что пользователи ныть начинают... типа: "А я хочу по порядку...." и т.д. и т.п. А тут уже даже программист хочет по порядку
Стормозил, ты не увидишь данных, которые были добавлены другими транзакциями. |
||||
|
|||||
| former |
|
||||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Сегодня проведу эксперимент.
Два поста подряд пытаюсь донести суть. Строгая нумерация не моя прихоть. Яркий пример бухгалтерия, где номера договоров, счетов, инвентарных номеров и прочих документов идет в строгой последовательности. Что прикажешь делать? Как им присваивать номера?
Для этого используется отдельная кнопка, которая переоткрывает DataSet, т.е. делает полный Refresh. А то получится, что пользователь добавил запись и должен заново выполнять поиск, фильтрацию и т.д., что бы продолжить с ней работать. Согласись, что нажать на одну кнопку он всегда успеет, чем искать каждый раз нужную запись. Кроме того, каждый раз ворочить большин набором данных не очень-то экономично, по отношению к ресурсам и нагрузки на сеть и сервер, особенно, если пользователей много. -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
||||
|
|||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Не надо путать искусственный ключ с номером договора. А если с нового года/пятилетки/и т.д. нужно начать нумерацию с начала? Что будешь делать? Обычно делают так: 1. ID никто, кроме программиста, не видит. 2. Под № договора выделяют отдельное поле или несколько полей. 3. Строится уникальный индекс по полям "№ договора" + Год, может еще какие поля можно добавить. 4. ID получают в начале редактирования. 5. К этому ID привязывают detail таблицы. 6. Итоговый номер договора генерируется после того, как сделаны все проверки и данные договора добавлены. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Deniz, индексы это хорошо, а вот что тогда с исключениями делать? Какого формата сообщение увидит пользователь в результате исключения?
Т.е. для номера договора должен использоваться отдельный генератор? Это сообщение отредактировал(а) former - 10.9.2009, 14:56 -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Так создай им отдельное поле № договора!!! Добавлено через 35 секунд А если прийдётся изменить значение? Ты дашь пользователю редактировать значение поля первичного ключа? Ну ну Добавлено через 1 минуту и 28 секунд Создай ещё один генератор для номера договора и/или сам на клиенте атоматом подставляй. Добавлено через 10 минут и 55 секунд ааа, Deniz уже написал Добавлено через 12 минут и 21 секунду
да!!! Можно делать и
|
||||
|
|||||
| former |
|
||||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Deniz, с транзакция ми действительно прав. Но как тогда быть с сообщениями исключений, если использовать индексы? Ведь они должны быть понятны пользователю.
Нет, пользователь ничего не редактирует. Номер карты присваивается генератором.
Ну это только при условии, что номер состоит из одних цифр. Akella, так что с Refresh-ом? Это сообщение отредактировал(а) former - 10.9.2009, 18:37 -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
||||
|
|||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Deniz, Akella, спасибо за помощь!
С исключениями я разобрался, используя репозиторий. А вот с номером договора так и не понятно, в какой момент его нужно генерировать и где? -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Но всё равно когда-нибудь понадобится изменять номер карты, корректировать, мало ли. Если будет отдельное поле - без проблем, а если ковырять первичный ключ....
а так?
При условии, что поле LCD типа Timestamp Это сообщение отредактировал(а) Akella - 10.9.2009, 19:09 |
||||||
|
|||||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
-------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
вот и славненько
Как выглядит этот номер? Как он должен генерироваться? Кто отвечает за генерацию? По своему опыту могу сказать, что в таких номерах (договор, вх. документ и т.д.) обычно присутствуют разные буквы и метасимволы, причем автоматизировать процесс генерации бывает достаточно сложно. Иногда лучше назначить одного ответственного, кто будет вбивать № договора во внесенный в БД документ, чем попытаться определить след. номер от "458-П/2009/В-32". -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 1 Всего: 17 |
Ручной ввод - самое простое, что можно придумать. Но человеческий фактор.... Я уже кое-что сам вчера придумал. Можно использовать префиксы для каждого типа договора. Создать для них отдельную таблицу. Например, для 458-П/2009/В-32: Префикс - -П/2009/В- (для каждого типа договора свой) Изменяемые части - 458 и 32. Для них генераторы. Значения получать в процессе редактирования, в зависимости от условий договора. Что-то вроде регулярных выражений. Безусловно, такой подход имеет свои недостатки. Это сообщение отредактировал(а) former - 11.9.2009, 09:06 -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
former, не все так просто, все зависит от того, какой на Вашем предприятии принят алгоритм формирования номеров.
Поскольку официально-декларирующего алгоритма нет, то каждый извращается как хочет, например (458-П/2009/В-32): 458 - порядковый номер П - тип договора 2009 - год заключения В-32 - дополнительные параметры по договору Может быть два одинаковых порядковых номера но с разными типами 458-П и 458-С.
В общем удачи. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |