![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Refresh данных в Interbase [D6]
vi007 © (2004-03-17 06:53:00)Приветствую вас, Гуру делфи!
Проблема такая.
На сервере прога ведет лог в базе IB.
Мне же надо отслеживать(только читать, без вмешательства) последние пять - шесть записей в этой таблице.
Данные обновляются каждую секунду.
Использовал IBDatabase, IBTransaction, IBDataset.
Подключаюсь, вижу данные, а как сделать обновления, без переподключения.
Zacho (2004-03-17 18:21:00) [1]
> vi007 (17.03.04 14:27) [27]
Блин !!! Ты хоть что-нибудь по SQL читал ???
См. Zacho © (17.03.04 09:55) [17] - там приведено то, что ты обязанизучить. Или плюнь на это, и ищи работу не связаннную с РСУБД вообще и с IB в частности.
Domkrat (2004-03-17 15:52:00) [2]По полю желательно иметь индекс.. и в данном случае обратный
vi007 (2004-03-17 14:27:00) [3]
> kaif © (17.03.04 13:45) [25]
Большой фенкс!
Наконец, хоть кто-то разяснил.
Вроде работает! поставил Firebird1.5 , делаю селект пяти первых, но сортировка идет с первой записи.
Как я понял он пересчитывает до конца, перестраивает наоборот, берет первые 5 записей.
Тока долго сильно! обновляет 3 сек. (может не правильно что-то?)
Может можно как либо поймать на сервере добовление записи в таблицу?
Deniz (2004-03-17 14:11:00) [4]> vi007 (17.03.04 13:08) [22]
> Там используется вторая таблица, а мне надо без нё
А где там вторая таблица?
> kaif © (17.03.04 13:45) [25]
> А вообще мне не очень нравится, что рабочий должен на экран компьютера смотреть, а не на свой станок... Что за завод такой странный?
"Новые технологии в жизнь"
И вообще, мне кажется нас разводят 8-)
kaif (2004-03-17 13:45:00) [5]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
А вообще мне не очень нравится, что рабочий должен на экран компьютера смотреть, а не на свой станок... Что за завод такой странный?
vi007 (2004-03-17 13:28:00) [6]
> Fay © (17.03.04 13:23) [23]
> Блин!!!!!!!!!!!!
> Поставь себе FB и используй FIRST!
А что это такое и с чем его едят?
Fay (2004-03-17 13:23:00) [7]Блин!!!!!!!!!!!!
Поставь себе FB и используй FIRST!
vi007 (2004-03-17 13:08:00) [8]Там используется вторая таблица, а мне надо без нё
Ильш (2004-03-17 12:40:00) [9]а вот это
Deniz © (17.03.04 09:38) [12]
разве не ответ????
там же все написано!!!!
vi007 (2004-03-17 11:19:00) [10]А как методом SQL , выбрать последние нескольео записей?
Ильш (2004-03-17 09:57:00) [11]
> Не канает, так-как итак
ни фига себе потеря времени. на вставку то записи. Да там миллисекунды. Если больше то что-то не так сделано.
vi007 (2004-03-17 09:55:00) [12]DenK_vrtz ©
Не канает, так-как итак теряется время на обработку в первой проге.
деталь подошла к считывателю, и рабочий должен видеть данные по этой детали, задержка более 1 сек. не приемлима.
Таките вот пироги :(
Zacho (2004-03-17 09:55:00) [13]
> vi007 (17.03.04 09:43) [14]
> че-то не понял, энто где должно быть?
> (Я не селен в IB)
Тогда учиться, учиться и учиться !
Изучить Data Definition Guide и Language Reference - обязательно.
Так же сильно рекомендую статьи на http://www.ibase.ru/develop.htmи книгу "Мир Interbase" Востриков, Ковязин.
Ильш (2004-03-17 09:53:00) [14]Варианты для vi007 :
1. надо то было только немного подумать
2. Yandex
3. Rambler
:))))))))
DenK_vrtz (2004-03-17 09:51:00) [15]Свои пять копеек по вопросу.
Опять же, как вариант.
Если исходная таблица большая и общий запрос выполняется относительно долго, имеет смысл создать дополнительную таблицу, в которой будут храниться текущие последние 5-6(в зависимости от требований) записей.
В итоге получаем чуть большие затраты времени при вставке новой записи, зато запрос 5-6 записей выполняется мгновенно.
vi007 (2004-03-17 09:43:00) [16]declare variable i integer;
i = 0;
for select ...
че-то не понял, энто где должно быть?
(Я не селен в IB)
Zacho (2004-03-17 09:43:00) [17]
> 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 - кол-во требуемых записей.
Deniz (2004-03-17 09:38:00) [18]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
Но ХП будет быстрее
vi007 (2004-03-17 09:37:00) [19]IB кажись 6
Deniz (2004-03-17 09:32:00) [20]select first 5 * from Table order by n desc