Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> организация таблицы-буфера, вырезать = прочитать + удалить 
V
    Опции темы
ksili
Дата 13.3.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



У меня в программе происходят события, информация о которых записывается в таблицу T_BUFFER. Периодически (по таймеру) этот буфер проверяется - не пустой ли? Если там что-то есть, надо взять самую старую запись и обработать это событие. Взять - то есть вырезать из этой таблицы. 
Получается, что между чтением из таблицы T_BUFFER первой записи и её удалением есть промежуток. Беда в том, что таких таймеров несколько. получается одну и ту же запись могут прочитать более одного обработчика.

Нельзя ли как-то вырезать запись из таблицы, т.е. одновременно с чтением удалить её?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 13.3.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



просто удаляй запись, а в событии BeforDelete считавый её поля
PM MAIL   Вверх
ksili
Дата 13.3.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Считывать данные в перед удалением получилось, но чё-то проблема с удалением первой (т.е. самой старой)записи. В тексте Query ругается насколько я понял на слово first:
Код

delete first 1 * from T_BUFFER order by ID_CALL

Получается, что first вместе с delete нельзя использовать? Как же тогда её удалить?

Это сообщение отредактировал(а) ksili - 13.3.2007, 12:24


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 13.3.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



а если так 
Код

delete from T_BUFFER where id in (selec first 1 id from T_BUFFER)

PM MAIL   Вверх
ksili
Дата 13.3.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Завтра попробую, сейчас негде


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ksili
Дата 14.3.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Да, так раБотает. Спасибо
Что интересно, в книге  Хелен Борри про Firebird я ни слова ни нашёл про ключевое слово IN, хотя говорят книга отличная. Может плохо искал?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 14.3.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



плохо искал  smile

Добавлено @ 13:11 
народ, всё время забываете помечать вопросы, как решённые (в заголовке темы)

Добавлено @ 13:12 
и сам подумай про это
Код

delete first 1 * from T_BUFFER order by ID_CALL


зачем order by, ты же одну запись выбираешь  smile 
PM MAIL   Вверх
ksili
Дата 15.3.2007, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Akella @  14.3.2007,  18:10 Найти цитируемый пост)
delete first 1 * from T_BUFFER order by ID_CALL

зачем order by, ты же одну запись выбираешь


Я выбираю одну, но при этом ПЕРВУЮ. А чтобы понять, какая первая, надо упорядочить. Вот я и подумал, что order by указывает поле сортировки ( до выборки). А вообще я в SQL'e не мастак.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 16.3.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(ksili @  15.3.2007,  06:07 Найти цитируемый пост)
Я выбираю одну, но при этом ПЕРВУЮ. А чтобы понять, какая первая, надо упорядочить.

ну ты же всего одну запись выбираешь, всего одну, а потом сортируешь  smile 

другое дело
Код
select first 1 * from (select * from t_buffer order by id)

PM MAIL   Вверх
tishaishii
Дата 16.3.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Цитата(sql)

select first 1 * from (select * from t_buffer order by id)

Нафига?
PM MAIL ICQ Skype   Вверх
Akella
Дата 20.3.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Это просто пример, я веду к тому, что зачем сортировать одну запись. Другое дело сортировать все записи, а потом выбирать из них первую.
PM MAIL   Вверх
ksili
Дата 20.3.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



У меня сейчас такой запрос:
Код

delete from T_BUFFER where ID_CALL in
(select first 1 ID_CALL from T_BUFFER where (OPERATOR=1 or OPERATOR=0))

Усё работает


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.