ReportBuilder 15.0. Конвертировать и объединить все выбранные значения флажков
Получение значений True / False из флажков с преобразованием в название класса наркотиков "Name", затем необходимо объединить поле, чтобы сообщить все значения, выбранные в БД.
Переменная будет компилироваться и сообщать об отсутствии ошибок, однако в настоящее время я получаю только "Опиаты", если выбрано, в противном случае получаю "Амфетамины", если они выбраны, или "Амфетамины" независимо от любых других выбранных значений.
Нет доступа к структуре БД.
Value := '';
if People['Test Result 1'] = 'T' then
begin
Value := 'Opiates';
end;
if People['Test Result 2'] = 'T' then
if Value = '' then
Value := 'Amphetamine';
end;
else
Value := Value + ', Amphetamine';
end;
if People['Test Result 3'] = 'T' then
begin
if Value = '' then
Value := 'Benzodiazepines';
end;
else
Value := Value + ', Benzodiazepines';
end;
if People['Test Result 4'] = 'T' then
begin
if Value := '' then
Value := 'Cannabis';
end;
else
Value := Value + ', Cannabis';
end;
if People['Test Result 5'] = 'T' then
begin
if Value := '' then
Value := 'Methamphetamines';
end;
else
Value := Value + ', Methamphetamines';
end;
if People['Test Result 6'] = 'T' then
if Value := '' then
Value := 'Cocaine';
end;
else
Value := Value + ', Cocaine';
end;
Сейчас работаю
Value := '';
if People['Test Result 1'] = 'T' then
Value := 'Opiates';
if People['Test Result 2'] = 'T' then
if value <> '' then
Value := Value + ', Amphetamine'
else
Value := 'Amphetamine';
if People['Test Result 3'] = 'T' then
if value <> '' then
Value := Value + ', Benzodiazepines'
else
Value := 'Benzodiazepines';
if People['Test Result 4'] = 'T' then
if value <> '' then
Value := Value + ', Cannabis'
else
Value := 'Cannabis';
if People['Test Result 5'] = 'T' then
if value <> '' then
Value := Value + ', Methamphetamines'
else
Value := 'Methamphetamines';
if People['Test Result 6'] = 'T' then
if value <> '' then
Value := Value + ', Cocaine'
else
Value := 'Cocaine';
1 ответ
Слишком много кода, с некоторыми серьезными ошибками.
Примерно так должно работать:
Value := '';
if People['Test Result 1'] = 'T' then
Value := 'Opiates, ';
if People['Test Result 2'] = 'T' then
Value := Value + 'Amphetamine, ';
if People['Test Result 3'] = 'T' then
Value := Value + 'Benzodiazepines, ';
if People['Test Result 4'] = 'T' the
Value := Value + 'Cannabis, ';
if People['Test Result 5'] = 'T' then
Value := Value + 'Methamphetamines, ';
if People['Test Result 6'] = 'T' then
Value := Value + 'Cocaine, ';
// Remove the extra trailing ', '
if Value <> '' then
SetLength(Value, Length(Value) - 2);
Если бы это был я, я бы, вероятно, настроил бы это на использование массива результатов и цикла для анализа возможностей, но я недостаточно знаю, что вы делаете для его кодирования. Вот некоторый псевдокод, который может дать вам идею (не проверенный и не приложивший усилий для его компиляции; просто концептуальная идея, чтобы помочь):
// Possible test results. Showing 3 for simplicity
const
aResults: array[1..3] of string = ('Opiates', 'Amphetamines', 'Cannabis');
sFmt := 'Test Result %d';
var
i: Integer;
Fld: string;
begin
// Value defined wherever your previous one was
Value := '';
for i := Low(aResults) to High(aResults) do
begin
// Loop through fields (Test Result 1, Test Result 2, etc.)
Fld := Format(sFmt, [i]);
if People[Fld] = 'T' then
Value := Value + aResults[i] + ', ';
end;
// Remove extra ', '
if Value <> '' then
SetLength(Value, Length(Value) - 2);
end;