Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подчиненная новая запись / 25 сообщений из 28, страница 1 из 2
15.11.2004, 14:11
    #32782294
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Всем привет!

Есть 2 таб. связь один-ко-многим.

Есть форма для добавления записи в 1 таб.
В этой же форме есть кнопки "ОК", "ОТМЕНА" и кнопка "К1"благодаря которой открывается новое окно для добавления и редактирования записей из 2 таб.

Пользователь добавляет новую запись в 1 таб., (не сохраняет запись) нажиматет на кнопку "К1".

Вопрос:
1. Как определить id записи в 1 таб. чтоб передать её 2-й таб.?
2. Допустим передали id записи, пользователь добавил несколько записей во 2-ю таб, а на первом окне нажал отмена, т.е. главная и подчиненные записи не должны были сохранится, но во второй то он нажимал ОК. как быть?

============================
РВ9 ASA9
...
Рейтинг: 0 / 0
15.11.2004, 15:23
    #32782516
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
DIGITALPROВсем привет!

Есть 2 таб. связь один-ко-многим.

Есть форма для добавления записи в 1 таб.
В этой же форме есть кнопки "ОК", "ОТМЕНА" и кнопка "К1"благодаря которой открывается новое окно для добавления и редактирования записей из 2 таб.

Пользователь добавляет новую запись в 1 таб., (не сохраняет запись) нажиматет на кнопку "К1".

Вопрос:
1. Как определить id записи в 1 таб. чтоб передать её 2-й таб.?
2. Допустим передали id записи, пользователь добавил несколько записей во 2-ю таб, а на первом окне нажал отмена, т.е. главная и подчиненные записи не должны были сохранится, но во второй то он нажимал ОК. как быть?

============================
РВ9 ASA9

По-порядку:
1. Используй @@identity (в данном случае RTFM ASA9)
2. Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО), либо не давть возможности заполнять child при несохраненном parent
...
Рейтинг: 0 / 0
15.11.2004, 15:27
    #32782536
Gosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
делаем Update для формы 1, получить id строки, передать в форму 2
в 2 добавляем что нужно, делаем Update. после всех заполнений commit, если отмена - rollback
...
Рейтинг: 0 / 0
15.11.2004, 15:33
    #32782556
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Если связь один-ко-многим - ето таблица1-таблица2, то передавать id нужно только после того, как пользователь сохранит запись.
...
Рейтинг: 0 / 0
15.11.2004, 15:52
    #32782616
Louder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
На мой взгляд лучше в главном окне создать datastore для хранения данных талицы 2.
Окно, которое будет вызываться по кнопке, будет изменять данные не в БД, а в DataStore.
Соответственно после нажатия кнопки "Ок" сначала сохраняешь данные в главном datawindow и получаешь id. Затем проставляешь новый id в datastore и сохраняешь его.
...
Рейтинг: 0 / 0
15.11.2004, 15:57
    #32782632
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Я тоже предложу вариант. :))

В случае применения автоинкрементных полей можно использовать функцию GetIdentity в ASA для резервирования значения первичного ключа и передавать внутри программы их как угодно. То есть после вставки записи в первой форме выполнить вызов GetIdentity для получения значения ключа, потом при открытии второй формы передать это значение и использовать его там для заполнения соответствующего поля.
...
Рейтинг: 0 / 0
15.11.2004, 16:11
    #32782670
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Осталось только выбрать какой вариант использовать;))
Спасибо!
...
Рейтинг: 0 / 0
15.11.2004, 16:22
    #32782711
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
авторЛибо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Лично мне больше всех понравился вариант, предложенный Andyn, как самый надежный для ASA.
...
Рейтинг: 0 / 0
15.11.2004, 16:34
    #32782743
Сотников
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
ASCRUS
Лично мне больше всех понравился вариант, предложенный Andyn, как самый надежный для ASA.

но менее универсальный.

Лучше создать процедуру с транзакцией генерирующую уникальный id для каждой таблицы, она то и будет резервировать нужные id

