Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Проблема при использовании транзакций Найти похожие ветки
← →
Квэнди © (2005-02-18 16:02) [0]Добрый день, господа, никак не могу понять, что означает сл. ошибка?
Commands out of sync; you can`t run this command now
Возникает она в цикле, в котором производится 2500 запросов insert, перед циклом выполнено
.starttransaction
при
.rollback
внутри цикла все впорядке, все втсавки отменяются, но при попытке провести все вставки до конца возникает такая ошибка.
← →
Johnmen © (2005-02-18 17:03) [1]Чётко - какая последовательность ?
← →
Квэнди © (2005-02-18 17:10) [2]ttr.IsolationLevel:=xilDIRTYREAD;
sqlmain.StartTransaction(ttr);
for i:=1 to 2500 do (для примера)
begin
query1.sql.add("insert into ......");
query1.execsql(true);
if <условие> then
begin
sqlmain.rollback;
exit;
end;
end;
if <условие> then
sqlmain.commit;
← →
Desdechado © (2005-02-18 17:14) [3]странно - роллбак по условию...
да и очистки текста квери не вижу...
← →
Квэнди © (2005-02-18 17:18) [4]я написал последовательность действий... ничего более... еще раз говорю: при использовании rollback, т.е. при срабатывании условия все происходит нормально, т.е. все запросы откатываются, но при попытке полностью пройти цикл выдается данная ошибка...
При удалении строк, связанных с транзакциями все запросы проходят успешно.
← →
sniknik © (2005-02-18 17:19) [5]> для примера
прям раздражать начинает. ;) а ошибка у тебя в рабочем коде или в том что для примера? (а то вот я вижу глюк. а ты скажеш, там нормально, сдесь описался ?)
> query1.sql.add("insert into ......");
???? внутри цикла? и без clear.
(в любом случае нужно выносить за цикл, нафига заставлять компоненты "перенапрягаться"? лишнюю работу делать...)
← →
Johnmen © (2005-02-18 17:20) [6]Уровень изоляции тр-ии можно и не ставить. Да и транзакцией можно не управлять вообще. Т.к. у MySQL нет транзакционного механизма.
Кстати, какая версия MySQL и какие компоненты доступа ?
← →
sniknik © (2005-02-18 17:21) [7]> я написал последовательность действий... ничего более...
ну вот, уже началось. ;о))
← →
Квэнди © (2005-02-18 17:22) [8]вы предлагаете за циклом писать 2500 строк? крайне интересно...
← →
Квэнди © (2005-02-18 17:24) [9]версия MYSQL 4.0
тип таблицы InnoDB , который является транзакционным.
компоненты Dbrxpress
← →
Квэнди © (2005-02-18 17:28) [10]DBexpress имелся ввиду.
← →
sniknik © (2005-02-18 17:30) [11]> вы предлагаете за циклом писать 2500 строк? крайне интересно...
ну что за прелестная чуш! ;о))
и я ничего не предлагал.
но могу, раз непонятно - запрос вносится за циклом, после выполняется в цикле сколько нужно, меняются только данные (параметры). это нормальная практика.
или ненормальная (но без заполнения компонента кучей запросов)
в цикле но
или
query1.sql.clear;
query1.sql.add("insert into ......");
или
query1.sql.text:= "insert into ......";
← →
Квэнди © (2005-02-18 17:31) [12]хорошо, я с вами не спорю, да вот только... вопрос то был немного не об этом...
← →
sniknik © (2005-02-18 17:36) [13]> вопрос то был немного не об этом...
это как сказать...
запрос то большой?
как думаеш сколько раз вставка выполнится? на последнем цикле в sql будет 2500 одинаковых инсертов (если влезет ;)), предпоследнем 2499.... и т.д., и какое ограничение на обьем у транзакции в mysql? (а такое есть наверняка).
← →
Квэнди © (2005-02-18 17:38) [14]А разве не именно в этом и заключался вопрос?....
как вы думаете, если бы я знал ограничение на колличество запросов в транзакции я бы задавал этот вопрос?
и еще.. разве в случае с использованием параметров проблема количества запросов под конец цикла решится??... )
← →
sniknik © (2005-02-18 17:46) [15]вижу меня упорно не понимают... специально тренировался?
просто проверь,
параметры тут не причем (просто с выносом за цикл внесение запроса и изменением данных параметрами это самый "ненапряжный" вариант (хотя смотря для кого, кода будет немного больше))
а варианты(два) ненормальные но без глюка, я и без параметров давал.
← →
Квэнди © (2005-02-18 17:53) [16]ок, именно один из таких "ненормальных" выриантов и используется.. но вопрос об ошибке все же остался...
← →
Desdechado © (2005-02-18 17:57) [17]пытаясь раздражаться и не утивая исходные данные, ты себе не помогаешь
← →
Квэнди © (2005-02-18 17:58) [18]нельзя ли по существу?
← →
sniknik © (2005-02-18 18:17) [19]> ок, именно один из таких "ненормальных" выриантов и используется..
я знал, знал,... !!! еще в [5] сказал так и будет ;о)))
т.е. ты признаеш, что приведенный код, на котором строилось все обсуждение и кроме которого у нас нет ничего, на самом деле "обманка"?, о чем тогда можно говорить? на неверных данных невозможно получить верное решение. (если только "дуриком", случайно)
> нельзя ли по существу?
по какому?
← →
Квэнди © (2005-02-18 18:58) [20]Если бы вас не затруднило все же изначально прочитать вопрос, не распыляясь на тофтологию, то вероятно вы бы поняли, что вопрос заключался всего лишь в значении ошибки
Commands out of sync; you can`t run this command now
а отнюдь не в способах реализации тех или иных задач...
← →
Desdechado © (2005-02-18 19:06) [21]документацию к серверу посмотри - там есть "значения"
мы пытались помочь тебе найти причины
← →
Квэнди © (2005-02-18 19:07) [22]благодарю за помощь, к сожалению не нашел в документации данной ошибки ( иначе прост не обратился бы..
← →
sniknik © (2005-02-18 20:32) [23]> заключался всего лишь в значении ошибки
всего лиш?
я наивно предполагал что смысл любой проблемы сюда положенной, в ее разрешении.
с учетом нового понимания... не поленился нашол доку... (наверное не ту что у тебя ведь у тебя этого нет)
If you get Commands out of sync; You can"t run this command now in your client code, you are calling client functions in the wrong order!
This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without a mysql_use_result() or mysql_store_result() in between.
кстати насчет порядка, два инсерта в одном пакете это в порядке вещей для mysql? а десять? а 2500?
или там всетаки порядок как в access-е по одному запросу на выполнение? (выяснять неохота, не настолько это интересно).
← →
Квэнди © (2005-02-18 20:40) [24]Благодарю за справку, проблема исправлена.
← →
sniknik © (2005-02-18 20:41) [25]> не распыляясь на тофтологию
в том то и дело, я считаю что если есть ошибка в коде, явная такая, махровая, то дальнейшие выяснения поведения этого кода, без ее предварительного исправления и есть тавтология. и занимался этим ты а не я.
(я прямо чуть не насильно пытаюсь тебя заставить эту ошибку исправить, а ты упираешся и мне начинаеш говорить что этот глюк к тому отношения никакого не имеет... бред, даже если это и впрямь окажется так (не имеет))
← →
sniknik © (2005-02-18 20:42) [26]> проблема исправлена.
и в чем же она была? ;)
← →
Квэнди © (2005-02-18 20:44) [27]собственно говоря как всегда в золотых руках, не оттуда ростущих... :)
в один из моментов выполнения получалось так, что во время commit одной из транзакций выполнялся запрос.. ))
← →
sniknik © (2005-02-18 20:55) [28]> что во время commit одной из транзакций выполнялся запрос.. ))
можеш показать это место пальцем в коде
Квэнди © (18.02.05 17:10) [2]
???
и перечитай теперь первый мой пост
sniknik © (18.02.05 17:19) [5]
до сих пор думаеш я к тебе придираюсь?
← →
Квэнди © (2005-02-18 21:00) [29]в том то все и дело, что я просто хотел узнать значение этой ошибки, т.е. её текст, который ты прислал, а все, что было в ветке на 90% с этим связано не было ))
← →
Anatoly Podgoretsky © (2005-02-18 21:01) [30]На придирки не хоже, больше похоже на ментальный анонизм.
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.034 c