Модератор: Модераторы
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;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13