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

Вниз

Проблема с FB 1.5 и IBX   Найти похожие ветки 

 
Zoostal   (2005-11-11 12:05) [0]

Здравствуйте!

У меня такая проблема. В программе создается 3 потока - №1 постоянно смотрит базу на предмет новых заданий, №2 получает задание от №1, выполняет его и пытается с помощью потока №3 положить результат в базу.

В общем с базой работают потоки №1 и №3. При этом №1 опрашивает базу в цикле с определенной (частой переодичностью), а поток №3 выполняет запись в базу редко (примерно раз в минуту). В обоих потоках идет динамическое создание подключения к БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery.

Проблема заключается в том что когда поток №3 начинает что-то класть в базу то все встает. То есть на строчке, например,  

PJExTable.Open;

дальше код не исполняется. Если на время записи потоком №3 в базу данных поток №1 остановить с помощью Suspend то вроде все срабатывает, но это не вариант.

Как решить эту проблему ? Может быть есть какая-то настройка ? что-то типа монопольного доступа внутри приложения или что-то еще...


 
Курдль ©   (2005-11-11 12:24) [1]


> Проблема заключается в том что когда поток №3 начинает что-
> то класть в базу то все встает. То есть на строчке, например,
> PJExTable.Open;


Во-первых - ничего никогда не "класть в базу" с помощью ...Table.Open;

А конечная-то задача какая? Что-то мне не ндравится При этом №1 опрашивает базу в цикле с определенной (частой переодичностью)


 
Noosfert   (2005-11-11 12:30) [2]

Это был пример на чем все встает. При работе  с запросами тоже встает.


 
Digitman ©   (2005-11-11 12:31) [3]


> В обоих потоках идет динамическое создание подключения к
> БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery


а TIBTransaction ?


 
Noosfert   (2005-11-11 12:33) [4]

Digitman

и TIBTransaction конечно тоже. Вот с такими параметрами

PJTrans.Params.Add("read_committed");
PJTrans.Params.Add("rec_version");
PJTrans.Params.Add("nowait");


 
Курдль ©   (2005-11-11 12:39) [5]


> Zoostal   (11.11.05 12:05)


Может быть все-таки объясните, зачем кому-то на клиенте периодически опрашивать базу?
Мне в жизни такое не приходило в голову, а вдруг я что-то важное упустил?  :-(


 
Noosfert   (2005-11-11 12:43) [6]

в базе есть таблица ExTable, которая отвечает за то что один клиент в неё кладет задание, а другой постоянно смотрит появились ли они эти задания, забирает их, выполняет и возвращает через базу результат.


 
Курдль ©   (2005-11-11 12:55) [7]

В Вашем описании "клиент" - это человек?
В IB/FB есть инструментарий системных событий? Если нет, то не применить ли трехзвенку, где сервер приложений будет оповещать нужного клиента о наступлении события типа "пришло задание".


 
Noosfert   (2005-11-11 13:02) [8]

Всем спасибо за советы и участие, проблема наконец разрешилась. База не должна быть локальной оказывается. Доступ через localhost спас :)


 
Digitman ©   (2005-11-11 13:02) [9]


> Noosfert


3-хзвенка тебе нужна.

IBEvents - плохое решение


 
Курдль ©   (2005-11-11 13:03) [10]


> Noosfert   (11.11.05 13:02) [8]
> проблема наконец разрешилась.


Очень сильно в этом сомневаюсь :-(



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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
6-1127311914
Duk_
2005-09-21 18:11
2006.01.01
Почта


2-1134650804
fast2
2005-12-15 15:46
2006.01.01
Как создать директорию вместе с родительскими директориями?


8-1121459577
ronyn
2005-07-16 00:32
2006.01.01
DS Pack


2-1134651379
fast2
2005-12-15 15:56
2006.01.01
Как можна сделать так, чтоб нельзя было бы редактировать Edit


4-1130407361
G-h-o-s-t
2005-10-27 14:02
2006.01.01
Как сделать видимым элемент управления