Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

приложение зависает при обращении к 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.009 c
2-1245516025
Nikfel
2009-06-20 20:40
2009.08.16
Как сделать прозрачным главное меню пуск?


4-1214376707
SVD
2008-06-25 10:51
2009.08.16
Характеристики сетевых адаптеров через WinPCap


4-1214228936
KIRAT
2008-06-23 17:48
2009.08.16
Вторая копия программы


3-1225978813
Aristarh
2008-11-06 16:40
2009.08.16
Обработка подключения когда недоступен удаленный сервер БД.


2-1244993614
Gumz
2009-06-14 19:33
2009.08.16
Преобразование координат пикселей в градусы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский