|
Как сообщить форме НОВОГО объекта о его записи.
DimVad, lEvGl, novichok79, Волшебник, rdaler, p-soft, zenik, Garykom, Олдж, VS-1976, , , RomanYS, dmt, Bigbro, Ivanich, okmail, Ёпрст, AAA, ptiz, , Prog_man, vyaz, obs191, END, Ильф, denk32, Hawk_1c, ReaLg, crotnn, Шурик71, AlvlSpb, FirstLineSupport, ГдеСобакаЗарыта, _Batoo, rozer76, calmius, Chameleon1980, PuhUfa, Доминошник, , Бычье сердце, trad, zzz_zzz_zzz, Гость из Мариуполя, ЕRPe, av_x86, ilou, fyn, TormozIT, Seriy_Volk, mdao
| ☑ |
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;
Получаю ссылку на вновь созданный объект;
ОповещениеОбИзменении();
Все!
Модифицированность, УстановитьСсылкуНового, ОтобразитьИзменениеДанных и иже с ними заполняют все кроме Объект.Ссылка и в заголовке формы выглядит как ПредставлениеОбъекта + "(создание)".
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой