Долговременные Sql запросы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Долговременные Sql запросы

Сообщение JumpingJack » 13.04.2006 (Чт) 12:40

Здравствуйте, проблема в следующем: В программе используются Sql запросы, возвращающие большие объемы данных, один запрос может работать в раойне 15-30 сек., во время работы программа зависает и невозможно нажать отмену, выход, выводить счетчик времеи выполнения запроса или просто перейти к окну программы по alt+tab, можно ли как-то решить эту проблему?

Ведь в том же Query Analyzer'e запросы выполняются, но программа не подвисает..

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

Сообщение alibek » 13.04.2006 (Чт) 13:21

Выполняй запросы асинхронно.
Lasciate ogni speranza, voi ch'entrate.

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 13.04.2006 (Чт) 15:48

Это как? Запросы у меня в хранимых процедурах.. я их просто вызываю

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

Сообщение alibek » 13.04.2006 (Чт) 15:54

Запуская сами хранимые процедуры асинхронно.
Ускорить долгие запросы каким-то волшебным способом нельзя. Только оптимизировать, если возможно.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 15:54

Вот асинхронно и вызывай. С флагами adAsyncExecute, adAsyncFetch etc...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 13.04.2006 (Чт) 16:56

Я не про ускорение говорю, а про работе на фоне.. )

Random
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 21.02.2006 (Вт) 6:08
Откуда: Пермь

Сообщение Random » 13.04.2006 (Чт) 16:58

JumpingJack писал(а):Я не про ускорение говорю, а про работе на фоне.. )

Ты не DoEvents ищешь?
:)

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.04.2006 (Чт) 20:02

Random писал(а):Ты не DoEvents ищешь?

Нет ему нужен именно асинхронный запрос. Я тоже сталкивался с такой проблемой.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 17.04.2006 (Пн) 13:14

VVitafresh, проблема усложняется тем, что вызов запроса прописан в вызываемой мною функции, которую писал не я.. т.е. я к запросу и к его вызову никакого отношения не имею.. вызываю только ф-цию, вызывающюю запрос!

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

Сообщение alibek » 17.04.2006 (Пн) 13:19

JumpingJack писал(а):VVitafresh, проблема усложняется тем, что вызов запроса прописан в вызываемой мною функции, которую писал не я.. т.е. я к запросу и к его вызову никакого отношения не имею.. вызываю только ф-цию, вызывающюю запрос!

Ну и что?
Lasciate ogni speranza, voi ch'entrate.

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 17.04.2006 (Пн) 13:22

А то что править вызов запроса я не могу..

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

Сообщение alibek » 17.04.2006 (Пн) 13:27

Перечитай еще раз это.
Lasciate ogni speranza, voi ch'entrate.

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 13:44

Я, видимо, не правильно задал вопрос - мне надо использовать что-то вроде еще одного потока для запуска функции в фоне!

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

Сообщение Konst_One » 18.04.2006 (Вт) 13:58

зачем тебе потоки, когда это решается на уровне выполнения запроса с помощью ADO

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

Сообщение Konst_One » 18.04.2006 (Вт) 14:00


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.04.2006 (Вт) 14:02

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:06

GSerg, т.е. решения никакого? И придеться юзверям сидеть с зависшей прогой минут по 10? :)

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

Сообщение Konst_One » 18.04.2006 (Вт) 14:11

что это за система такая, что ты юзаешь функцию в своей программе, клоторую ты изменить не можешь ? ты используешь какую-то стороннюю com-библиотеку что-ли :?:

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

Сообщение Konst_One » 18.04.2006 (Вт) 14:12

может мы наконец узрим тот кусок кода , который вызывает у тебя торможение на 10 и более минут :)

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:18

Кусок кода не поможет - это всего навсего вызов функциИ! :))
Функция вызывается из класса, класс писал не я, поэтому менять и разбираться где и как менять - я не могу ..

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:19

Вот кусок куда, но сомневаюсь что он чем то поможет :)
Set rsDoc = GetRecSet(scmd)
На этом шаге тормоза по несколько минут, т.к. данных много!

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

Сообщение Konst_One » 18.04.2006 (Вт) 14:26

GetRecSet , как ты писал, лежит в неком классе. Этот класс у тебя добавлен в проекте или это класс из внешней DLL? если в проекте, то что тебе мешает добавить опциональный параметр в эту функцию и подправить ее код :roll:

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:32

Потому что придется добавлять опциональные параметры не в одной функции (т.е. я вызываю функцию, она вызывает еще одну и та вызывает запрос), придеться просматривать большой объем кода (т.к. функции этого класса довольно объемные) и что хуже всего вникать в него :)

Куда проще было бы использовать что-то в духе потоков, жаль что они в ВБ6 реализованы, как я понял, через одно место... неужели нету других выходов?

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:33

Ведь бывает же задачи аналогичные моей, но без запросов SQL, например чтение ОЧЕНЬ большого файла... как тут поступают?)

КОгда я писал на делфи - там все было просто, там были потоки)

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

Сообщение Konst_One » 18.04.2006 (Вт) 14:41

потоки в этом случае не оптимальны, проще разобраться с парой функций или вообще свою написать :wink:

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 14:58

Не.. это тоже не помогает.. все равно все висит, мало того - оно возвращает рекордсет, которому нельзя сделать delete :)

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

Сообщение Konst_One » 18.04.2006 (Вт) 15:18

adOpenStatic, adLockReadOnly - а это тебе ничего не говорит :?:
открой справку по ADODB и почитай еще разок :wink:

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 15:20

Лана, не суть, ну ступил.. но факт того что все по прежнему висит остается))

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

Сообщение Konst_One » 18.04.2006 (Вт) 15:34

а может у тебя подготовка запроса много времени занимает на сервер, вот он и висит. сначала стоит посмотреть план выполнения на сервере, я так думаю.

JumpingJack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 25.01.2006 (Ср) 12:54

Сообщение JumpingJack » 18.04.2006 (Вт) 15:36

я запрос прверял в QueryAnalyzer'e, выполняется ровно столько сколько висит прога =)

След.

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

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

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 10

    TopList