![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в запросе SQL ;работать с битами [D6, Access]
AFrolov © (2002-09-20 16:31:00)У меня в таблице хранится состояния в виде целого числа - каждый бит отвечает за определеннй признак. Как можно в запросе выбрать только те записи у которых определенный бит равен например 1?
заранее спасибо.
sniknik (2002-09-21 12:35:00) [1]Не не от версии. У меня есть возможность проверить на 6 машинах везде разные операционки или мдаки. Сработало только на одной!? и то при более тщательном разборе оказалось... сам виноват. оплошал.
(там в таблице просто не было значений с 2, и получилось правильно :-(()
и в итоге выяснил
select (1 and 0) {false, 0}, (1 and 1,2,3,4,короче любое число) {true, -1}
вот так странно работает, хотя в бейсике (если внутреннюю функцию делать) это действительно битовая операция. Жаль что эту внутреннюю функцию извне не получается вызывать а то бы проблема решилась бы.
Cobalt (2002-09-21 10:19:00) [2]WHERE ((Tickets.Status) =3) - есть записи
WHERE (((Tickets.Status) and 3) =3) в Access"97 выдает пустой набор
Наверное, еще от версии ADO зависит.(У меня стоит только Access, и ничего более.)
sniknik (2002-09-20 20:13:00) [3]да чего помогать? and, or, xor работают в Access, подключаюсь из дельфей через ADO. ему надо разобратся что у негоне так, если не получается.
VictorT (2002-09-20 19:48:00) [4]Может это поможет... Вообще-то биты можно выделить с помощью обычных арефметических операций, например, если разделить число на два, и при этом получится целое число, это будет обозначать, что младший бит не установлен, и т.д.
Wolf226 (2002-09-20 18:00:00) [5]Так это оно и есть. На локальных СУБД - точно нету такого.
AFrolov (2002-09-20 17:57:00) [6]А из DLL Функцию дернуть можно? Или это только под Interbse, и будет ли это под другими СУБД работать?
Wolf226 (2002-09-20 17:53:00) [7]User Defined Function
DECLARE EXTERNAL FUNCTION floor
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT "IB_UDF_floor" MODULE_NAME "ib_udf";
AFrolov (2002-09-20 17:49:00) [8]Что такое UDF и как его подключить?
sniknik (2002-09-20 17:48:00) [9]странно это, не прошло.
у меня сработало
SELECT * FROM 1saccs where isfolder and 1=1
isfolder может быть 0,1,2,3
в выборке только 1 и 3 что и надо?
Wolf226 (2002-09-20 17:36:00) [10]Подключить UDF - bin_and
where bin_and( field1and mask)<>0
AFrolov (2002-09-20 16:58:00) [11]2
> Cobalt © (20.09.02 16:42)
К сожалению не прошло :-(
Johnmen (2002-09-20 16:43:00) [12]Никак...
Cobalt (2002-09-20 16:42:00) [13]попробуй так:
where (Field1 and 8(или другая маска))<>0