-
> Тоже не ботает. > Cancel - игнорит если говоришь "не работает" приводи доказательства. у меня работает. > пришлось после кучи экспериментов с АДО использовать DBLib пока что, все "зубры" что мне встречались, те что "уходят" от ADO ищя "волшебных" возможностей в других технологиях, все попросту "не разобрались с управлением". ну а так как сам я считаю ADO простым, логичным и понятным... в общем мнение о таких специалистах у меня не очень. (не путать с теми кого жизнь вынудила писать на чемто конкретном, у кого есть разумные причины, начал с другого. имеются ввиду только "поисковики" метающиеся от технологии к технологии только изза того что "чтото не получается", и виноватыми считают именно технологию/компоненты) > RollBackTrans - ругается, что транзакция не открыта ну так. если делаешь откат транзакции ее как минимум открыть надо... а вот как ты отреагируешь на совет уничтожить обьект(транзакцию) в дельфи? скажешь что ругается что обьект не существует? не понимаю правда как он этим хотел решить вопрос, и проверять неохота, но раз уж делать то правильно. не так ли? вообще это уже немного достает. вот пример (убрал лишнее и немного переделал и отмену и старт т.е. там теперь чуть больше кода чем приводил, но вы же и тот не осилили, куда вам дальше то. пишите свою, может разберетесь получше... ) http://webfile.ru/1807960 (exe в rar архиве, 340кб) у меня естественно там свое, поменяйте строку коннекта и вносите свой запрос (не управляющую команду, а именно запрос), если ошибок нет должно выполнится. строка коннекта ставится по кнопке run так with ADOCon do
if ConnectionString <> EdComText.Text then begin
Close;
ConnectionString:= EdComText.Text;
end;
т.е. если изменений в строке нет то остается старый коннект, есть то переконектится даже если там пробел незначащий добавили.
-
сорри, в прошлом примере глюк, не учел что прогресс в другом потоке, а я там "красоту навел" счетчик фетча обновляю и кнопки интерфейса дизейблю (т.е. фактически к VCL из потока пусть и неявного обращаюсь)... AV может быть. замена http://webfile.ru/1808019
-
> пока что, все "зубры" что мне встречались, те что "уходят" > от ADO ищя "волшебных" возможностей в других технологиях, > все попросту "не разобрались с управлением".
1. Думаю, не будете спорить, что работать с ораклом через АДО (при наличии нормальных библиотек) - извращение. 2. Немного тяжелее с мс скл. Другой технологии, кроме АДО, мс и не предоставляет (DBLib - слишком низкоуровневая). Кстати, в АДО.НЕТ проблем НИКАКИХ не возникает. Он даже с ораклом работает более менее корректно. А вот нативный АДО вызывает проблемы. Мелкие, но противные. Кстати, вместо того чтобы публиковать многокилобайтные исходники, может просто по русски написать, КАК прервать таки асинхронный запрос ? Идея с переконнектом, имхо, ОЧЕНЬ плоха. ЗЫ. Я бы очень постеснялся наезжать на ребят из РНИВЦ. Они ПЕРВЫМИ внедряли мс скл, причем под непосредственным руководством спецов из мс. А уж сертификатов у них - все стены увешены.
-
> 1. Думаю, не будете спорить, что работать с ораклом через АДО (при наличии нормальных библиотек) - извращение. не работал с ораклом, сталкивался, но не работал, но если бы пришлось, первым бы, что попробовал было бы ADO. а насчет "нормальных", кто сказал что они нормальные? не верю тем кто говорит что ADO "ненормально", это против моего опыта.
> Кстати, вместо того чтобы публиковать многокилобайтные исходники я не даю/публикую исходников в ветках типа этой, в которой кроме трепа ничего не представлено. (причем инициатор трепа не я)
> может просто по русски написать, КАК прервать таки асинхронный запрос ? я писал. но все напрочь проигнорировано... мне вот например наоборот очень интересно как можно не сделать такой простой веши. что можно сделать чтобы не работало...
> Идея с переконнектом, имхо, ОЧЕНЬ плоха. где переконнект? приведен и код и обьяснение, и тем не менее вы делаете вывод "со своей колокольни", неадекватный. (как мне кажется аналогично и по всему остальному)
> ЗЫ. Я бы очень постеснялся наезжать на ребят из РНИВЦ. а кто на них наезжает? читай тщательнее. если уж к ним сами спецы из мс приходили и сказали "работайте через DBLib!", ктоб смог отказаться?... вынуждены. или там была ситуация типа описанной? начали с ADO не справились, перекинулись на DBLib... и начали долго долго писать свою обертку... (ну хоть какаято польза, поневоле спецом станешь)
-
> если уж к ним сами спецы из мс приходили и сказали "работайте > через DBLib!", ктоб смог отказаться?...
Основное приложение у них на АДО. Думаете, кому то сильно хотелось изучать DBLib, для написания утилит ?
Основная грабля АДО, как универсального средства - он плохо понимает уровень серьезности ошибки. Т.е. в хранимке произошла ошибка, ошибка кидается в лог, хранимка идет дальше. АДО же считает, что хранимка прервалась и выдает исключение. DBLib же работает аккуратно. Кстати, и GO понимает без предварительной распилки скрипта.
> как можно не сделать такой простой веши
Какой ? Я добился асинхронности, но запрос к ораклу НЕ СНИМАЕТСЯ ни одним из предложенных способов (Cancel, Close, Close коннекту, RollBack). Может, конечно, при работе с мс скл ситуация лучше, но с ораклом асинхронка не доделана.
-
> Кстати, и GO понимает без предварительной распилки скрипта. GO это не команда SQL, это команда "исполнителя скриптов" типа QA и его консольного аналога... она в скрипте не может не давать ошибки. что наводит на мысль, что чтото там у вас не так и с предыдущей ошибкой, может вся "аккуратность" DBLib просто в том, что написали вы с его использованием так, что ошибки попросту игнорирует? (там же надо весь механизм в том числе и с ошибками переписывать)
> но запрос к ораклу НЕ СНИМАЕТСЯ ... но с ораклом асинхронка не доделана. это можно поверить -> [61], нужно только желание... сделать строку коннекта и выполнить запрос в примере это 2 минуты. (имхо 98,8% за то что работает)
-
> GO это не команда SQL, это команда "исполнителя скриптов" > типа QA и его консольного аналога... она в скрипте не может > не давать ошибки. что наводит на мысль, что чтото там у > вас не так и с предыдущей ошибкой, может вся "аккуратность" > DBLib просто в том, что написали вы с его использованием > так, что ошибки попросту игнорирует? (там же надо весь механизм > в том числе и с ошибками переписывать)
Аккуратность заключается в том, что работает со скриптом ОДИН к ОДНОМУ, как QA. А с АДО такого не получается.
Чесно говоря, лениво вытаскивать целый пример, тем более у вас с мс скл он, а у меня оракл. нельзя ли опубликовать только кусочек под кнопкой "отменить запрос" чтобы проверить саму методу ?
-
> ANB (17.03.08 12:54) [64] . > но запрос к ораклу НЕ СНИМАЕТСЯ ни одним из предложенных > способов
там не асинхронка не доделана, а вообще прерывание выполнения запроса любым способом. Даже если снимать сессию через alter system kill session, часто можно получить 'session marked for kill' и висеть marked она будет вечно
-
> там не асинхронка не доделана, а вообще прерывание выполнения > запроса любым способом
из девелопера, тоада, через ДОА и ОДАК - без проблем все нормально снимается. Я ж корректный случай взял. Да, иногда подвисает и не снимается ничем, даже сессия не убивается. Но не для этого запроса, на котором я экспериментировал.
> висеть marked она будет вечно - ну не вечно. Обычно часа через 2 отваливается. А уж на следующий день ее по любому обычно уже нету.
-
> ANB (17.03.08 14:07) [68]
> из девелопера, тоада, через ДОА и ОДАК - без проблем все > нормально снимается.
ну волшебства тут никакого http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci16msc007.htm#sthref3500как ее там ADO использует - другой вопрос. > Да, иногда подвисает и не снимается ничем, даже сессия не > убивается.
так тоже часа через 2 снимется :) > А уж на следующий день ее по любому обычно уже нету.
было дело и неделю висела, пока не orakill`ом не застрелил.
-
> было дело и неделю висела, пока не orakill`ом не застрелил.
Не, у нас админы че то настроили - больше суток сессия не висит.
> так тоже часа через 2 снимется :)
Там - это в АДО ? Ни фига. Мой запрос отрабатывает 2 мин. В девелопере - снимается менее чем через секунду. Похоже, АДО не знает про OCIBreak() (да и откуда ? универсал же).
-
> ANB (17.03.08 14:55) [70]
> Не, у нас админы че то настроили - больше суток сессия не > висит.
да нет такого параметра "сколько висеть" :) тут все на везении.
> Похоже, АДО не знает про OCIBreak() (да и откуда ? универсал > же).
да такой же это универсал, как BDE, все равно в конце концов на OCI основано, прекрасно трассируется любым OCI-трассировщиком. Кстати, ради интерса посмотри, что оно пытается делать при Cancel, мне самому интересно стало, а дельфу подымать лень, в VS разбираться с ADO - тем более :)
-
> а дельфу подымать лень
У меня отчет уже третий час колбасит - не могу в делфу залезть.
-
procedure TDataSet.Cancel;
procedure CancelNestedDataSets;
var
I: Integer;
begin
if Assigned(FNestedDataSets) then
for I := 0 to FNestedDataSets.Count - 1 do
with TDataSet(FNestedDataSets[I]) do
if Active then Cancel;
end;
var
DoScrollEvents: Boolean;
begin
case State of
dsEdit, dsInsert:
begin
CancelNestedDataSets;
DataEvent(deCheckBrowseMode, 0);
DoBeforeCancel;
DoScrollEvents := (State = dsInsert);
if DoScrollEvents then DoBeforeScroll;
UpdateCursorPos;
InternalCancel;
FreeFieldBuffers;
SetState(dsBrowse);
Resync([]);
DoAfterCancel;
if DoScrollEvents then DoAfterScroll;
end;
end;
end;
Думал, что то попутал, но все верно. Cancel набору данных - тупо отмена редактирования/вставки. Cancel коннекту уходит в вызов метода АДО, но никакого эффекта не дает - запрос висит.
-
Во. Нашел. Cancel коннекту согласно доке должен помочь. Но не помогает.
-
> ANB (17.03.08 17:56) [74]
OCI-трассировщиком глянь, че он пытается делать
-
С ураклом не работал, но, думаю, что он тут не при чем - вся закавыка в неправильном (некорректном) использовании ADO. У меня с мсскл все весело снимается. Правда, это "весело" не распространяется на хранимки, в которых рекурсия - там надо трохе обождать, пока сервер "выйдет из транса" ;)
Для того, чтобы это проверить, достаточно побаловаться с QA - там есть кнопка останова. Он же как-то это делает, а ? Или он не джетом пользуется ?
-
> Правда, это "весело" не распространяется на хранимки, в которых рекурсия - там надо трохе обождать, пока сервер "выйдет из транса" ;) проверь в тесте [61], не должен ждать. ждешь ты, имхо, потому, что cancel "оберточный" используешь, а там вроде сделано с ожиданием ответа, специально, типа гарантировано. а QA бросает все на "произвол судьбы" не ожидая подтверждений.
> Или он не джетом пользуется ? естественно не jet-ом, jet это access, а не mssql. но вообще чем бы он там не пользовался, все это можно повторить чисто на ADO (может им и пользуется, хотя он и ODBC*-шную dll подключает... может и его тоже, вперемешку). ну, более менее повторить, трудности наверняка будут, но пока я их не вижу (и они будут не там где могут подумать... а например в отсутствии грида для отображения, т.к. он явно работает с датасетами с серверным курсором, дельфишный такое отображать не может. и т.д. и т.п. неясно пока не столкнешся).
-
Сегодня поздно завтра проверю, отмену на большой базы для MSSQL
-
> Для того, чтобы это проверить, достаточно побаловаться с > QA - там есть кнопка останова. Он же как-то это делает, > а ? Или он не джетом пользуется ?
Он пользуется ODBC
|