Код: plaintext
1.
2.
3.
4.
create table INDEX_GENERATE (
     table_name           char( 30 )                       not null,
     id_record            numeric( 12 , 0 )                  null,
     id_recordmax         numeric( 12 , 0 )                  null
)
...
Рейтинг: 0 / 0
15.11.2004, 17:02
    #32782793
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
по моему лутше всего делать через datasource как предложил Louder,
используя этот метод меньше sequinces будет потерянно, ведь пользователь может нажать "отменна".
...
Рейтинг: 0 / 0
15.11.2004, 17:03
    #32782797
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
...
Рейтинг: 0 / 0
15.11.2004, 18:54
    #32783016
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander Kolotinets ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
А вот это уже смотря для какой СУБД и как готовить. А вот в случае, когда клиент в транзакции записал шапку документа, сделал COMMIT и успешно отвалился, как то иметь в БД пустую шапку без детальной информации - вот уж что точно не оправданно. Как Вы собираетесь при таком подходе обходить эти ситуации ?
...
Рейтинг: 0 / 0
15.11.2004, 19:09
    #32783036
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
ASCRUS Alexander Kolotinets ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
А вот это уже смотря для какой СУБД и как готовить. А вот в случае, когда клиент в транзакции записал шапку документа, сделал COMMIT и успешно отвалился, как то иметь в БД пустую шапку без детальной информации - вот уж что точно не оправданно. Как Вы собираетесь при таком подходе обходить эти ситуации ?

Из такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.
...
Рейтинг: 0 / 0
15.11.2004, 19:13
    #32783043
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander Kolotinets ASCRUS Alexander Kolotinets ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
А вот это уже смотря для какой СУБД и как готовить. А вот в случае, когда клиент в транзакции записал шапку документа, сделал COMMIT и успешно отвалился, как то иметь в БД пустую шапку без детальной информации - вот уж что точно не оправданно. Как Вы собираетесь при таком подходе обходить эти ситуации ?

Из такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.

Данный подход есть более универсальным, ИМХО, т.к. можно включить копирование документов с /(без) шапок и т.д.
...
Рейтинг: 0 / 0
15.11.2004, 20:06
    #32783082
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander Kolotinets ASCRUS Alexander Kolotinets ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
А вот это уже смотря для какой СУБД и как готовить. А вот в случае, когда клиент в транзакции записал шапку документа, сделал COMMIT и успешно отвалился, как то иметь в БД пустую шапку без детальной информации - вот уж что точно не оправданно. Как Вы собираетесь при таком подходе обходить эти ситуации ?

Из такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.

при таком подходе теряется консистентность БД, что считается плохим тоном в программировании.
...
Рейтинг: 0 / 0
16.11.2004, 06:47
    #32783330
Геннадич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander KolotinetsИз такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.
Ага, а ненужные записи потом стираются ... пятое-десятое...
Только одной транзакцией, независимо от БД.
...
Рейтинг: 0 / 0
16.11.2004, 09:47
    #32783501
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Решил сохронять главную запись

Всем большое спасибо!
...
Рейтинг: 0 / 0
16.11.2004, 09:58
    #32783527
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Как вариант - вместо отдельного окна сделать tab. на первой закладке master, на второй - detail. Кнопка Ok - одна. Сохраняет оба tabpage в одной транзакции.
Простановка id в процессе сохранения.
Т.е.
- сохранили master
- получили identity
- прописали identity в detail
- сохранили detail.
...
Рейтинг: 0 / 0
16.11.2004, 10:17
    #32783579
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Код: plaintext
на второй - detail
Делалей может бать нескольколько, да и в одной детали может быть несколько записей которые вначале отображаются как грид и не редактируются, а из грида уже окрываем еще новое для редактирования

