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; 
Другие вопросы по тегам