Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 24.04.2017, 18:24   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
Репутация: 20
По умолчанию Сократить размер кода

Добрый день.
Подскажите, можно ли этот код как-нибудь сократить?
Код:

// 1ый канал
if
(DataModule2.adoquery1.FieldByName('CH1').asstring<>'') and
(DataModule2.adoquery1.FieldByName('CH2').asstring='') and
(DataModule2.adoquery1.FieldByName('CH3').asstring='') and
(DataModule2.adoquery1.FieldByName('CH4').asstring='') then
App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH1').asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка1').asstring+' '+
DataModule2.adoquery1.FieldByName('№точки1').asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик1').asstring;

// 2ой канал
if
(DataModule2.adoquery1.FieldByName('CH1').asstring='') and
(DataModule2.adoquery1.FieldByName('CH2').asstring<>'') and
(DataModule2.adoquery1.FieldByName('CH3').asstring='') and
(DataModule2.adoquery1.FieldByName('CH4').asstring='') then
App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH2').asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка2').asstring+' '+
DataModule2.adoquery1.FieldByName('№точки2').asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик2').asstring;

// 3ий канал
if
(DataModule2.adoquery1.FieldByName('CH1').asstring='') and
(DataModule2.adoquery1.FieldByName('CH2').asstring='') and
(DataModule2.adoquery1.FieldByName('CH3').asstring<>'') and
(DataModule2.adoquery1.FieldByName('CH4').asstring='') then
App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH3').asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка3').asstring+' '+
DataModule2.adoquery1.FieldByName('№точки3').asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик3').asstring;

// 4ый канал
if
(DataModule2.adoquery1.FieldByName('CH1').asstring='') and
(DataModule2.adoquery1.FieldByName('CH2').asstring='') and
(DataModule2.adoquery1.FieldByName('CH3').asstring='') and
(DataModule2.adoquery1.FieldByName('CH4').asstring<>'') then
App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH4').asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка4').asstring+' '+
DataModule2.adoquery1.FieldByName('№точки4').asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик4').asstring;

Ernest027 вне форума   Ответить с цитированием
Старый 24.04.2017, 19:46   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,420
Репутация: 1965
По умолчанию

правильный подход СДЕЛАТЬ правильную таблицу(запрос к БД).
чтобы не в одной строке(записи) была информация о четырех станциях
СН1 точка1 ... CH2 точка2 ... CH3 точка3... CH4 точка4...
и из которых заполнены данные ровно одной станции
а сделать те же четыре записи но в которых будет информация РОВНО по одной станции.

СН1 точка1 ...
СН2 точка2 ...
CH3 ...
CH4 ...

тогда в коде
не будет не будет никаких проверок

и останется только
Код:

App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH').asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка').asstring+' '+
DataModule2.adoquery1.FieldByName('№точки').asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик').asstring;

__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 19.05.2017, 23:19   #3
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 2,902
Репутация: 1007
По умолчанию

В применении к текущему коду:

Код:


Function GetChannel: byte;
var
  ResultStr: string;
  i: integer;

begin
  
  ResultStr := '';
  
  for i := 1 to 4 do
  begin

    if DataModule2.adoquery1.FieldByName('CH' + IntToStr(i)).asstring = '' then
      ResultStr := ResultStr + '0'
    else
      ResultStr := ResultStr + '1'; 

  end;

  Result := pos('1', ResultStr);

end;

и дальше юзаем функцию

Код:

Channel := GetChannel();

App.ActiveDocument.Tables.Item(2).Cell(i+2,1).Range.Text:=
'Рис.4.'+inttostr(DataModule2.adoquery1.recno)+
#13#10+
DataModule2.adoquery1.FieldByName('CH' + IntToStr(Channel)).asstring+' - '+
DataModule2.adoquery1.FieldByName('Точка' + IntToStr(Channel)).asstring+' '+
DataModule2.adoquery1.FieldByName('№точки' + IntToStr(Channel)).asstring+', '+
DataModule2.adoquery1.FieldByName('Датчик' + IntToStr(Channel)).asstring;

__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.05.2017 в 23:25.
Sciv на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер символьной переменной и размер указателя на символьную переменную MrQuestion Помощь студентам 1 29.08.2015 21:52
QFrame c QLabel минимальный размер + размер по содержимому Krasiosoft Qt и кроссплатформенное программирование С/С++ 1 29.06.2015 05:44
сократить код kostan3 Паскаль 2 17.02.2013 17:24
Сократить код shapiro Помощь студентам 0 14.04.2010 17:38
Как уменьшить размер сис кода? Sergeu Общие вопросы Delphi 5 17.01.2009 22:40




15:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru