Как связать долгий SQL-запрос с ProgressBar'ом и отменой?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Как связать долгий SQL-запрос с ProgressBar'ом и отменой?

Сообщение A.A.Z. » 10.04.2004 (Сб) 23:16

Если у меня есть большой SQL-запрос, в смысле, долгий по времени, например, сортировка в таблице с огромным количеством строк, как можно отобразить ход сортировки в ProgressBar'е, и можно ли его, при желании, как-то отменить?
Ведь, насколько я понимаю, вся сортировка выполняется одной строкой, типа:
Код: Выделить всё
Data1.RecordSource = "SELECT Column1, Column3, Column5 FROM Table ORDER BY Column2": Data1.Refresh
Нет меня больше

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 12.04.2004 (Пн) 9:19

Вопрос поднимался уже. Никак. Ибо запрос исполянется сервером, а сервер никаких событий не генерирует во время исполнения. Так что увы.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 12.04.2004 (Пн) 15:10

:(
А какой-нибудь обходной способ существует? :?:
Нет меня больше

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Можно через ассинхронное выполнение

Сообщение Konst_One » 12.04.2004 (Пн) 15:11

Надо выполнять SQL-код в ассинхронном режиме и тогда все можно сделать.

Код: Выделить всё
'cn - ADODB.Connection
'rs - ADODB.Recordset
SQL="SELECT * FROM BigTable"
rs.Open SQL, cn, adOpenStatic, adLockReadOnly, adCmdText + adAsyncFetchNonBlocking


А дальше в эвентах коннекшена можешь свой прогресс-бар крутить на нужную величину. Не забудь кэш-сайз указать для рекордсета, на величину которого будет фетчиться.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 12.04.2004 (Пн) 15:18

А не через ADO? (У меня обычный VB.Data)
Нет меня больше

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Обычный DAO не поддерживает ассинхронность

Сообщение Konst_One » 12.04.2004 (Пн) 15:20

Обычный DAO не поддерживает ассинхронность

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 12.04.2004 (Пн) 19:01

:x
Блин!
А как-нибудь еще можно что-то подобное организовать (не через SQL)?
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2004 (Вт) 15:02

DAO таки поддерживает асинхронность, но с большими ограничениями. В частности MSJet и асинхронность несовместимы, нужно подключаться через ODBC (что сводит на нет все удобства DAO по сравнению с ADO).
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 13.04.2004 (Вт) 16:03

2 alibek: Я ему и предложил решение через ADO. В чем у него проблема, не понимаю. Заменить Data-контрол на рекордсет?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 13.04.2004 (Вт) 20:32

Ладно, поробую. Спасибо! :)
Нет меня больше


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 15

    TopList