-
Доброго времени суток всем. Проблема в следующем есть сервер firebird и к нему подключаются клиенты и бывает так что иногда обращаешься к записи чтобы ее считать и приложение зависает. В чем может быть проблема? может быть другие пользователи обращаются к записям и блокируют их?
-
Иногда и хуже бывает. На все свои причины при своих условиях.
-
> Иногда и хуже бывает. На все свои причины при своих условиях.
что ты этим хотел сказать?
-
А что ты хотел сказать своим постом? Что-то, где-то, когда-то работает не так как хочется?
-
> иногда обращаешься к записи чтобы ее считать и приложение зависает код давай
-
> [4] Правильный$Вася (05.11.08 15:35) > код давай
Может и не в коде дело, а в том, например, что сервер это "сервер" и по совместительству рабочая машина какого нибудь геймера. 8-)
-
> Sergey13 © (05.11.08 15:48) [5] > Может и не в коде дело, а в том, например, что сервер это "сервер" и по совместительству рабочая машина какого нибудь геймера. 8-)
Ставлю 80% на параметры транзакции INSERT и еще 15% на сборку мусора SWEEP (если подключение происходит в 2 часа ночи и это единственный клиент в данный момент времени).
-
Вообщем есть программа написанная на Delphi исходников нет поэтому не могу посмотреть что там происохдит, т.е является черным ящиком, она работает с БД, и есть обработка в 1С при помощи которой выгружаются данные которые создаются программкой на Delphi. Обработка из 1С как я понял подключается к базе данных через COM объект и использует ADO. Подключение происходит нормально, выгрузка данных, происходит нормально, но иногда после закрытия обработки и вновь ее открытия и запуска зависает, и не работает не nowait, не timeout которые установлены. Может ли быть так что клиенты из под Delphi приложения блокируют таблицы и можно ли их как то разблокировать? P.S клиентов 10. консультации по 1С не стоит давать я могу спросить и на другом форуме. Интересует ответы только по поводу FireBird и ADO компонент
-
> есть программа написанная на Delphi исходников нет
> Обработка из 1С как я понял
Хм .. К разработке Делфи-приложения ты не имеешь отношения, 1С-обработку тоже не ты писал .. Возникает резонный вопрос - какое отношение к программингу вообще ты имеешь ? Т.е. даже если причина "беды" будет локализована, как ты сможешь повлиять на ее устранение ?
-
> обработка в 1С при помощи которой выгружаются данные
Куда выгружаются ?
-
> Хм .. > К разработке Делфи-приложения ты не имеешь отношения, 1С- > обработку тоже не ты писал .. Возникает резонный вопрос > - какое отношение к программингу вообще ты имеешь ? Т.е. > даже если причина "беды" будет локализована, как ты сможешь > повлиять на ее устранение ?
Отношение к программированию я имею самое прямое. И как я буду влиять на устранение проблемы это тоже как бы мое дело. Данные выгружаются в из базы данных firebird в базу данных 1С. Строка соединения формируется следующим образом: Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "driver=; |server=" + выбСервер + ";
|uid=" + выбПользователь + "; |pwd=" + выбПароль + "; |database=" + выбСервер + ":" +выбПутьКБазе+ "; |READONLY=1;
|NOWAIT =1;
|CursorType = ctForward-only;";
Соединение.ConnectionTimeOut = выбВремяОжидания;
Соединение.CursorLocation = "ltReadOnly";
Соединение.Open();
-
> > Хм .. > > К разработке Делфи-приложения ты не имеешь отношения, > 1С- > > обработку тоже не ты писал .. Возникает резонный вопрос > > > - какое отношение к программингу вообще ты имеешь ? Т. > е. > > даже если причина "беды" будет локализована, как ты сможешь > > > повлиять на ее устранение ? > > > Отношение к программированию я имею самое прямое. И как > я буду влиять на устранение проблемы это тоже как бы мое > дело.
от вас просто хочется услышать советов, а не нравоучений Господа
-
Причем здесь "нравоучения" ?
Если обработку писал лично ты, то следовало бы сразу привести фрагмент кода, а не вводить в заблуждение фразой "как я понял" ..
Теперь по сути.
Что показывает отладчик при пошаговой трассировке кода 1С-обработки ? На какой конкретно строчке происходит "вис" ?
Судя по
> обращаешься к записи чтобы ее считать и приложение зависает
приведенный тобой код не имеет отношения к проблеме - в нем нет ни намека на работу с НД и транзакциями ..
-
Пока Не ТаблицаБазы.EOF() Цикл
СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").Value,"ЧГ=") + ",";
ТаблицаБазы.MoveNext();
КонецЦикла; вообщем при получении данных из поля "orderid" обработка зависает и дальше ничего сделать не могу, приходится убивать процесс в диспетчере. Может быть с настройками самого firebird какие то проблемы или с подключением?
-
А где у тебя настройка читающей транзакции и управление ей ?
-
СтрокаСЗаявками = "";
Для Каждого СтрокаИзСпискаЗаявок Из СписокЗаявок Цикл
Если НЕ СтрокаИзСпискаЗаявок.Заявка.ПометкаУдаления Тогда
СтрокаСЗаявками = СтрокаСЗаявками + "cast('\"+ ВРег(СокрЛП(СтрокаИзСпискаЗаявок.Заявка.Номер))+\"' as varchar(32)),";
КонецЕсли;
КонецЦикла;
ТекстЗапросаИДЗаявок = "select * from orders where agreementno in (" + СтрокаСЗаявками + ")";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "driver=;
|server=" + выбСервер + ";
|uid=" + выбПользователь + ";
|pwd=" + выбПароль + ";
|database=" + выбСервер + ":" + выбПутьКБазеАльтавин + ";
|READONLY=1;
|NOWAIT =1;
|CursorType = ctForward-only;";
Соединение.ConnectionTimeOut = выбВремяОжидания;
Соединение.CursorLocation = "ltReadOnly";
Соединение.Open();
ТаблицаБазы = Новый ComОбъект("ADODB.RecordSet");
ТаблицаБазы.Open(ТекстЗапросаИДЗаявок, Соединение);
СтрокаИДЗаявок = "";
Пока Не ТаблицаБазы.EOF() Цикл
СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").Value,"ЧГ=") + ",";
ТаблицаБазы.MoveNext();
КонецЦикла;
Ну вообщем вот так вот все и формируется.
-
> [7] Tepex © (05.11.08 23:18) > но иногда после закрытия обработки и вновь ее открытия и > запуска зависает, и не работает не nowait, не timeout которые > установлены.
Закрытие и открытие имеется в виду перезапуск приложения или отдельной формы приложения? Может чего не так инициализируется?
-
> > [7] Tepex © (05.11.08 23:18) > > но иногда после закрытия обработки и вновь ее открытия > и > > запуска зависает, и не работает не nowait, не timeout > которые > > установлены. > > Закрытие и открытие имеется в виду перезапуск приложения > или отдельной формы приложения? Может чего не так инициализируется? >
Просто открываешь в 1С обработку, закрываешь обработку(не саму 1С) и снова через файл->открыть, открываешь обработку и запускаешь ее после это 1С виснет.
-
> [17] Tepex © (06.11.08 10:58) > закрываешь обработку(не саму 1С)
А если "саму 1С" закрыть/открыть, то все нормально? Значит что-то не до конца прибили, ИМХО.
-
странно что и в первый раз то работает... не знаю как 1С так вообще работает, и зависит ли описанное от этого, но вот тут ошибка > Соединение.CursorLocation = "ltReadOnly"; (автору кода не составит груда заглянут в доку и исправить)
|