|
|
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Конкретная идея: организация ввода и выбора графика сотрудника. Например, есть Вася, он работает по понедельникам и средам, Петя: вторник, четверг и т.д. Удобно это сделать (имхо) в виде двоичного числа 00000000, где каждый знак будет означать конкретный день недели, скажем, 01001000 - вторник, пятница (слева направо). Естественно, что в десятичной системе это числа 1,2,4,8,16,32,64,128 и их суммы. Только я не знаю как это сделать в Access :) Если программировать где-то еще, то для проверки значений нужно всего лишь _логически_ перемножить имеющееся число (кстати, ведь до этого его нужно в базу вставить именно как бинари, или же можно обычным?) на условие проверки: If A = Const * A then ... Т.е. при проверке на вторник получим: Код: plaintext 1. 2. 3. 4. Вот. Может быть, что-то похожее уже кто-нибудь реализовывал? (посмотрел форум, но не нашел) That's all folks... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 13:46:32 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
http://www.msaccess.ru/Files/graphic.zip Тут вполне нормальная структура под такую же задачу без всяких бинарников ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 14:08:45 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
логические операторы в VBA, примененные к целочисленным переменным работают как битовые. Устанавливать, всё-же лучше "справа-налево". установка бита производится выражением вида числоВкоторомУстанавливаемЗначение OR 2^НомерПозиции проверка, что бит установлен выражением вида числоВкоторомУстанавливаемЗначение AND 2^НомерПозиции очистка бита - числоВкоторомУстанавливаемЗначение AND NOT 2^НомерПозиции вариант оформления setBit есть здесь http://www.sql.ru/forum/actualthread.aspx?tid=144537&hl=setbit#1175904 получение значение бита и очистка добавляются так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. http://www.sql.ru/forum/actualtopics.aspx?search=band&bid=4 в частности http://www.sql.ru/forum/actualthread.aspx?tid=145742&hl=band (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 14:52:43 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Вот тут еще есть http://access.boom.ru/Library/Tables/ManyBooleanIntoSingleField.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 18:05:28 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Вот еще накропал http://access.boom.ru/Library/Algoritms/BitsAndBitMAsk.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 00:52:02 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Ознакомился с темой, большое спасибо Again , Victosha и Rafa . Возникает вопрос, а стоит ли игра свеч? Я хочу сказать, что для работы с битами в качестве булевых значений придется писать свои обработчики для составления запросов SQL, а также для каждой формы/модуля свои процедуры "упаковки" данных в одно поле (в смысле оптимизировать все формы под такую работу). Не проще ли просто сделать семь логических полей для дней недели и не мучится ни с занесением этих значений, ни с выборкой по ним? При сложившихся обстоятельствах, а именно намечающийся в самое ближайшее время переход от MDB к ADP + MSSQL, а также не очень большая интенсивность работы (менее 10.000 записей в сутки от 15 пользователей), мне хочется ознакомиться с методом, попробовать его, но внедрять в проект с потерей времени и возможными (лишними) проблемами в будущем - нет. В конце концов, 8 байт или 1 для современных машин объем не критичный. P.S. Если бы кто-нибудь сказал свое мнение, как если бы сам выбирал себе, что мол, мужик, дело того стоит или не стоит, я был бы очень признателен. That's all folks... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:37:23 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
8 битовых (булевых) полей займут 1 байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:39:49 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
то есть - из экономии пространства - этим заниматься НЕ НАДО НИ ПРИ КАКИХ обстоятельствах. (даже если бы булевы поля занимали по байту каждое) Если задача сама ясно не говорит, что это тебе надо, - не морочь голову себе людям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:43:04 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
где-то в инете была статья по этому поводу. автор всяческими способами отговаривал хранить в байтовом поле биты. во-первых, это противоречит нормальной форме БД, во вторых даже битовые поля всё равно занимают один байт, в-третьих, что делать если для каждого дня будет больше вариантов, не "работает/не работает", а "работает полдня, работает в первую смену, вторую и т.д." однозначно 7 полей (и не битовых, а байтовых или более) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 12:36:20 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukovбитовые поля всё равно занимают один байт вранье Dmitry Biryukovчто делать если для каждого дня будет больше вариантов, не "работает/не работает", а "работает полдня, работает в первую смену, вторую и т.д." не делать битовых полей Dmitry Biryukovи не битовых, а байтовых или более а лучше по подчиненной таблице вместо поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 13:33:27 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Ну, не знаю, если дискуссия по поводу места, то лично мне кажется, что никакая база данных не сможет отдельно хранить один бит информации. В смысле на носителе или памяти, разве что каким-то хитрым образом она на низком уровне упаковываются в один байт (во чушь несу, аж самому интересно). Машина же не может думать битами, но как нас давно учили на информатике, машинными словами, а это даже не байт. Впрочем, тут мои познания ограничиваются словами Аксемблер и Сиу (взято из анкет соискателей на должность системного администратора :) Я сейчас делаю небольшую тестовую базку только для того, чтобы выяснить удобство работы с такими вещами. Пока все идет гладко: вставлять значения по набору checkbox'ов легко, правильно отображать их в зависимости от аккумулированного битового значения тоже легко, делать запрос по определенным битам опять легко. Кроме того, это просто интересно :) P.S. Но работать с отдельными битовыми полями в таблице еще легче! :) That's all folks... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 14:34:56 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
авторМашина же не может думать битами пока что - достаточно уверенно - можно сказать, что машина вообще не может думать – ни битами, ни чем другим. Кроме Вас, никто не сможет решить – надо это Вам применять, или нет… Еще раз в смысле экономии места хранения – это почти всегда бессмыслица и неоправданное усложнение задачи. Возможные смыслы идут от планируемой обработки полученного числа как единой комбинации. Прямое использование как упакованного массива булевых значений, безусловно, возможно, но применяется, как мне кажется, реже всего. Чаще возникает вариант, когда некая маска (числовое значение) определяет вариант обработки. Иногда это может быть полезно для позиционных комбинаций в случае организации циклов, когда номер выставленной позиции фактически определяет индекс массива, к которому может (должно) произойти обращение. Непосредственно связанное с предыдущим – перечислитель целочисленных значений . Еще раз - кроме Вас, никто не сможет решить – надо это Вам применять, или нет… (или переформулировать задачу) :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 15:58:04 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
1 байт , Мы не о том говорим :) Я доделал тестовую базу с одной таблицей (2 поля: id, и число) и формой для работы. У формы меняется рекордсет по условию, составленному из семи чекбоксов (дни недели), а именно запросом через предлагаемую здесь функцию из модуля (a And b). Все работает великолепно, но связываться я не буду - нет смысла городить такое для простого графика. Так что будет в таблице еще 7 булинов и все (правда, выглядит сильно громоздко :о). P.S. Но метод взят на вооружение и при случае будет, вашими стараниями, использован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 18:21:20 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
2 dkny : Иллюзии. В аксессе (mdb) поле Yes/No занимает ровно один бит, 8 полей - 1 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:00:50 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Alexey Sh2 dkny : Иллюзии. В аксессе (mdb) поле Yes/No занимает ровно один бит, 8 полей - 1 байт. НЕ ВЕРЮ ! использует оно ровно один бит, а хранится в байте все равно..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 00:01:36 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
dknyНо работать с отдельными битовыми полями в таблице еще легче! :) легче пока еще еще новичок, потом будет легче и удобнее работать с битами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 00:03:35 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
2 Rafa прямо Станиславский практически. Вот тут театр, а там зеркало. где бы вешалку найти... :)) (с добрым выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 00:34:09 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Для особеенно неверующих: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 12:06:42 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Для особеенно неверующих: здесь можно ознакомиться с форматом mdb файла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 12:09:27 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Скомпилируй сам свой набор по чтению баз Access ;) еще чем будешь убеждать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 00:20:42 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
RafaСкомпилируй сам свой набор по чтению баз Access ;) еще чем будешь убеждать ? поиском по форуму обсуждалось не так давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 00:27:21 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
А в чём проблема скомпилить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 00:36:50 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Позвольте внести свою скромную лепту по поводу практических наблюдений работы Access 2003. Мне действительно стало интересно как Access хранит информацию в таблицах при вводе булиновских полей в одно поле типа байт и отдельно для каждого логического поля. Дабы разобраться, что все таки происходит с MDB в плане размера, в случае разных полей в таблицах, провел такое исследование: добавление в базу 100 000 и 1 000 000 записей программным путем с засечением времени и сравнением получившегося размера баз. При этом интерес представляли три случая: 1. База с таблицей из поля типа byte . 2. База с таблицей из поля типа boolean . 3. База с таблицей из восьми полей типа boolean (в сумме это должно было быть похоже на байт :). Итак результаты размера: Код: plaintext 1. 2. 3. 4. 5. 6. * база с байтом изначально была меньше на ровно 4КБ, так и осталась! * количество кода для вставки через CurrentDb.Execute ("INSERT INTO..., естественно, было разным во всех случаях. Разница - 0, 0%, нуль!!! Размер итоговой базы во всех трех случаях одинаков! ВЫВОД: Поправьте меня, если я ошибаюсь, но получается, что Access постоянно резервирует пространство базы под абсолютно все объекты, будь то, код, кнопки, таблицы, поля и т.д. Я думаю, что для кода VBA минимальный объем "кластера" - те самые 4 КБ (кстати, по-моему довольно удачное сравнение с файловой системой). Но что при этом происходит при резервировании места под данные? Один миллион записей по одному байту это, грубо, один мегабайт. Счетчик (ключевое поле) длинной в 4 байта это еще 4 МБ. Но в итоге то у нас 23 МБ! Куда оно пошло? Скорее всего, на резервирование. Если Access (говоря про Access я здесь все время имею в виду JET :) работает страницами-кластерами, т.е., если предположить, что запись в любой таблице из любого количества полей не может быть меньше определенного объема, то этот объем легко посчитать - 23 МБ / 1 млн. = 23 байт, вместо нужных пяти! Какое расточительство! :) К сожалению, я не знаю механики работы Access/JET, поэтому эти измышления могут являться лишь банальной истиной, которую все давно знают (или быть полным бредом :). Ну, наконец, скорость добавления этих записей (AthlonXP 3200+): Код: plaintext 1. 2. 3. 4. 5. Поле (число) типа байт добавляется быстрее логического! А 8 логических полей дают перекур аж на 25 процентов длиннее! Вполне может быть, что работа с записями, в которых логические поля "упакованы", даже с учетом затрат на обработку кодом, будет идти быстрее native режима Access. P.S. 25 минут на 1 000 000 записей... Долго же еще нам не будет хватать мощности "железа" :) That's all folks... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 12:38:23 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
блин, ну обсуждалось ведь уже как биты хранятся... /topic/118602&pg=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 12:49:07 |
|
||
|
Посоветуйте с организацией "флажков" (есть идея сделать их binary: 1,2,4,8,16)
|
|||
|---|---|---|---|
|
#18+
Поясняю. В mdb файле для каждого небулевского поля в записи имеется дополнительный флажок, признак NULL/не NULL. Для булевских полей это флажок используется для хранаения значений TRUE/FALSE. Поэтому булевские в Аксессе не могут быть NULL. флажки естественно пакуются. Никакой мистики. Кластеров в mdb нет, есть 4K страницы (jet4) на каждой странице данных имеется заголовок фиксированной длины и таблица смещений каждой записи внутри страницы . Индексы занимают место. P.S. Зачем фантазировать, если имеется описание структуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 12:52:17 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32862613&tid=1669291]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 331ms |

| 0 / 0 |
