Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.058 c
14-1079598565
Nikolay M.
2004-03-18 11:29
2004.04.11
Вакансии IT и не только


1-1080194976
AndB
2004-03-25 09:09
2004.04.11
hInstance для DLL


4-1079082244
saska
2004-03-12 12:04
2004.04.11
LoadMenu


14-1079270115
Nick-From
2004-03-14 16:15
2004.04.11
Криминал


9-1065678501
Master™Jedi
2003-10-09 09:48
2004.04.11
DelphiX и 3D