SQL UPDATE при экспорте ODBC

Страницы: 1
RSS
SQL UPDATE при экспорте ODBC
 
Некоторое время назад в этой ветке форума обсуждали, что при обновлении таблиц выполняется запрос INSERT, а при не удаче - UPD ATE

Я использую quik 7.0.4.10 и, судя по quik_odbc.log INS ERT не происходит, выполняется сразу UPD ATE. Вот, например, как выглядит создание и снятие стоп-заявки:
Скрытый текст

Как на самом деле работает обновление?
 
Здравствуйте,
Ошибка не отображается в логе.
Работает так:
При изменении данных таблицы вначале производится вставка записи. Если вставка
завершилась удачно, то обрабатывается следующая запись. Если вставка завершилась
неуспешно из-за нарушения первичного ключа, а таблица является обновляемой,
то выполняется ее обновление. Если таблица не обновляется, то обрабатывается следующая
запись. Иначе генерируется ошибка.
 
Цитата
Sergey Gorokhov написал:
Ошибка не отображается в логе
Не понятно, что вы имеете в виду. Был вызван INSERT, но он завершился с ошибкой и поэтому INSERT не отображен в логе?

Из лога следует, что выполняются 2 SQL запроса:
1. INS ERT IN TO C:\_QUIK_DB\stop (op, tool, stop_price, volume, satet,  avolume, till, result, step, sliding, server, price, type, tm, o_no)  VALUES ('B', 'SiM6', 66000.00000000, 3.00000000, 'ACTIVE', 3.00000000,  '16/05/2016', NULL, 0.00000000, 0.00000000, 'Текущий', 66100.00000000,  'Стоп-лимит', '15:40:56', 103025462.00000000)
2. UPDATE C:\_QUIK_DB\stop SE T op='B', tool='SiM6',  stop_price=66000.00000000, volume=3.00000000, satet='KILLED',  avolume=3.00000000, till='16/05/2016', result='KILLED', step=0.00000000,  sliding=0.00000000, server='Текущий', price=66100.00000000,  type='Стоп-лимит', tm='15:40:56' WHERE o_no=103025462.00000000

Исходя из вашего описания механизма экспорта в ODBC между этими 2 запросами должен быть выполнен запрос:
INS ERT IN TO C:\_QUIK_DB\stop (op, tool, stop_price, volume, satet,   avolume, till, result, step, sliding, server, price, type, tm, o_no)   VALUES ('B', 'SiM6', 66000.00000000, 3.00000000, 'KILLED', 3.00000000,   '16/05/2016', 'KILLED', 0.00000000, 0.00000000, 'Текущий', 66100.00000000,   'Стоп-лимит', '15:40:56', 103025462.00000000)

Я думаю, что этот запрос (INSERT) должен выполниться без ошибки, потому что моя "база данных" - это простой набор dbf файлов, никаких ключей и индексов не настроено, то есть любой INSERT заведомо должен выполниться.
Существует ли способ проверить, выполнялся INSERT или нет?
 
Цитата
Oleg Strelnikov написал:
Не понятно, что вы имеете в виду. Был вызван INSERT, но он завершился с ошибкой и поэтому INSERT не отображен в логе?
Да именно это и имелось ввиду.
То что у Вас в базе не настроены первичные ключи не значит что их нет.
Для таблиц терминала первичные ключи всегда и безусловно есть, они помечены знаком * в настройках экспорта.
В частности для таблицы стоп заявок таковым является поле "Номер"
Страницы: 1
Читают тему
Наверх