Главная страница
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.049 c
2-1134733361
Mishenka
2005-12-16 14:42
2006.01.01
Как удалить параметра из ini файла?


2-1134533880
Мария Тимошена
2005-12-14 07:18
2006.01.01
ListBox


1-1133429644
slaga
2005-12-01 12:34
2006.01.01
Какой софт использовать для проектирования объектов в Delphi.


2-1134450974
M@xim
2005-12-13 08:16
2006.01.01
Halcyon


6-1127160013
нарка
2005-09-20 00:00
2006.01.01
idtcpclient как получить информацию об удаленном хосте