Изменение данных | |
---|---|
lemenev Автор Сообщений: 113 Дата регистрации: 23.06.2022 |
Помогите разобраться с методикой обновления данных.
Допустим у меня есть 2 таблицы: таблица счетов продажи Sbit с уникальным полем Kod и таблица товаров по счёту Sbit2 с полем Sbit. Таблицы связаны отношением 1 ко многим по условию Sbit.Kod = Sbit2.Sbit 1 Допустим я ввожу новый счёт
Сохраняю результат: Т.к. поле temp.Sbit пустое, то
2 Позже я могу отредактировать существующий счёт: Ищу в таблице Sbit нужный счёт
Сохраняю результат: Т.к. поле temp.Sbit не пустое, то
3 Проблема возникает, когда при редактировании существующего счёта добавляются новые записи: Ищу в таблице Sbit нужный счёт
Как лучше организовать сохранение результата? В этом случае в части записей поле temp.Sbit не пустое, а в части пустое. Т.е. при APPEND часть записей удвоится. При UPDATE вновь добавленные записи пропадут. При INSERT пропадут изменения старых записей. Можно в два приёма: сначала INSERT новых записей, затем UPDATE всех записей. Пожалуйста, подскажите оптимальную стратегию. |
Re: Изменение данных | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Похоже, в этот раз придется Тарану раскрыть тайны своих двух классов.
|
Re: Изменение данных | |
---|---|
Burn Сообщений: 5644 Откуда: Днепр Дата регистрации: 02.01.2002 |
А кто мешает прописывать sbit в момент добавления новой записи если у вас всегда есть xKod?
|
Re: Изменение данных | |
---|---|
Alsim Сообщений: 3636 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
Интересный способ
Делаю так, если больше никак, только без update, а просто через удаление перед записью и insert. (у меня Fox7) *** А почему не связать, установить буферизацию у таблиц и работать с ними напрямую? Сохранять измы через =Tableupdate(.T.,.T.,"Sbit") =Tableupdate(.T.,.T.,"Sbit2") или отменять, если передумали =TABLEREVERT(.t.,"Sbit") =TABLEREVERT(.t.,"Sbit2") Просто, надёжно и работает больше 20лет ;) Исправлено 1 раз(а). Последнее : Alsim, 15.09.22 08:41 |
Re: Изменение данных | |
---|---|
lemenev Автор Сообщений: 113 Дата регистрации: 23.06.2022 |
А что дальше? У части записей из курсора есть «прототипы» в таблице Sbit2, а у части – нет. Так пустое поле в курсоре является признаком: запись старая иди новая. Можно, конечно, пройтись SCAN по курсору, для старых записей делать UPDATE, а для новых – INSERT. Но хотелось бы вариант без цикла. |
Re: Изменение данных | |
---|---|
Joys Сообщений: 3511 Откуда: Старая Русса Дата регистрации: 25.06.2000 |
------------------ Исправлено 1 раз(а). Последнее : Joys, 15.09.22 11:56 |
Re: Изменение данных | |
---|---|
PaulWist Сообщений: 14620 Дата регистрации: 01.04.2004 |
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Изменение данных | |
---|---|
Taran Сообщений: 13625 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Е-бало завали и не трогай меня. |
Re: Изменение данных | |
---|---|
lemenev Автор Сообщений: 113 Дата регистрации: 23.06.2022 |
Я раньше так делал, накладывая фильтр на таблицу Sbit2 Решил специально усложнить задачу, заведя временный курсор, чтобы не блокировать таблицы надолго. |
Re: Изменение данных | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Не очень понял, что мешает добавить в Where критерии отбора на пустой или не пустой код? В версии VFP9 команда Insert-SQL допускает использование запросов
Исправлено 1 раз(а). Последнее : Владимир Максимов, 15.09.22 20:18 |
Re: Изменение данных | |
---|---|
lemenev Автор Сообщений: 113 Дата регистрации: 23.06.2022 |
Владимир Максимов
Спасибо |
© 2000-2024 Fox Club  |