Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прерывание выполнения запроса [D6, MSSQL]


Страницы:   1 2

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]
В системе есть тип данных 'запрос'. Пользователь может создавать и запускать запросы. Я пишу редактор запросов, отладчик так сказать, с проверкой синтаксиса и проч.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо