|
Как сообщить форме НОВОГО объекта о его записи. | ☑ | ||
---|---|---|---|---|
0
rdaler
16.02.25
✎
02:05
|
Пользую внешний источник данных из Access. Читает он из него замечательно, а нужно еще и писать. Проблема вроде бы решается костылем ADODB.Command.Execute(СвойЗапрос), но...
Как теперь сообщить форме о том, что объект в ней уже записан? Если юзер вместо "ЗаписатьИЗакрыть" жмякнет "Записать", то делать это он может бесконечно, плодя при этом дубли записей. Объект.Ссылка в форме ведь так и осталась пустой. И, что важно, ReadOnly. Борзо закрыть форму и снова ее открыть уже по ссылке как-то не по-джедайски. Может еще какие способы есть? |
|||
1
VS-1976
16.02.25
✎
03:30
|
Посмотри свойство формы модифицируемость
|
|||
2
lEvGl
гуру
16.02.25
✎
07:19
|
(0) запользуйте При или даже После записи, а не кнопку, ссылка не будет пустой. В акцессе замещение записей, а не добавление каждый раз новых
|
|||
3
Bigbro
16.02.25
✎
07:27
|
уд
|
|||
4
rdaler
16.02.25
✎
11:20
|
(2) В "При"я как раз отменяю штатный механизм записи и подставляю свой. Следовательно "После" не возникает. Сама ссылка у меня есть. Мне нужен способ ее в форму подставить, чтобы она перестала считать себя формой НОВОЙ записи и стала формой редактирования СУЩЕСТВУЮЩЕЙ.
|
|||
5
Ёпрст
16.02.25
✎
11:38
|
(4) Прочитать()
|
|||
6
rdaler
16.02.25
✎
11:50
|
(5) Объект.Ссылка.Пустая() = Истина.
Форме нечего читать - она считает СЕБЯ первоисточником. В том и суть топика - как ее в этом разубедить? |
|||
7
Ёпрст
16.02.25
✎
11:52
|
(6) переокрыть форму вестимо
|
|||
8
Ёпрст
16.02.25
✎
11:59
|
Ну или играться со всякими ОтобразитьИзменениеДанных
|
|||
9
ЕRPe
16.02.25
✎
12:25
|
Ну как бы в описании задачи уже напрашивается некий id, наличие которого должно контролироваться при последующей записи во избежании дублей. Какая еще ссылка если пишем черти пойми куда.
|
|||
10
lEvGl
гуру
16.02.25
✎
13:23
|
(9) мне вот совсем ничего не понятно
форма, которая себя чем то считает, какая то на что то ссылка, записи в акцесе что ему надо вобще? зы. и почему recordset вдруг костылем стал |
|||
11
rdaler
16.02.25
✎
13:25
|
(9) Разумеется некий id есть, но он генерируется внешней базой и при записи его значение не заполняется. Следовательно, платформа никак сама его не контролирует - нужен очередной костыль. Проще уж действительно просто переоткрыть форму.
Ссылка: ВнешнийИсточникДанныхТаблицаСсылка.<Имя внешнего источника>.<Имя таблицы внешнего источника данных> (ExternalDataSourceTableRef.<External source name>.<External data source table name>) Свойства: <Имя поля> (<Имя поля>) Методы: ... Описание: Ссылка на объект таблицы внешнего источника данных. Только для таблиц с типом данных ОбъектныеДанные. |
|||
12
Garykom
гуру
16.02.25
✎
13:32
|
УстановитьСсылкуНового ?
|
|||
13
Garykom
гуру
16.02.25
✎
13:34
|
Я к тому что не порти типовой механизм, пусть работает штатно и создает элементы справочника
Но ссылку устанавливай из внешней базы И при записи заодно обновляй эту свою внешнюю Создай справочник без кода и без наименования, только ссылка и вперед |
|||
14
rdaler
16.02.25
✎
13:51
|
(12) Да, пробовал, но к сожалению для формы это ничего не меняет.
|
|||
15
rdaler
16.02.25
✎
13:53
|
(13) Да - вариант, но тот еще костыль. Опять же проще просто переоткрыть. А очень хочется изящный вариант, если, конечно, таковой существует.
|
|||
16
RomanYS
16.02.25
✎
15:33
|
(15) "хочется изящный вариант" - стоит для начала сформулировать задачу.
Что за форма (произвольная)? (4) Откуда у неё событие ПриЗаписи? В зависимости от целей нужно или блокировать/закрывать форму, или пытаться получить внешний ИД после записи, или просто перед записью проверять на дубли. Список неполный |
|||
17
rdaler
16.02.25
✎
15:50
|
(16) Что за форма (произвольная)? - форма объекта ВнешниеИсточникиДанных.
Откуда у неё событие ПриЗаписи? - штатное, как у любой формы объекта. Внешний ИД получаю. Даже ссылку на новый объект получаю. Форма списка отлавливает обработку оповещения и обновляется. Даже рассматриваемая форма оповещение получает. Цель не заблокировать дубли, а обновить статус формы - сообщить ей о том, что ее данные успешно записаны и она должна перейти в состояние редактирования существующего, а не нового объекта. |
|||
18
Garykom
гуру
16.02.25
✎
18:29
|
(17) эмм, а что
ЭтотОбъект.Модифицированность = Ложь; никак? |
|||
19
rdaler
16.02.25
✎
18:55
|
(18) Перехватываю обработчик ПриЗаписи():
Отказ = Истина; Если Объект.Ссылка.Пустая() Тогда INSERT; Если Не Объект.Ссылка.Пустая() Тогда UPDATE; Получаю ссылку на вновь созданный объект; ОповещениеОбИзменении(); Все! Модифицированность, УстановитьСсылкуНового, ОтобразитьИзменениеДанных и иже с ними заполняют все кроме Объект.Ссылка и в заголовке формы выглядит как ПредставлениеОбъекта + "(создание)". |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |