Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.08.2010, 06:13
itas_miller itas_miller вне форума
Прохожий
 
Регистрация: 24.08.2010
Сообщения: 1
Репутация: 10
По умолчанию Использование справочника

Доброго времени суток!

Есть такая ситуация:
1. Есть форма - на ней находиться 7 сheckbox & 1 edit!
Каждый (чекбокс) отвечает за день недели!
В итоге в edit получается комбинации: 1..3...7 ( и так далее, в зависимости от сколько чекбоксов - чекен )

все отлично: каждый чекбокс записывается в базу dw1,...,dw7 и dayweek - также записывается в базу ( формат - стринг )

НО!!! Есть справочник в нем перечисленны все возможные комбинации, и каждой комбинации дан ID! И чтобы удобнее было сравнивать - нужно работать с ID! поля в таблице: ID и DW

Собственно - как поставить соответсвие! чтобы в поле DW_ID записывались ID из этого справочника, на основании соответствия поля - которое я сам записал в базу DAYWEEK!

Спасибо
Ответить с цитированием
  #2  
Старый 24.08.2010, 11:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Простейший путь - вписать соответствете ID в Tag чекбоксов.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 24.08.2010, 12:12
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Я бы не стал делать в базе семь полей, под каждый чекбокс, а всего одно поле, в один байт, где первые 7 бит определяли бы состояние чекбоксов (по биту на чекбокс), всего 128 комбинаций, соответственно число каждой комбинации в диапозоне от 0 до 128, насколько актуальна таблица со всеми возможными комбинациями и для чего она нужна - непонятно (предполагаю привязку дополнительных данных к каждой комбинации), но далее я бы сформировал данную таблицу, где ключом был бы как раз данный байт, таким образом, таблица комбинаций дополняла бы комбинации нужными для каждой комбинации данными, но ссылка на эту таблицу формировалась бы автоматически в программе, в зависимости от состояния чекбоксов.
Ответить с цитированием
  #4  
Старый 24.08.2010, 13:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Не думаю, что ваш пост будет понятен автору.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 24.08.2010, 17:56
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Если автору вопроса интересно данное решение, обязательно спросит детали, а на полное понимание я и не рассчитывал)
Ответить с цитированием
  #6  
Старый 24.08.2010, 19:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А я бы не стал делать справочник, как и поля под каждый день недели.
Предыдущий пост по поводу установки битов вполне разумен. Может просто непонятен. Вот 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025