Модератор: Модераторы
Frolik писал(а):Для отображения используйте ListBox


Как извлекать данные из базы уже разобрались?
vert писал(а):Можно ли это проделать без использования запросов, одними датасетами/сорсами?
procedure TMyForm.RxDBGrid1GetCellProps(Sender: TObject; Field: TField;
  AFont: TFont; var Background: TColor);
begin
  if MyPeoplesFieldExists.AsBoolean  then
      Background:=clBlue
end;

type
  IntegersArray = Array Of Integer;
...
// Заполнение списка сотрудников
function FillWorkersList: IntegersArray;
var
  worker_id, act_id, worker_fio: String;
  i, all_workers: Integer;
begin
  // Записываем ID акта в переменную
  act_id := DMForm.Q_card_acts.FieldByName('id').AsString;
  // Очищаем список сотрудников
  MainForm.act_workers.Clear;
  // Запрашиваем список сотрудников
  DMForm.Q_workers.Active:=False;
  DMForm.Q_workers.Active:=True;
  // Узнаём число сотрудников в БД
  with DMForm.Q_temp do
    begin
      Active:= False;
      SQL.Text:= 'SELECT COUNT(*) AS ALL_WORKERS FROM workers';
      Active:= True;
      all_workers:= FieldByName('ALL_WORKERS').AsInteger;
    end;
  // Устанавливаем размер массива с ID сотрудников
  // соответственно числу сотрудников
  SetLength(Result, all_workers);
  // Заполняем список сотрудников
  i:= 0;
  while NOT DMForm.Q_workers.EOF do
    begin
      // Записываем результаты запроса в переменные
      worker_fio:= DMForm.Q_workers.FieldByName('FIO').AsString;
      worker_id:= DMForm.Q_workers.FieldByName('id').AsString;
      // Добавляем строку с ФИО сотрудника
      MainForm.act_workers.Items.Add(worker_fio);
      // Заполняем массив с ID сотрудников
      Result[i]:= StrToInt(worker_id);
      // Проверяем наличие связи с актом
      with DMForm.Q_temp do
        begin
          Active:= False;
          SQL.Text:= 'SELECT 1 AS RESULT FROM rel_acts_workers' + ' WHERE id_act=' + act_id + ' AND id_worker=' + worker_id;
          Active:= True;
          // Если связь есть - отмечаем галочкой
          if FieldByName('RESULT').AsBoolean = True then
            begin
              MainForm.act_workers.Checked[i]:= True;
            end;
        end;
      // Переходим к следующему
      i:= i + 1;
      DMForm.Q_workers.Next;
    end;
end;
// Добавление/удаление связи между актом и сотрудником по onClickCheck
procedure CheckWorkerActRelation(item_id, worker_id: Integer);
var
  act_id: String;
begin
  act_id:= DMForm.Q_card_acts.FieldByName('id').AsString;
  // Проверяем, есть связь или нет
  with DMForm.Q_temp do
    begin
      Active:= False;
      SQL.Text:= 'SELECT 1 AS RESULT FROM rel_acts_workers' + ' WHERE id_act=' + act_id + ' AND id_worker=' + IntToStr(worker_id);
      Active:= True;
      // Если связь есть - удаляем её
      if FieldByName('RESULT').AsBoolean = True then
        begin
          Active:= False;
          SQL.Text:= 'DELETE FROM rel_acts_workers WHERE id_worker=' + IntToStr(worker_id) + ' AND id_act=' + act_id;
          Active:= True;
        end
      // Иначе - добавляем связь между актом и сотрудником
      else
        begin
          Active:= False;
          SQL.Text:= 'INSERT INTO rel_acts_workers (id_worker, id_act) VALUES('+ IntToStr(worker_id) + ', ' + act_id + ')';
          Active:= True;
        end;
    end;
  // Перезагружаем список сотрудников
  workers_ids:= FillWorkersList;
  MainForm.act_workers.Selected[item_id]:= True;
end;Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1