Форум: "Базы";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c