Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Refresh данных в Interbase [D6]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо