Изменение данных в удаленной БД | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Здравствуйте
Упрощенная по максимуму ситуация такова FoxPro и MySQL В БД есть 2 таблицы (~ по 1000 записей): tab1:id1, id_product, quantity1, .... Tab2:id2, id_product, quantity2, .... C помощью CAD получаю их курсоры, обрабатываю и в результате обработки получаю 3-й курсор, такого типа: curs3:id_product, quantity_to_correct (количество для корректировки, может быть с + и - )(50-100 записей) Стоит задача: 1. В каждой из этих двух таблиц произвести корректировку поля quantity на величину quantity_to_correct по совпадению id_product 2. Таблицы динамические, т.е. данные могут изменяться другими процессами, но количество для корректировки от этих изменений не зависит 3. Нельзя допустить, чтобы quantity1 или quantity2 стало <0. В такой ситуации изменения не вносить, а получить список таких id_product для принятия решения что делать с ними человеком (Можно не отдельным списком, а добавлением в curs3 поля типа result В голове пока каша из терминов: транзакция, буферизация, сквозной запрос. Поэтому не могу хоть какой-то код выложить. Как разложить по этапам эту задачу? Спасибо Исправлено 1 раз(а). Последнее : Sandwich, 16.08.18 08:18 |
Re: Изменение данных в удаленной БД | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Придумал такую схему
работоспособна ли эта схема? Вопрос 2 как получить данные в скобках {...} ? |
Re: Изменение данных в удаленной БД | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
И что мешает делать нужную корректировку в курсорах? А затем все изменения на сервер средствами самих CAD. Зачем сразу на сервер?
------------------ Лень - это неосознанная мудрость. |
Re: Изменение данных в удаленной БД | |
---|---|
Sandwich Автор Сообщений: 137 Дата регистрации: 08.02.2014 |
Потому что нужно не испавить значение в таблице, а откорректировать Поясню на примере 1. получил курсор, проверил нужное поле, оно например 5 2. выяснил, что число должно быть 6 (на момент получения курсора) 3. нужно внести исправление 5 на 6. 4. если в момент, пока я выяснял значение изменилось другим пользователем с 5 на 8, то при попытке перезаписать 8 на 6 появится ошибка совместного изменения данных. 5. НО, мне не важно какое значение в данный момент в этом поле ("моё старое" или "чужое новое"). Мне нужно к полю сделать "+1" к полю (6-5=1 см. п. 3) 6. важно только то, что бы оно не стало отрицательным (в случае если корректировка "-1") Исправлено 1 раз(а). Последнее : Sandwich, 16.08.18 12:33 |
Re: Изменение данных в удаленной БД | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Поправьте если не так 1. получил курсор, проверил нужное поле, оно например 5 2. выяснил, что число должно быть 6 (на момент получения курсора) 3. нужно внести исправление 4. Непонятно, похоже просто лирика) 5. Добавляю к полю разницу (п.3) 6. важно только то, что бы оно не стало отрицательным (в случае если корректировка "-1") тогда п.5 Может триггер, что бы <0 не было? (для транзакций, что бы в момент изменения все просчитывалось) +100500 Поскольку всего 1000 записей, по одной, мгновенно пролетит. ------------------ |
Re: Изменение данных в удаленной БД | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да. Но стоит вместо конкатенации строк при формировании строки запроса использовать параметры. Типа:
4 параметр SQLEXEC - массив aCountInfo с "числом затронутых записей" для каждой SQL команды внутри строки посланной этим SQLEXEC (т.к. вполне можно послать и батч, т.е. сразу несколько SQL команд за раз). Вообще если речь про MSSQL, то наверное лучше было бы сделать на сервере ХП реализующую данную логику, а из фокса просто эту ХП и вызывать... ------------------ WBR, Igor |
Re: Изменение данных в удаленной БД | |
---|---|
AndyNigmatec Сообщений: 1573 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Я бы смотрел в сторону ХП - (но не работал со скулем - не знаю как там видимость транзакций) ... и да, триггеры то никто не отменял.
Короче - голосую за ХП upd: ТС указал сервер - MySQL ... там вроде тока в последних версиях ХП-ки имеются - ну тогда хотяб тригеры нужные повесить и транзакцией вручную управлять в фоксе - чтоб полностью откатить ежели что не так Исправлено 3 раз(а). Последнее : AndyNigmatec, 16.08.18 13:55 |
© 2000-2024 Fox Club  |