![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прерывание выполнения запроса [D6, MSSQL]
NAlexey © (2004-07-02 09:03:00)Хотелось бы реализовать нечто подобное как в Query Analyzer, где возможно прервать запрос во время его выполнения. Для этого запускаю запрос в отдельном потоке. Но вот прервать как раз его не получается. Terminate := True; не помогает. Ну это и понятно, решал ли кто такую задачу? Если да, то какой подход необходимо использовать?
inic (2004-07-02 12:29:00) [1]
> >MSSQL есть возможность и выполнение самого запроса прервать
> Есть... Kill и все тут.
Если работать напрямую (через API) то вроде SQLCancel
(SQL Books Online)
NAlexey (2004-07-02 12:22:00) [2]>MSSQL есть возможность и выполнение самого запроса прервать
Есть... Kill и все тут.
Курдль (2004-07-02 12:21:00) [3]
> NAlexey © (02.07.04 12:19) [30]
> Т.е получается что
> AdoConnection.Connected := False;
> AdoConnection.Connected := True;
Попробуй. Я с ADO не работал и не знаю, даст ли оно закрыть соединение до отработки всех запросов.
sniknik (2004-07-02 12:20:00) [4]пример выслал, а то мы тут долго переписыватся будем ;о).
там под access правда, но ничего разберешся. подставь туда "серьезную" табличку (у меня 170тыс, более менее видно, меньшие "пролетают" трудно заметить)
да это вообщето не прерывание запроса а прерывание получения данных, сервер (как и подозревал ;) запрос выполняет. но обычно это и нужно, хотя в MSSQL есть возможность и выполнение самого запроса прервать, но я этого не делал только хелп читал. могу поискать... но ломает. ;о)
NAlexey (2004-07-02 12:19:00) [5]>Курдль © (02.07.04 12:15) [29]
Т.е получается что
AdoConnection.Connected := False;
AdoConnection.Connected := True;
?
>sniknik © (02.07.04 12:10) [27]
Пришли пожалуйста на alexey@byte-et.ru пример если не трудно, ознакомлюсь.
Курдль (2004-07-02 12:15:00) [6]Откат инициируется автоматически сервером при разрыве соединения.
NAlexey (2004-07-02 12:13:00) [7]>sniknik © (02.07.04 12:10) [27]
Хм... А где же тогда уверенность что сделай я какой нибудь Update а потом отменив в середине у меня произойдет откат?
sniknik (2004-07-02 12:10:00) [8]делай клозе, и не только датасету но и конекту иначе с этим датасетом работать будет нельзя пока запрос не "довыполнится"
NAlexey (2004-07-02 11:56:00) [9]>sniknik © (02.07.04 11:47) [22]
Запускаю ADOCommand, ExecuteOption := eoAsyncExecute; Делаю ADoCommand.Cancel; Ноль эффекта, продолжает выполнятся, и набор записей возвращает:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ADODataSet.Recordset <> nil then
ADODataSet.Close;
Caption := '';
ADOCommand.CommandText := Memo1.Text;
ADOCommand.Execute;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOCommand.Cancel;
end;
procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);
begin
if Recordset <> nil then
begin
ADODataSet.Recordset := Recordset;
Caption := IntToStr(ADODataSet.Recordset.RecordCount)
end;
end;
Anatoly Podgoretsky (2004-07-02 11:50:00) [10]so_well (02.07.04 10:32) [6]
Нельзя прервать, то что не запущено
Курдль (2004-07-02 11:49:00) [11]
> NAlexey © (02.07.04 11:45) [21]
> значит ли это что каждый кто написал:
> select * from table1 where imya like '%Вася%'
> бежит на рынок с релизом?
Пожалуй, нет. Но, "от противного": те, кто не бежит на рынок с релизом, обычно посылают ... разработчиков, которые предлагают им писать select * from table1 where imya like '%Вася%', вместо того, чтобы применить фильтр или написать выражение типа Ёкселя.
inic (2004-07-02 11:47:00) [12]Из всех известных мне СУБД, документированная (и то хреново) функция по прерыванию запроса имеется только в >= IB6.5.
Есть слух, что то же появится в FB2.
К сожалению, я также пытался придумать способ для MSSQL Server, даже пытался использовать Defaults также как юзают генераторы в FB, но изменение Defaults для уже начавшегося запроса "незаметно". Но может быть тот, кто ВСЕ знает и скажет нам истину :)))
sniknik (2004-07-02 11:47:00) [13]если нужно подобие Query Analyzer то и методы работы должны его быть, это значит ADO и асинхронное выполнение запроса, в этом случае он легко "снимается". (легкое подозрение есть что сервер его иногда всетаки до конца выполняет в некоторых случаях, но и в QA аналогично)
если интересует, есть у меня гдето пример давно писал, если найду могу выслать. (обьяснять дольше, хотя там и элементарно все)
NAlexey (2004-07-02 11:45:00) [14]>Курдль © (02.07.04 11:39) [20]
значит ли это что каждый кто написал:
select * from table1 where imya like '%Вася%'
бежит на рынок с релизом?
Курдль (2004-07-02 11:39:00) [15]
> >Курдль © (02.07.04 11:25) [18]
> А ты что, поставляешь все эти программы со своей?
"Юзеры, которые умеют писать запросы" не покупают у меня программные продукты, а продают свои :(
NAlexey (2004-07-02 11:34:00) [16]>Курдль © (02.07.04 11:25) [18]
А ты что, поставляешь все эти программы со своей?
Курдль (2004-07-02 11:25:00) [17]Разве для юзеров, умеющих писать запросы не все еще написано?
DB Artisan, PLSQL Developer, Oracle Discoverer, Interactive SQL, IBExplorer и т.п.
NAlexey (2004-07-02 11:10:00) [18]>А не слишком жирно для юзеров?
Юзер юзеру рознь.
Курдль (2004-07-02 11:06:00) [19]
> >Курдль © (02.07.04 10:49) [13]
> В системе есть тип данных 'запрос'. Пользователь может создавать
> и запускать запросы. Я пишу редактор запросов, отладчик
> так сказать, с проверкой синтаксиса и проч.
А не слишком жирно для юзеров? Я как-то проходил этот путь при создании одной проги, где требовались сложные подсчеты, программируемые юзерами. Но откзазлся в пользу встроенного интерпретатора.
NAlexey (2004-07-02 11:01:00) [20]>dimm22 (02.07.04 10:42) [12]
Suspend приостанавливает выполнение потока. Т.е если я ничего не упустил, мне не удастся сделать ему Terminate до тех пор пока я не сделаю ему Resume? Одним словом выполнение запроса придется завершить по любому?
>Курдль © (02.07.04 10:49) [13]
В системе есть тип данных 'запрос'. Пользователь может создавать и запускать запросы. Я пишу редактор запросов, отладчик так сказать, с проверкой синтаксиса и проч.