Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
8-1102070757
Demon_new
2004-12-03 13:45
2005.03.20
Глюки перерисовки TImage


6-1105444565
Grant
2005-01-11 14:56
2005.03.20
TClientSocket &amp; TServerSocket


3-1108559386
Вован_
2005-02-16 16:09
2005.03.20
Как переименовать поле dbf-файла перед его открытием?


3-1108547759
samalex
2005-02-16 12:55
2005.03.20
Сообщение об изменениях в БД


1-1109788243
alex_shkut
2005-03-02 21:30
2005.03.20
Ошибка при динамическом создании TImageList