Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пропускаются некоторые строки в DBISAM 
:(
    Опции темы
Rasool
Дата 14.12.2018, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 4.6.2011

Репутация: нет
Всего: нет



Такая проблема. Пишу в Embarcadero® Delphi® XE Version 15.0.3953.35171 программу работы с БД DBISAM.
В процедуре TmainForm.CalcAverageParametersOnShort в цикле не читаются подряд строки c BladeNo = '745', BladeParamname = 'R2', bladeSection = 'А1-А1', 'А2-А2', 'А3-А3', 'А4-А4', 'А5-А5'.
Там пропускаются строки с bladeSection = 'А1-А1', из-за этого в таблице в среднем значении в графе таблицы 'R2' вместо 0,005 стоит прочерк (выполняется строка averageVal := NO_VALUES; ).

Код

            Sql.Clear;
            Sql.Add('CREATE TABLE IF NOT EXISTS "ShortParam"        ');
            Sql.Add('(                                              ');
            Sql.Add('   "ParamName" CHARACTER(50),                  ');
            Sql.Add('   "Section" CHARACTER(50),                    ');
            Sql.Add('   "Value" FLOAT,                              ');
            Sql.Add('   "ValueInDopusk" INTEGER,                    ');
            Sql.Add('   "BladeNo" CHARACTER(50),                    ');
            Sql.Add('   "BladeId" INTEGER,                          ');
            Sql.Add('   "BladeMeasureDate" DATE,                    ');
            Sql.Add('   "BladeMeasureTime" TIME,                    ');
            Sql.Add('   "PartyNo" CHARACTER(50),                    ');
            Sql.Add('   "BladeName" CHARACTER(50),                  ');
            Sql.Add('   "FileName" CHARACTER(128),                   ');
            Sql.Add(')                                              ');
            ExecSQL;



Код

// Считаем среднеарифметическое и максимальное/минимальное отклонения для параметров
procedure TmainForm.CalcAverageParametersOnShort;
var
    ParamName, BladeNo, BladeParamname, bladeSection, star_out_dopusk: string;
    blNo, blSection: string;
    addVal, Val, averageVal: Double;
    i, RowCount, BladeId: Integer;
begin
    With TDBISAMQuery.Create(nil) do
        try
            // Sql.Add('SELECT * FROM "' + ExtractFilePath(Application.ExeName) +
            // 'Param.DAT"');
            // Open;
            // l:=TList.Create;
            //
            // GetFieldList(l,'PartyNo');
            // for I := 0 to l.count-1 do
            // showmessage(l.);

            Screen.Cursor := crHourGlass;
            // Извлечение названий параметров ParamName из таблицы Param.DAT
            Close;
            Sql.Clear;
            Sql.Add('SELECT T.* ');
            Sql.Add('FROM "' + ExtractFilePath(Application.ExeName) +
              'Shortparam.DAT" T ');
            Sql.Add('ORDER BY BladeNo, PartyNo, ParamName, Section ');
            // Sql.Add('ORDER BY Section ');
            Open;

            addVal := getShortProtocolParamValue('R2', '745', 'А1-А1', star_out_dopusk);
            // Все берет правильно, 0,005

            while (not Eof) do
            begin
                BladeNo := FieldByName('BladeNo').AsString;
                while (FieldByName('BladeNo').AsString = BladeNo) and
                  (not Eof) do
                begin
                    BladeParamname := FieldByName('ParamName').AsString;
                    RowCount := 0;
                    Val := 0;
                    while (FieldByName('ParamName').AsString = BladeParamname)
                      and (not Eof) do
                    begin
                        bladeSection := FieldByName('Section').AsString; // Здесь пропускает 'А1-А1'
                        try
                            addVal := getShortProtocolParamValue(BladeParamname,
                              BladeNo, bladeSection, star_out_dopusk);
                            if addVal = NO_VALUES then
                            begin
                                Next;
                                Continue;
                            end;
                            inc(RowCount);
                            Val := Val + addVal;
                        finally
                            Next;
                        end;
                        // end;
                    end;
                    if RowCount > 0 then
                        averageVal := Val / RowCount
                    else
                        averageVal := NO_VALUES;
                    try
                        // BladeId := StrToInt(BladeNo);
                        BladeId := 0;
                    finally
                        AverageShortParamTable.AppendRecord
                          ([BladeParamname { название параметра } ,
                          averageVal { значение параметра } , 1 { в допуске } ,
                          BladeNo, BladeId, aBladeData, aBladeTime]);
                    end;
                end;
            end;
        finally
            Close;
            Free;
            Screen.Cursor := crDefault;
        end;
end;




Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  DBISAM.JPG 43,90 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1053 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.