|   |   | 
| 
 | Как сообщить форме НОВОГО объекта о его записи. | ☑ | ||
|---|---|---|---|---|
| 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; Получаю ссылку на вновь созданный объект; ОповещениеОбИзменении(); Все! Модифицированность, УстановитьСсылкуНового, ОтобразитьИзменениеДанных и иже с ними заполняют все кроме Объект.Ссылка и в заголовке формы выглядит как ПредставлениеОбъекта + "(создание)". | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |