Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

приложение зависает при обращении к Firebird. что делать помогите   Найти похожие ветки 

 
Tepex ©   (2008-11-05 14:29) [0]

Доброго времени суток всем. Проблема в следующем есть сервер firebird и к нему подключаются клиенты и бывает так что иногда обращаешься к записи чтобы ее считать и приложение зависает. В чем может быть проблема? может быть другие пользователи обращаются к записям и блокируют их?


 
Sergey13 ©   (2008-11-05 14:40) [1]

Иногда и хуже бывает. На все свои причины при своих условиях.


 
Tepex ©   (2008-11-05 15:05) [2]


> Иногда и хуже бывает. На все свои причины при своих условиях.

что ты этим хотел сказать?


 
Sergey13 ©   (2008-11-05 15:28) [3]

А что ты хотел сказать своим постом? Что-то, где-то, когда-то работает не так как хочется?


 
Правильный$Вася   (2008-11-05 15:35) [4]

> иногда обращаешься к записи чтобы ее считать и приложение зависает
код давай


 
Sergey13 ©   (2008-11-05 15:48) [5]

> [4] Правильный$Вася   (05.11.08 15:35)
> код давай

Может и не в коде дело, а в том, например, что сервер это "сервер" и по совместительству рабочая машина какого нибудь геймера. 8-)


 
PEAKTOP ©   (2008-11-05 16:58) [6]

> Sergey13 ©   (05.11.08 15:48) [5]
> Может и не в коде дело, а в том, например, что сервер это "сервер" и по совместительству рабочая машина какого нибудь геймера. 8-)


Ставлю 80% на параметры транзакции INSERT и еще 15% на сборку мусора SWEEP (если подключение происходит в 2 часа ночи и это единственный клиент в данный момент времени).


 
Tepex ©   (2008-11-05 23:18) [7]

Вообщем есть программа написанная на Delphi исходников нет поэтому не могу посмотреть что там происохдит, т.е является черным ящиком, она работает с БД, и есть обработка в 1С при помощи которой выгружаются данные которые создаются программкой на Delphi. Обработка из 1С как я понял подключается к базе данных через COM объект и использует ADO. Подключение происходит нормально, выгрузка данных, происходит нормально, но иногда после закрытия обработки и вновь ее открытия и запуска зависает, и не работает не nowait, не timeout которые установлены. Может ли быть так что клиенты из под Delphi приложения блокируют таблицы и можно ли их как то разблокировать?
P.S клиентов 10.
консультации по 1С не стоит давать я могу спросить и на другом форуме.
Интересует ответы только по поводу FireBird и ADO компонент


 
Сергей М. ©   (2008-11-06 08:27) [8]


> есть программа написанная на Delphi исходников нет


> Обработка из 1С как я понял


Хм ..
К разработке Делфи-приложения ты не имеешь отношения, 1С-обработку тоже не ты писал .. Возникает резонный вопрос - какое отношение к программингу вообще ты имеешь ? Т.е. даже если причина "беды" будет локализована, как ты сможешь повлиять на ее устранение ?


 
Сергей М. ©   (2008-11-06 08:34) [9]


> обработка в 1С при помощи которой выгружаются данные


Куда выгружаются ?


 
Tepex ©   (2008-11-06 09:17) [10]


> Хм ..
> К разработке Делфи-приложения ты не имеешь отношения, 1С-
> обработку тоже не ты писал .. Возникает резонный вопрос
> - какое отношение к программингу вообще ты имеешь ? Т.е.
>  даже если причина "беды" будет локализована, как ты сможешь
> повлиять на ее устранение ?


Отношение к программированию я имею самое прямое. И как я буду влиять на устранение проблемы это тоже как бы мое дело.
Данные выгружаются в из базы данных firebird в базу данных 1С.
Строка соединения формируется следующим образом:
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "driver={Firebird/InterBase(r) driver};    |server=" + выбСервер + ";
  |uid=" + выбПользователь + ";                 |pwd=" + выбПароль + ";      |database=" + выбСервер   + ":" +выбПутьКБазе+ ";               |READONLY=1;
  |NOWAIT =1;
  |CursorType = ctForward-only;";
Соединение.ConnectionTimeOut = выбВремяОжидания;
Соединение.CursorLocation = "ltReadOnly";
Соединение.Open();


 
Tepex ©   (2008-11-06 09:38) [11]