Но все равно спасибо.
===============================
PB 9.0.1 (7236) ASA 9.0.0 (1312)
...
Рейтинг: 0 / 0
16.11.2004, 10:54
    #32783672
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
zuzu Alexander Kolotinets ASCRUS Alexander Kolotinets ASCRUS[quot автор]Либо добавление записей в parent - child организовать в одной транзакции (что не есть хорошо, ИМХО)
А по моему наоборот хорошо, особенно если parent не имеет смысла без child.

Огранизация "длинной" транзакции при таком подходе неоправдана.
А вот это уже смотря для какой СУБД и как готовить. А вот в случае, когда клиент в транзакции записал шапку документа, сделал COMMIT и успешно отвалился, как то иметь в БД пустую шапку без детальной информации - вот уж что точно не оправданно. Как Вы собираетесь при таком подходе обходить эти ситуации ?

Из такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.

при таком подходе теряется консистентность БД, что считается плохим тоном в программировании.

Статус документа влияет на консистентность? Что-то новое.
...
Рейтинг: 0 / 0
16.11.2004, 10:56
    #32783677
Alexander Kolotinets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Геннадич Alexander KolotinetsИз такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.
Ага, а ненужные записи потом стираются ... пятое-десятое...
Только одной транзакцией, независимо от БД.

Стираются или нет - зависит от конкретной задачи. Я говорил о том, что использование "длинной" транзакции в данном случае неоправдано.
...
Рейтинг: 0 / 0
16.11.2004, 12:05
    #32783898
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander Kolotinets Геннадич Alexander KolotinetsИз такой ситуации выходов несколько, один из которых - ввод и проверка признака валидности записи. В данном случае валидность определяется наличием тела документа.
Ага, а ненужные записи потом стираются ... пятое-десятое...
Только одной транзакцией, независимо от БД.

Стираются или нет - зависит от конкретной задачи. Я говорил о том, что использование "длинной" транзакции в данном случае неоправдано.
Как насчет того, чтобы пояснить свое утверждение ?
...
Рейтинг: 0 / 0
16.11.2004, 12:59
    #32784110
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Alexander KolotinetsСтатус документа влияет на консистентность? Что-то новое.
при чем тут статус ???
вот где теряется консистентность данных:
1. User ввел шапку
2. прога сделала изменения в БД без коммит
3. User открывает другое окно (другой sheet)где делает некоторые изменения и записывает их в БД, тоесть происходит COMMIT.
4. переходит в окно где он ввел шапку и закрывает окно.
теперь разве можно сказать что данные в БД консистентные ?
...
Рейтинг: 0 / 0
16.11.2004, 13:05
    #32784135
Геннадич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
zuzu Alexander KolotinetsСтатус документа влияет на консистентность? Что-то новое.
при чем тут статус ???
вот где теряется консистентность данных:
1. User ввел шапку
2. прога сделала изменения в БД без коммит
3. User открывает другое окно (другой sheet)где делает некоторые изменения и записывает их в БД, тоесть происходит COMMIT.
4. переходит в окно где он ввел шапку и закрывает окно.
теперь разве можно сказать что данные в БД консистентные ?
Тогда, если всё так тяжко: или окно для ввода типа респонс, или на каждый экземпляр окна ввода по отдельному экземпляру транзакции.
...
Рейтинг: 0 / 0
16.11.2004, 13:12
    #32784174
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная новая запись
Геннадич zuzu Alexander KolotinetsСтатус документа влияет на консистентность? Что-то новое.
при чем тут статус ???
вот где теряется консистентность данных:
1. User ввел шапку
2. прога сделала изменения в БД без коммит
3. User открывает другое окно (другой sheet)где делает некоторые изменения и записывает их в БД, тоесть происходит COMMIT.
4. переходит в окно где он ввел шапку и закрывает окно.
теперь разве можно сказать что данные в БД консистентные ?
Тогда, если всё так тяжко: или окно для ввода типа респонс, или на каждый экземпляр окна ввода по отдельному экземпляру транзакции.
почему же?, просто надо данные записывать в одной транзакции, и юзать по чаще datasource и sharedDW в случаях где данные для записи вводятся в разные response окна.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подчиненная новая запись / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]