Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизRefresh данных в Interbase Найти похожие ветки
← →
vi007 (2004-03-17 06:53) [0]Приветствую вас, Гуру делфи!
Проблема такая.
На сервере прога ведет лог в базе IB.
Мне же надо отслеживать(только читать, без вмешательства) последние пять - шесть записей в этой таблице.
Данные обновляются каждую секунду.
Использовал IBDatabase, IBTransaction, IBDataset.
Подключаюсь, вижу данные, а как сделать обновления, без переподключения.
← →
Zacho © (2004-03-17 07:22) [1]Close/Open
И если данные модифицируются в другой транзакции, то уровень изоляции читающей транзакции должен быть ReadCommitted
← →
vi007 (2004-03-17 07:36) [2]и что это мне даст?
в таблице несколько тысяч записей, ончитает их только секунд пять...
← →
Zacho © (2004-03-17 07:51) [3]Ну и выбирай в запросе только "последние" записи. По какому критерию отбирать эти "последние" - тебе лучше знать, ты структуру своей таблицы знаешь, а я нет. Хочешь - приведи структуру таблицы, тогда может и конкретный запрос тебе напишем.
Еще вариант: если в таблице есть поле с датой/временем записи (а т.к. это лог, то скорее всего есть), то создать индекс на это поле и выбирать таблицу целиком с ORDER BY по убыванию по этому полю. Если после выполнения запроса не фетчить все записи - будет быстро.
← →
vi007 (2004-03-17 08:01) [4]Так, ближе к телу.
В таблице есть поле N которое есть счетчик, почти каждую секунду обновляется.
таблица называется logtab.
Если не трудно напишите, какие настройки должны быть у IBDatabase, IBTransaction, IBDataset.
Фенкс.
← →
Zacho © (2004-03-17 08:17) [5]Для конкретного вопроса надое еще "ближе к телу".
N - счетчик чего ? Порядковый номер записи что-ли ?
Обновляется - это как ? Вставляются новые записи с новыми значениями N или модифицыруются существующие ? Все-таки какой конкретно результат надо получить ?
> Если не трудно напишите, какие настройки должны быть у IBDatabase,
> IBTransaction, IBDataset.
Трудно. Поскольку всех возможных комбинаций настроек довольно много, а с телепатией - проблемы. Напиши что конкретно тебя интересует - ответим.
И почитай http://www.ibase.ru/devinfo/ibtrans.htm и http://www.ibase.ru/devinfo/ibxtrans.htm , а так же посмотри примеры в ($DELPHI)\Demos\Db\IBMastApp\ Ну и естественно, хелп по IBX.
← →
vi007 (2004-03-17 09:00) [6]N - порядковый номер записи.
обновляется добовлением новой записи.
Примерно так(на конвеере идут детали, как только деталь подходит к датчику он считывает штрих код и в добавляет запись таблицу с новым порядковым номером, отоброжая это на своей форме)Это делает сторонняя прога, мне же надо написать прогу, которая также сможет отразить добавление данных в таблицу.
← →
Ильш © (2004-03-17 09:09) [7]Зная N максимальное можно отсечь как раз некое количество последних записей. Тут тока SQL спасет.
← →
vi007 (2004-03-17 09:23) [8]а на SQL запрос с селектом как сделать на последние записи?
← →
Кщд (2004-03-17 09:30) [9]vi007 (17.03.04 09:23) [8]
IB какой?
← →
Deniz © (2004-03-17 09:32) [10]select first 5 * from Table order by n desc
← →
vi007 (2004-03-17 09:37) [11]IB кажись 6
← →
Deniz © (2004-03-17 09:38) [12]Deniz © (17.03.04 09:32) [10]
Это было для FB1.5
Для всех IB ХП типаdeclare variable i integer;
i = 0;
for select ... from Table order by n desc into :param1 ... do
begin
i = i+1;
if (i <=5) then suspend; else exit;
end;
Но можно и запросом типа:select ... from table t1
where 5<=
(select count(t2.n) from table t2 where t2.n > t1.n)
order by n desc
Но ХП будет быстрее
← →
Zacho © (2004-03-17 09:43) [13]
> vi007 (17.03.04 09:23) [8]
Универсально, для любой версии IB/клонов - написать ХП типа:CREATE PROCEDURE F_HEAD_S (
NUM INTEGER)
RETURNS ( .. )
AS
BEGIN
FOR SELECT ..
FROM LOGTAB
ORDER BY N DESC
INTO ..
DO
BEGIN
IF (NUM=0) THEN EXIT;
SUSPEND;
NUM=NUM-1;
END
END
Здесь NUM - кол-во требуемых записей.
← →
vi007 (2004-03-17 09:43) [14]declare variable i integer;
i = 0;
for select ...
че-то не понял, энто где должно быть?
(Я не селен в IB)
← →
DenK_vrtz © (2004-03-17 09:51) [15]Свои пять копеек по вопросу.
Опять же, как вариант.
Если исходная таблица большая и общий запрос выполняется относительно долго, имеет смысл создать дополнительную таблицу, в которой будут храниться текущие последние 5-6(в зависимости от требований) записей.
В итоге получаем чуть большие затраты времени при вставке новой записи, зато запрос 5-6 записей выполняется мгновенно.
← →
Ильш © (2004-03-17 09:53) [16]Варианты для vi007 :
1. надо то было только немного подумать
2. Yandex
3. Rambler
:))))))))
← →
Zacho © (2004-03-17 09:55) [17]
> vi007 (17.03.04 09:43) [14]
> че-то не понял, энто где должно быть?
> (Я не селен в IB)
Тогда учиться, учиться и учиться !
Изучить Data Definition Guide и Language Reference - обязательно.
Так же сильно рекомендую статьи на http://www.ibase.ru/develop.htm и книгу "Мир Interbase" Востриков, Ковязин.
← →
vi007 (2004-03-17 09:55) [18]DenK_vrtz ©
Не канает, так-как итак теряется время на обработку в первой проге.
деталь подошла к считывателю, и рабочий должен видеть данные по этой детали, задержка более 1 сек. не приемлима.
Таките вот пироги :(
← →
Ильш © (2004-03-17 09:57) [19]
> Не канает, так-как итак
ни фига себе потеря времени. на вставку то записи. Да там миллисекунды. Если больше то что-то не так сделано.
← →
vi007 (2004-03-17 11:19) [20]А как методом SQL , выбрать последние нескольео записей?
← →
Ильш © (2004-03-17 12:40) [21]а вот это
Deniz © (17.03.04 09:38) [12]
разве не ответ????
там же все написано!!!!
← →
vi007 (2004-03-17 13:08) [22]Там используется вторая таблица, а мне надо без нё
← →
Fay © (2004-03-17 13:23) [23]Блин!!!!!!!!!!!!
Поставь себе FB и используй FIRST!
← →
vi007 (2004-03-17 13:28) [24]
> Fay © (17.03.04 13:23) [23]
> Блин!!!!!!!!!!!!
> Поставь себе FB и используй FIRST!
А что это такое и с чем его едят?
← →
kaif © (2004-03-17 13:45) [25]vi007 (17.03.04 13:28) [24]
> Fay © (17.03.04 13:23) [23]
> Блин!!!!!!!!!!!!
> Поставь себе FB и используй FIRST!
А что это такое и с чем его едят?
когда делаешь запрос
select * from Table order by n desc
создается набор, возвращающий всю таблицу, упорядоченную по убыванию поля n. Первый совет
Zacho © (17.03.04 07:51) [3]
Если после выполнения запроса не фетчить все записи - будет быстро.
состоял в том, что клиентское приложение может не считывать все записи из полученного набора, а столько записей, сколько нужно для счастливой жизни. Для этого достаточно каждую секунду закрывать/открывать запрос в IBDataSet и отображать его в DBGrid, в котором аккурат помещать 5 строк (если Height подобрать в 100 пиксел экрана).
Если поставить Firebird1.5, то можно вообще ограничить получаемый набор первыми 5-ю строками, что, возможно, сэкономит ресурсы сервера (в чем я лично не уверен). Для этого диалект SQL Firebird1.5 позволяет использовать слово FIRST, что показал
Deniz © (17.03.04 09:32) [10]
select first 5 * from Table order by n desc
А вообще мне не очень нравится, что рабочий должен на экран компьютера смотреть, а не на свой станок... Что за завод такой странный?
← →
Deniz © (2004-03-17 14:11) [26]> vi007 (17.03.04 13:08) [22]
> Там используется вторая таблица, а мне надо без нё
А где там вторая таблица?
> kaif © (17.03.04 13:45) [25]
> А вообще мне не очень нравится, что рабочий должен на экран компьютера смотреть, а не на свой станок... Что за завод такой странный?
"Новые технологии в жизнь"
И вообще, мне кажется нас разводят 8-)
← →
vi007 (2004-03-17 14:27) [27]
> kaif © (17.03.04 13:45) [25]
Большой фенкс!
Наконец, хоть кто-то разяснил.
Вроде работает! поставил Firebird1.5 , делаю селект пяти первых, но сортировка идет с первой записи.
Как я понял он пересчитывает до конца, перестраивает наоборот, берет первые 5 записей.
Тока долго сильно! обновляет 3 сек. (может не правильно что-то?)
Может можно как либо поймать на сервере добовление записи в таблицу?
← →
Domkrat (2004-03-17 15:52) [28]По полю желательно иметь индекс.. и в данном случае обратный
← →
Zacho © (2004-03-17 18:21) [29]
> vi007 (17.03.04 14:27) [27]
Блин !!! Ты хоть что-нибудь по SQL читал ???
См. Zacho © (17.03.04 09:55) [17] - там приведено то, что ты обязан изучить. Или плюнь на это, и ищи работу не связаннную с РСУБД вообще и с IB в частности.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.042 c