> > Хм ..
> > К разработке Делфи-приложения ты не имеешь отношения,
> 1С-
> > обработку тоже не ты писал .. Возникает резонный вопрос
>
> > - какое отношение к программингу вообще ты имеешь ? Т.
> е.
> >  даже если причина "беды" будет локализована, как ты сможешь
>
> > повлиять на ее устранение ?
>
>
> Отношение к программированию я имею самое прямое. И как
> я буду влиять на устранение проблемы это тоже как бы мое
> дело.

от вас просто хочется услышать советов, а не нравоучений Господа


 
Сергей М. ©   (2008-11-06 09:48) [12]

Причем здесь "нравоучения" ?

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

Теперь по сути.

Что показывает отладчик при пошаговой трассировке кода 1С-обработки ?
На какой конкретно строчке происходит "вис" ?

Судя по


> обращаешься к записи чтобы ее считать и приложение зависает


приведенный тобой код не имеет отношения к проблеме - в нем нет ни намека на работу с НД и транзакциями ..


 
Tepex ©   (2008-11-06 10:03) [13]

Пока Не ТаблицаБазы.EOF() Цикл  
 
СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").Value,"ЧГ=") + ",";
 
ТаблицаБазы.MoveNext();
 
КонецЦикла;


вообщем при получении данных из поля "orderid" обработка зависает и дальше ничего сделать не могу, приходится убивать процесс в диспетчере. Может быть с настройками самого firebird какие то проблемы или с подключением?


 
Сергей М. ©   (2008-11-06 10:21) [14]

А где у тебя настройка читающей транзакции и управление ей ?


 
Tepex ©   (2008-11-06 10:43) [15]

СтрокаСЗаявками = "";
Для Каждого СтрокаИзСпискаЗаявок Из СписокЗаявок Цикл
Если НЕ СтрокаИзСпискаЗаявок.Заявка.ПометкаУдаления Тогда
СтрокаСЗаявками = СтрокаСЗаявками + "cast(""+ ВРег(СокрЛП(СтрокаИзСпискаЗаявок.Заявка.Номер))+"" as varchar(32)),";
КонецЕсли;
КонецЦикла;

ТекстЗапросаИДЗаявок = "select * from orders where agreementno in (" + СтрокаСЗаявками + ")";

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "driver={Firebird/InterBase(r) 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();
 
КонецЦикла;


Ну вообщем вот так вот все и формируется.


 
Sergey13 ©   (2008-11-06 10:51) [16]

> [7] Tepex ©   (05.11.08 23:18)
> но иногда после закрытия обработки и вновь ее открытия и
> запуска зависает, и не работает не nowait, не timeout которые
> установлены.

Закрытие и открытие имеется в виду перезапуск приложения или отдельной формы приложения? Может чего не так инициализируется?


 
Tepex ©   (2008-11-06 10:58) [17]


> > [7] Tepex ©   (05.11.08 23:18)
> > но иногда после закрытия обработки и вновь ее открытия
> и
> > запуска зависает, и не работает не nowait, не timeout
> которые
> > установлены.
>
> Закрытие и открытие имеется в виду перезапуск приложения
> или отдельной формы приложения? Может чего не так инициализируется?
>


Просто открываешь в 1С обработку, закрываешь обработку(не саму 1С) и снова через файл->открыть, открываешь обработку и запускаешь ее после это 1С виснет.


 
Sergey13 ©   (2008-11-06 11:11) [18]

> [17] Tepex ©   (06.11.08 10:58)
> закрываешь обработку(не саму 1С)

А если "саму 1С" закрыть/открыть, то все нормально? Значит что-то не до конца прибили, ИМХО.


 
sniknik ©   (2008-11-06 11:16) [19]

странно что и в первый раз то работает...
не знаю как 1С так вообще работает, и зависит ли описанное от этого, но вот тут ошибка
> Соединение.CursorLocation = "ltReadOnly";

(автору кода не составит груда заглянут в доку и исправить)


 
Tepex ©   (2008-11-06 11:17) [20]

[18] Закрытие самой 1С помогает, но не всегда. Просто когда закрываешь обработку все переменные обнулются и становятся = неопределено, поэтому связь с ком объектом разрывается и он тоже убивается. в чем тогда может быть причина? ИМХО


 
sniknik ©   (2008-11-06 11:19) [21]

кстати я бы и это посчитал бы глюком, правда это не всегда "смертельно", от объема зависит, но всегда тормозно
> СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").Value,"ЧГ=") + ",";


 
Tepex ©   (2008-11-06 11:20) [22]

[19] Ну убрал, толку не стало от этого вооще повисла обработка при первом запуске. Если я правильно понимаю то Соединение.CursorLocation = "ltReadOnly"; Это тоже самое что и в делфи ADOConnection.CursorLocation  = "ltReadOnly"; Или может я ошибаюсь?


 
sniknik ©   (2008-11-06 11:22) [23]

