![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток!
Есть такая ситуация: 1. Есть форма - на ней находиться 7 сheckbox & 1 edit! Каждый (чекбокс) отвечает за день недели! В итоге в edit получается комбинации: 1..3...7 ( и так далее, в зависимости от сколько чекбоксов - чекен ) все отлично: каждый чекбокс записывается в базу dw1,...,dw7 и dayweek - также записывается в базу ( формат - стринг ) НО!!! Есть справочник в нем перечисленны все возможные комбинации, и каждой комбинации дан ID! И чтобы удобнее было сравнивать - нужно работать с ID! поля в таблице: ID и DW Собственно - как поставить соответсвие! чтобы в поле DW_ID записывались ID из этого справочника, на основании соответствия поля - которое я сам записал в базу DAYWEEK! Спасибо |
#2
|
||||
|
||||
![]() Простейший путь - вписать соответствете ID в Tag чекбоксов.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Я бы не стал делать в базе семь полей, под каждый чекбокс, а всего одно поле, в один байт, где первые 7 бит определяли бы состояние чекбоксов (по биту на чекбокс), всего 128 комбинаций, соответственно число каждой комбинации в диапозоне от 0 до 128, насколько актуальна таблица со всеми возможными комбинациями и для чего она нужна - непонятно (предполагаю привязку дополнительных данных к каждой комбинации), но далее я бы сформировал данную таблицу, где ключом был бы как раз данный байт, таким образом, таблица комбинаций дополняла бы комбинации нужными для каждой комбинации данными, но ссылка на эту таблицу формировалась бы автоматически в программе, в зависимости от состояния чекбоксов.
|
#4
|
||||
|
||||
![]() Не думаю, что ваш пост будет понятен автору.
![]() Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Если автору вопроса интересно данное решение, обязательно спросит детали, а на полное понимание я и не рассчитывал)
|
#6
|
|||
|
|||
![]() А я бы не стал делать справочник, как и поля под каждый день недели.
Предыдущий пост по поводу установки битов вполне разумен. Может просто непонятен. Вот 2 функции, которые реализуют преобразование массива флажков в целое число и обратно. Код:
function BoolArrayToInt(CB : Array Of TCheckBox) : Integer; begin If Length(CB) > 32 Then Raise Exception.Create('Too many checkboxes.'); Result := 0; For I := Low(CB) To High(CB) Do Begin Reesult := Result Shl 1; If CB[i].Checked Then Result := Result + 1; End; end; procedure IntToBoolArray(AInt : Integer; CB : Array Of TCheckBox); var I : Integer; begin If Length(CB) > 32 Then Raise Exception.Create('Too many checkboxes.'); For I := High(CB) DownTo Low(CB) Do Begin CB[i].Checked := (AInt Or 1) = 1; AInt := AInt Shr 1; End; end; |