Конференция "Базы" » приложение зависает при обращении к Firebird. что делать помогите [D7, IB6.x]
 
  • Tepex © (05.11.08 14:29) [0]
    Доброго времени суток всем. Проблема в следующем есть сервер firebird и к нему подключаются клиенты и бывает так что иногда обращаешься к записи чтобы ее считать и приложение зависает. В чем может быть проблема? может быть другие пользователи обращаются к записям и блокируют их?
  • Sergey13 © (05.11.08 14:40) [1]
    Иногда и хуже бывает. На все свои причины при своих условиях.
  • Tepex © (05.11.08 15:05) [2]

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

    что ты этим хотел сказать?
  • Sergey13 © (05.11.08 15:28) [3]
    А что ты хотел сказать своим постом? Что-то, где-то, когда-то работает не так как хочется?
  • Правильный$Вася (05.11.08 15:35) [4]
    > иногда обращаешься к записи чтобы ее считать и приложение зависает
    код давай
  • Sergey13 © (05.11.08 15:48) [5]
    > [4] Правильный$Вася   (05.11.08 15:35)
    > код давай

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


    Ставлю 80% на параметры транзакции INSERT и еще 15% на сборку мусора SWEEP (если подключение происходит в 2 часа ночи и это единственный клиент в данный момент времени).
  • Tepex © (05.11.08 23:18) [7]
    Вообщем есть программа написанная на Delphi исходников нет поэтому не могу посмотреть что там происохдит, т.е является черным ящиком, она работает с БД, и есть обработка в 1С при помощи которой выгружаются данные которые создаются программкой на Delphi. Обработка из 1С как я понял подключается к базе данных через COM объект и использует ADO. Подключение происходит нормально, выгрузка данных, происходит нормально, но иногда после закрытия обработки и вновь ее открытия и запуска зависает, и не работает не nowait, не timeout которые установлены. Может ли быть так что клиенты из под Delphi приложения блокируют таблицы и можно ли их как то разблокировать?
    P.S клиентов 10.
    консультации по 1С не стоит давать я могу спросить и на другом форуме.
    Интересует ответы только по поводу FireBird и ADO компонент
  • Сергей М. © (06.11.08 08:27) [8]

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


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


    Хм ..
    К разработке Делфи-приложения ты не имеешь отношения, 1С-обработку тоже не ты писал .. Возникает резонный вопрос - какое отношение к программингу вообще ты имеешь ? Т.е. даже если причина "беды" будет локализована, как ты сможешь повлиять на ее устранение ?
  • Сергей М. © (06.11.08 08:34) [9]

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


    Куда выгружаются ?
  • Tepex © (06.11.08 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 © (06.11.08 09:38) [11]

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

    от вас просто хочется услышать советов, а не нравоучений Господа
  • Сергей М. © (06.11.08 09:48) [12]
    Причем здесь "нравоучения" ?

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

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

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

    Судя по


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


    приведенный тобой код не имеет отношения к проблеме - в нем нет ни намека на работу с НД и транзакциями ..
  • Tepex © (06.11.08 10:03) [13]
    Пока Не ТаблицаБазы.EOF() Цикл  
     
    СтрокаИДЗаявок = СтрокаИДЗаявок + Формат(ТаблицаБазы.fields("orderid").Value,"ЧГ=") + ",";
     
    ТаблицаБазы.MoveNext();
     
    КонецЦикла;



    вообщем при получении данных из поля "orderid" обработка зависает и дальше ничего сделать не могу, приходится убивать процесс в диспетчере. Может быть с настройками самого firebird какие то проблемы или с подключением?
  • Сергей М. © (06.11.08 10:21) [14]
    А где у тебя настройка читающей транзакции и управление ей ?
  • Tepex © (06.11.08 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 © (06.11.08 10:51) [16]
    > [7] Tepex ©   (05.11.08 23:18)
    > но иногда после закрытия обработки и вновь ее открытия и
    > запуска зависает, и не работает не nowait, не timeout которые
    > установлены.

    Закрытие и открытие имеется в виду перезапуск приложения или отдельной формы приложения? Может чего не так инициализируется?
  • Tepex © (06.11.08 10:58) [17]

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


    Просто открываешь в 1С обработку, закрываешь обработку(не саму 1С) и снова через файл->открыть, открываешь обработку и запускаешь ее после это 1С виснет.
  • Sergey13 © (06.11.08 11:11) [18]
    > [17] Tepex ©   (06.11.08 10:58)
    > закрываешь обработку(не саму 1С)

    А если "саму 1С" закрыть/открыть, то все нормально? Значит что-то не до конца прибили, ИМХО.
  • sniknik © (06.11.08 11:16) [19]
    странно что и в первый раз то работает...
    не знаю как 1С так вообще работает, и зависит ли описанное от этого, но вот тут ошибка
    >
    Соединение.CursorLocation = "ltReadOnly";



    (автору кода не составит груда заглянут в доку и исправить)
 
Конференция "Базы" » приложение зависает при обращении к Firebird. что делать помогите [D7, IB6.x]
Есть новые Нет новых   [134477   +39][b:0][p:0.002]