> Это тоже самое что и в делфи ADOConnection.CursorLocation  = "ltReadOnly";
практически да, и дельфи это даже скомпилировать не даст.... насколько пинимаю.


 
Tepex ©   (2008-11-06 11:23) [24]


> кстати я бы и это посчитал бы глюком, правда это не всегда
> "смертельно", от объема зависит, но всегда тормозно
> > СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").
> Value,"ЧГ=") + ",";

И как надо написать правильнее?


 
Tepex ©   (2008-11-06 11:28) [25]

[23] Извени перепутал конечно это чушь. Просто сейчас под рукой нет Делфи


 
sniknik ©   (2008-11-06 11:30) [26]

> И как надо написать правильнее?
смотря для чего/что делается, если нужна именно строка то память обычно правильно выделять под неё полностью, и куски "вкопировать"  на места. а то что есть будет черезчур часто перераспределять память под строку. что и приведет к тормозам, если же строка превысит какой то объем (теоретически 2гига но практически меньше) то к нехватке памяти и/или глюку.


 
sniknik ©   (2008-11-06 11:34) [27]

> Извени перепутал конечно это чушь.
тогда вопрос... а что именно мы тут обсуждаем? если приведённый код не рабочий, приведён "по памяти" и является чушью... как именно ты хочешь найти ошибку.

это все одно что для ремонта одного авто в авто мастерскую пригнать другое, но говорить все таки про первое (и главное ожидать, что отремонтируют именно его)...


 
Tepex ©   (2008-11-06 11:40) [28]

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


 
sniknik ©   (2008-11-06 11:46) [29]

ну так, если там допущена такая ошибка... то нужно пересматривать весь код, очевидно писалось без  понимания процесса.


 
Tepex ©   (2008-11-06 11:53) [30]

[29] Пересматривал код весь процесс проходит нормально, а вот в куске который я написал происходит зависание системы. может проблема в настройке самой СУБД? Или программа написанная на Делфи блокирует таблицы в чем проблема может быть?


 
Сергей М. ©   (2008-11-06 11:54) [31]


> Tepex ©   (06.11.08 11:40) [28]


А что мешает отказаться от доступа к базе через ADO непосредственно в обработке в пользу доступа через дельфийские компоненты прямого доступа в 1С-надстройке ?


 
Сергей М. ©   (2008-11-06 12:07) [32]


> Tepex

http://delphi-faq.zoxt.net/363.htm


 
sniknik ©   (2008-11-06 12:08) [33]

> Пересматривал код весь процесс проходит нормально, а вот в куске который я написал происходит зависание системы.
ну да...

st:=  StringList.Text;
вот кусок в котором процесс (передача текста в переменную) проходит нормально.

после гденибудь в другом месте делаем StringList.Free, тоже что характерно совершенно нормально.

потом пытаемся выполнить первый "нормальный" кусок второй раз...


 
sniknik ©   (2008-11-06 12:10) [34]

> http://delphi-faq.zoxt.net/363.htm
это немного не то, это к к рекордсету... лучше обратиться к документации.


 
Сергей М. ©   (2008-11-06 12:31) [35]


> не то, это к к рекордсету


Судя по авторскому


> обращаешься к записи чтобы ее считать и приложение зависает


проблемы как раз при работе с НД


 
Tepex ©   (2008-11-06 13:59) [36]

[35] Извените конечно но что значит НД?


 
Сергей М. ©   (2008-11-06 14:06) [37]

НД = Набор Данных


 
Tepex ©   (2008-11-06 14:12) [38]

Ну так где копать надо начинать Уважаемые?


 
Сергей М. ©   (2008-11-06 14:36) [39]

[32] проштудировал ?


 
Tepex ©   (2008-11-06 14:59) [40]

Да вроде все понятно. Ничего нового не нашел.



Страницы: 1 2 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.013 c
2-1245326405
Pavel
2009-06-18 16:00
2009.08.16
Изменение размеров изображения


2-1245142539
vitalik200888
2009-06-16 12:55
2009.08.16
печать из delphi.


15-1245325093
Дмитрий С
2009-06-18 15:38
2009.08.16
iphone в качестве модема


15-1243524349
Zeqfreed
2009-05-28 19:25
2009.08.16
Mysql. Оптимизация выборки


15-1244775180
TUser
2009-06-12 06:53
2009.08.16
Является ли Земля небесным телом?