![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Re: Транзакции | |||
---|---|---|---|
leonid Сообщений: 2919 Откуда: Рига |
Надо полагать, of63 предлагает перейти с Oracle на древний MySQL. ![]() |
||
Re: Транзакции | |||
---|---|---|---|
Владимир Максимов Сообщений: 13874 Откуда: Москва |
Еще один "детский" вопрос: А по каким полям ты проверяешь, что данные до/после изменения?
У тебя в псевдокоде IF curTest.pole1 = 'обновленное значение' А остальные поля? Т.е., может с одним единственным полем все хорошо, но остальные вообще не изменялись? Ну, и проверять все-таки надо из одного места. Если вставка через VFP, то и проверку надо делать в VFP * Настраиваем ручной режим завершения транзакции (иначе смысла в SqlCommit нет) = SQLSETPROP(m.ch, 'Transactions', 2) * Со стороны VFP8 запускаем процедуру Oracle =SQLExec(m.ch, 'Call MyProc') * Явно завершаем транзакцию isOk = SqlCommit(m.ch) * Если делаем явную выборку, то получаем актуальные данные * ID в where один и тот же послается =SQLExec(m.ch, 'select * from MyTab where id = тут айдишник записи', 'curTest') select curTest IF curTest.pole1 = 'обновленное значение' * если данные обновились то сделать транзакцию =SQLExec(m.ch, 'insert into tabl2 (перечисление полей) select (перечисление полей) from MyTab where id = тут айдишник записи') isOk = SqlCommit(m.ch) * А теперь смотрим, что же оказалось записано в tab2 =SQLExec(m.ch, 'select * from tabl2 where id = тут айдишник записи', 'curTest2') * Данные в новой таблице select curTest2 BROWSE NOWAIT * Сравнивая с тем, что, предположительно, вставляли select curTest BROWSE NOWAIT ELSE messagebox ('Всё плохо, ничего не обновилось, транзакцию не посылаю') ENDIF Кстати, а вставка записей в новую таблицу вообще была? Если триггер сам меняет id, то, может, просто вообще ничего не было вставлено в tab2 и ты тупо смотришь на старые данные. Хотя бы количество записей сравнить можно до и после вставки? Есть еще предположение по автоконвертации типов данных, если структура полей новой и старой таблиц отличаются. Ну, например, длинная строка автоматически обрезается. Не знаю, какое правило действует в Oracle в случае, если типы данных не могут быть автоматически приведены к нужному типу. Что чисто внешне, может быть принято за запись "старых" данных. Но это на знать структуру таблиц и какие именно значения "старые" и какие "новые" и по каким правилам в Oracle выполняется приведение типов ![]() |
||
Re: Транзакции | |||
---|---|---|---|
of63 Сообщений: 20844 Откуда: Н.Новгород |
() ![]() Исправлено: of63, 10.01.21 19:56 ![]() |
||
Re: Транзакции | |||
---|---|---|---|
Божья_коровка Автор Сообщений: 24282 |
Ну я делаю через интерфейс изменение нескольких полей, загоняю данные, например 'test1', 'test2' в несколько полей, плюс проверяю айдишник изменений. Т.е. при апдейте MyTable, формируется каждый раз новый айдишник. Да итак тоже проверяла. Запись всегда одна. Одна запись в таблице MyTable меняется и она же одна и добавляется в Table2. Триггер меняет только "айдишник изменения записи", у записи несколько айдишников.В таблицу table2 запись вставляется, но с предыдущими данными, т.е. не с 'test1', 'test2'. Т.е. система такая, изменила проца данные в записи с айди=1, значения полей, и эта же запись обновленная с айди=1 вставляется в table2. Т.е. одно изменение (один апдейт) одной записи в MyTable = одна вставка одной записи в table2. Они отличаются, только одним полем. В table2 есть поле, которого нет в MyTable. Но в транзакции я специально делаю перечисление полей, которые нужно вставить и типы данных и наименование перечисленных полей идентичны в обоих таблицах. ------------------ Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается... Исправлено: Божья_коровка, 10.01.21 20:16 ![]() |
||
Re: Транзакции | |||
---|---|---|---|
Божья_коровка Автор Сообщений: 24282 |
Если делать без всего без этого будет чистый лист. Если не рождаться, то и не умирать, т.е. если не жить, то и проблем и странностей не будет. ![]() Вот, я писала выше - Цитата: ------------------ Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается... Исправлено: Божья_коровка, 10.01.21 20:19 ![]() |
||
Re: Транзакции | |||
---|---|---|---|
Igor Korolyov Сообщений: 34067 |
Я и предлагаю сделать тест вида
update tbl1 ... / insert into tbl1 ... не суть важно, абы данные "до и после" чётко различались. commit insert into tbl2 ... select ... from tbl1 без дополнительных условий - ВСЕ записи перегнать. commit смотреть tbl2 - и из фокса и из сторонней утилиты. если это сработает как положено - вот тогда изучать код ХП, триггера, собственно фоксовый код вокруг этого самого "id записи". Заодно строку подключения проверить - если драйвер оракловский, там целая куча самых разных параметров имеется. А если MS - то искать по форумам на предмет проблем с оным - с разными типами данных в частности (может он твой id передаваемый из фокса в условии округляет/обрезает/перекодирует - ты даже не упомянула какого типа это поле). ------------------ WBR, Igor ![]() |
||
© 2000-2021 Fox Club  |