Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-1081790482
Николай
2004-04-12 21:21
2004.04.11
Проблемы с созданием дистрибутива БД


3-1079084454
fatal
2004-03-12 12:40
2004.04.11
Table is full.


14-1079201990
lak-b
2004-03-13 21:19
2004.04.11
интересный вопрос


1-1082910623
neVIP.
2004-04-25 20:30
2004.04.11
String -> PChar


1-1082628607
alextov
2004-04-22 14:10
2004.04.11
Нужно запустить ХП в отдельном потоке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский