Доброго всем дня! И вновь нужна помощь.
На форме frmCards грид TableGrid1 отображает данные из таблицы card.
При клике по ячейке грида срабатывает процедура:

procedure frmCards_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
frmCards.cbPerson.dbItemID := SQLExecute ('SELECT IFNULL(id_person, -1) FROM card WHERE id='+frmCards.TableGrid1.sqlValue);
end;

и в комбобоксе cbPerson появляется фамилия сотрудника.
Нужно чтобы одновременно на этой же форме в комбобоксах или текстбоксах появились данные сотрудника:
- departament;
- otdel;
- room;
- job

СПАСИБО!

Как автоматически заполнить комбобокс 1 на форме card при выборе значения из грида? Заполнение Edit  получается, но нужен именно комбобокс, так как его значение должно сохраниться в таблицу.

Спасибо, Дмитрий. Этот запрос работает

ID вычисляет, но не работает.
Без условия работает, но собирает все записи.
Скрипт такой:

SELECT
procedures.rozkrittiaDate,
procedures.proceduresSUM,
subjectProcedure.subjectName,
strftime('%d.%m.%Y',procedures.rozkrittiaDate),
phases.phase,
strftime('%d.%m.%Y',phases.dateEnd),
phases.status,
(CASE WHEN phases.status=1 then 'НА КОНТРОЛІ' WHEN phases.status=0 then 'ВИКОНАНО' else '' end)
FROM procedures

LEFT OUTER JOIN phases ON phases.id_procedures=procedures.id
LEFT OUTER JOIN subjectProcedure ON procedures.id_subjectProcedure=subjectProcedure.id

ORDER BY strftime('%d.%m.%Y',phases.dateEnd)

WHERE procedures.id={TableGrid1};

Подскажите пожалуйста, как правильно записать условие SQL отчёта, чтобы из разных таблиц отбирались записи только относящиеся к выбранному в гриде значению. Записал так, но даёт ошибку:

WHERE procedures.id=IntToStr(Form1.TableGrid1.dbItemID);

Без этого условия отчёт работает, но отбирает всё подряд.

DriveSoft wrote:

Тогда так

Спасибо, Дмитрий! Наконец-то добрался до своего проекта. Благодаря Вам работает.

83

(7 replies, posted in Russian)

Сделал для Вас проект. Но к комбобоксу он никакого отношения не имеет.

84

(7 replies, posted in Russian)

Igor wrote:

После сохранения открываю запись и обнаруживаю что должности и фамилии в комбоксах одинаковые.

Иначе и быть не может. Ведь оба комбобокса "Должность" привязаны к одному и тому же полю таблицы. Оба комбобокса ФИО также привязаны к одному полю. А в чём смысл наличия двух сотрудников на одной форме?

85

(7 replies, posted in Russian)

2. Как-то так:

procedure FrmPodrazdelenie_ComboBox1_OnChange (Sender: string);
begin
FrmPodrazdelenie.Edit1.Text := SQLExecute ('SELECT Tel FROM Sotrudnik WHERE id='+FrmPodrazdelenie.ComboBox1.sqlValue);
FrmPodrazdelenie.Edit2.Text := SQLExecute ('SELECT Email FROM Sotrudnik WHERE id='+FrmPodrazdelenie.ComboBox1.sqlValue);
end;

Дмитрий, это не то. Каждому значению, выбранному в комбобоксе, соответствует своё зачение, попадающее в Edit1. Для этой записи - это - 28 дней, для другой, например, + 7 дней, для третьей ещё какое-то...

Очень прошу посмотреть скрипт. Что в последней строке не так?

procedure frmAddPhases_ComboBox1_OnChange (Sender: string);
Var
sDate: string;
c: string;
begin
frmAddPhases.Edit1.Text := SQLExecute ('SELECT phasesFactor FROM proceduresPhase WHERE id='+frmAddPhases.ComboBox1.sqlValue);
frmAddPhases.DateTimePicker2.DateTime := frmAddTender.DateTimePicker2.DateTime;

sDate := frmAddPhases.DateTimePicker2.sqlDateTime;
c := frmAddPhases.Edit1.sqlValue;
if sDate <> '' then frmAddPhases.DateTimePicker1.DateTime := SQLDateTimeToDateTime((sDate)+(c)) else frmAddPhases.DateTimePicker1.Checked := False;
end;

Дата в DateTimePicker1 должна быть на 28 дней отличаться от даты в DateTimePicker2.

Такой код создания HTML:

procedure frmAll_ButtonHTML_OnClick (Sender: string; var Cancel: boolean);
    ///// СОЗДАНИЕ И ОТКРЫТИЕ HTML ФАЙЛА /////////////////
begin
    frmAll.TableGrid1.SaveToHTML('Report\Control.html');
    OpenFile('Report\Control.html');
end;

Результат на рисунке. Кракозябры - это буквы кириллицы.
Можно ли в скрипте прописать нужную кодировку?

Это оно! Спасибо огромное, Дмитрий!

Даже в EXCEL это решаемо. А тут сутки бьюсь, и всё никак. Неужели нет решения?

По описанной выше проблеме сделал пример.
В грид формы frmAll должны отбираться только те записи, у которых в названии обозначено НА КОНТРОЛЕ.

DriveSoft wrote:
WHERE
task.status=1 AND subtask.status=1

Такая запись предполагает, что выполняться должны одновременно оба условия. В таком случае в результат не попадают задачи, не имеющие подзадач.
Нужно, чтобы было ИЛИ-ИЛИ.
Т.е.:
1) Есть task у которого task.status=1, но не содержащий подзадач subtask;
2) Есть task у которого task.status=1, включающий в себя подзадачи со статусами как subtask.status=1 так и subtask.status=0;
3) Есть task у которого task.status=0, но не содержащий подзадач subtask;
4) Есть task у которого task.status=0, включающий в себя подзадачи со статусами subtask.status=0;
В результате должны быть отобраны 1) и 2). Но у 2) только те subtask, статус которых subtask.status=1.
Пробовал вместо AND записать OR, но результата никакого - отбирает все записи подряд, и выполненные и не выполненные.

Прошу помощи в написании запроса.

SELECT
task.taskname,
strftime('%d.%m.%Y',task.dateEnd),
subtask.subtaskname,
strftime('%d.%m.%Y',subtask.dateEnd)

FROM task

LEFT OUTER JOIN subtask ON subtask.id_task=task.id

WHERE
task.status=1;
subtask.status=1;

ORDER BY strftime('%d.%m.%Y',task.dateEnd), strftime('%d.%m.%Y',subtask.dateEnd)

Сейчас у меня не выполняется второе условие. Нужно, чтобы в таблице были показаны все те задачи, статус которых равен 1 и только те подзадачи (а их у задачи может и не быть), статус которых равен 1. Если подзадача уже выполнена, т.е. её статус равен 0, то отбираться запросом она не должна.
На рисунке: субзадача "Найти первый орешек" выполнена и имеет статус = 0, поэтому в результат запроса попасть она не должна.

Спасибо, Дмитрий! Такой мудрёный скрипт - ни за что сам не сделал бы...

DriveSoft wrote:

Готово.

СПАСИБО!!!!!
По ходу ещё. А если в таблице group кроме поля group есть ещё текстовое поле, например zzz, как и его значение вывести в edZzz на форму?

Сделал пример для наглядности того, что мне хотелось бы получить.
А хотелось бы, чтобы при клике по строке грида и при навигации по гриду в компонентах формы отображались не только имя и Мемо, но также дата рождения (проблемы описаны выше) и группа (находится в другой таблице).

DriveSoft wrote:

в sql запросе пропущено слово FROM

С  FROM contact даёт ошибку (на рисунке)

теперь ругается на отсутствие колонки contact.birthday. В таблице и гриде она есть.

Пожалуйста подскажите, что не правильно в записи

Form1.dtpBirthday.DateTime := SQLExecute ('SELECT strftime('%d.%m.%Y',contact.birthday) WHERE id='+Form1.TableGrid2.sqlValue);

Ругается на скобку перед форматом даты.

DriveSoft wrote:

сделал процедуру DoStatus для определения статуса

Спасибо огромное, Дмитрий. Как будто бы работает. Но погоняю ещё для полной уверенности.