Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Зависают запросы через ODBCRecordset (число прочтений - 9250 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Зависают запросы через ODBCRecordset
14. Июля 2006 :: 08:39
Печать  
В начале программы подключаюсь к внешней ДБФ-базе:

[code]
м_ODBCDatabase = СоздатьОбъект("ODBCDatabase");
м_ODBCDatabase.Соединение("DRIVER=Microsoft Visual FoxPro ceType=DBF;SourceDB=C:\TEMP");
[/code]

и есть у меня процедура, которая читает из базы данные:

[code]
Процедура ВыполнитьЗапрос (пТаблицаЗначений, пСтрокаЗапроса)
     Сообщить("Выполняется запрос: " + пСтрокаЗапроса);
     лЗаписи = СоздатьОбъект("ODBCRecordSet");
     лЗаписи.УстБД(м_ODBCDatabase());
     лЗаписи.УстТаймаутЗапроса(5);
     лЗаписи.ВыполнитьИнструкцию(пСтрокаЗапроса, пТаблицаЗначений);
     Сообщить("Запрос выполнен");
КонецПроцедуры
[/code]

Несколько раз этот запрос срабатывает, все отлично, а потом в какой-то момент зависает. Даже не возвращается ошибка по таймауту. Текст запроса всегда одинаковый. Что может быть?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #1 - 14. Июля 2006 :: 09:39
Печать  
Что, никто не сталкивался с глюками драйвера?
  
Наверх
ICQ  
IP записан
 
Scorpion
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Местоположение: Киев
Зарегистрирован: 05. Июня 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #2 - 08. Августа 2006 :: 13:22
Печать  
es3000 писал(а) 14. Июля 2006 :: 09:39:
Что, никто не сталкивался с глюками драйвера?

Глючный драйвер и ODBC и OLE DB тоже.
Недавно столкнулся с ситуацией когда 1с выдает правильные значения атрибута справочника, а запрос возвращает пустые значения.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #3 - 08. Августа 2006 :: 15:15
Печать  
Scorpion писал(а) 08. Августа 2006 :: 13:22:
Недавно столкнулся с ситуацией когда 1с выдает правильные значения атрибута справочника, а запрос возвращает пустые значения.

Тыб примеры приводил...
А то мужики и не знают.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #4 - 09. Августа 2006 :: 07:28
Печать  
А как решить проблему?
Поможет ли каждый раз перед запросом создавать новый объект ODBCRecordset?
Сейчас я его создаю только в начале программы и потом уничтожаю только при выходе
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #5 - 09. Августа 2006 :: 10:50
Печать  
spock писал(а) 08. Августа 2006 :: 15:15:
Тыб примеры приводил...
А то мужики и не знают.

Примеры приведены, в моей теме по табличному полю.
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #6 - 09. Августа 2006 :: 11:50
Печать  
trdm писал(а) 09. Августа 2006 :: 10:50:
в моей теме по табличному полю.

желательно бы ссылку на ту тему.
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Зависают запросы через ODBCRecordset
Ответ #7 - 10. Августа 2006 :: 07:23
Печать  
Может где-то обнуляешь ODBCDataBase или закрываешь соединение?
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #8 - 14. Августа 2006 :: 12:11
Печать  
Только при выходе из программы
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #9 - 14. Августа 2006 :: 12:13
Печать  
Так и работает, один раз запускаешь программу - нормально целый час работает, в другой раз может зависнуть при выполнении 3-го запроса.

Вот думаю ADO попробовать, но там нету методов, чтобы результат запроса сразу в таблицу значений вывести, тоже очень неуобно. Щас у меня ТЗ около 30 тыс. записей заполняется из запроса за 2-3 сек, а вручную по каждой строчке добавлять намного дольше
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #10 - 14. Августа 2006 :: 12:51
Печать  
Вообще-то мистика.
У меня в одной из инсталляций через ОДБЦ идет несколько запросов в секунду от каждого из сотни пользователей. Персистных жалоб на зависоны нет...
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #11 - 15. Августа 2006 :: 10:51
Печать  
quan:
А ты объект ODBCRecordset создаешь для каждого запроса? Или создаешь толлько один раз, а потом используешь до выхода из программы?
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Зависают запросы через ODBCRecordset
Ответ #12 - 15. Августа 2006 :: 20:37
Печать  
[quote author=es3000 link=1152866370/0#0 date=1152866370]
Несколько раз этот запрос срабатывает, все отлично, а потом в какой-то момент зависает. Даже не возвращается ошибка по таймауту. Текст запроса всегда одинаковый. Что может быть?
[/quote]
Ты, кстати, попробуй посмотреть на проблему шире.
У меня, например, обнаруженные сегодня проблемы с тормозами были вызваны проблемами сети на физическом уровне.

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

De quelle planète es-tu?
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #13 - 16. Августа 2006 :: 06:19
Печать  
может стоит поинтересоваться у автора о версии 1С++?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #14 - 17. Августа 2006 :: 09:27
Печать  
es3000 писал(а) 15. Августа 2006 :: 10:51:
quan:
А ты объект ODBCRecordset создаешь для каждого запроса? Или создаешь толлько один раз, а потом используешь до выхода из программы?


Для наиболее критичных запросов создается глобальный объект ODBCRecordset, туда заливается текст параметрического запроса, и объект живет до конца сессии.
Иногда то же решение применяется в некоторых формах, и объект живет пока жива форма.
В некритичных случаях все делается как Бог на душу положит, в т.ч. даже через класс-эмулятор Радуги, т.к. лениво переписывать старые участки кода в некритичных участках.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #15 - 17. Августа 2006 :: 11:49
Печать  
Цитата:
может стоит поинтересоваться у автора о версии 1С++?


Когда начинал писать тему была 1.8.1.6, сейчас перешел на 2.0.2.2
Вроде постабильнее, но все равно пару раз уже зависание было


Цитата:
Ты, кстати, попробуй посмотреть на проблему шире.

Даже не знаю, что может быть шире. 1С-овская база локальная, внешняя DBF-ная тоже лежит локально
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #16 - 19. Августа 2006 :: 10:11
Печать  
es3000 писал(а) 17. Августа 2006 :: 11:49:
1С-овская база локальная, внешняя DBF-ная тоже лежит локально


OOPSSS....
Сорри, не заметил сразу.  Смущённый
Прошу мою предыдущую мессагу при анализе не учитывать.
В моем случае ДБФами и близко не пахнет, все на СиКвеЛе
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #17 - 19. Августа 2006 :: 12:18
Печать  
ну я могу повторить совет из FAQ - обновить драйвер DBF...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Зависают запросы через ODBCRecordset
Ответ #18 - 21. Августа 2006 :: 11:23
Печать  
Да у меня стоит на компе Visual Foxpro 9.0, по идее драйвер должен быть нормальным
  
Наверх
ICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зависают запросы через ODBCRecordset
Ответ #19 - 21. Августа 2006 :: 11:25
Печать  
es3000 писал(а) 21. Августа 2006 :: 11:23:
Да у меня стоит на компе Visual Foxpro 9.0, по идее драйвер должен быть нормальным

вот его как раз вроде и не рекомендуют использовать разработчики 1С++
почитай ФАК, там четко рекомендуют какой драйвер нужно юзать...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать