From 38dc3bf816db786ffebc0ecb85b3f2c75e16cf54 Mon Sep 17 00:00:00 2001 From: Petr Hlozek Date: Fri, 24 Jan 2014 21:28:23 +0100 Subject: [PATCH] broken grid square statistic fixed --- src/CHANGELOG | 1 + src/fBigSquareStat.pas | 155 +++++++++++++++++++++++------------------ 2 files changed, 87 insertions(+), 69 deletions(-) diff --git a/src/CHANGELOG b/src/CHANGELOG index b640fc2..b4369c6 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -9,6 +9,7 @@ Legend: - TRX control window was not sizeable - fixed - when ESC was pressed twice in Remote mode, log crashed - fixed - program crashed when freq was entered with comma as decimal separator - fixed + - broken grid square statistic fixed 1.7.0 + online QSO upload to HamQTH, ClubLog and HRDLog added diff --git a/src/fBigSquareStat.pas b/src/fBigSquareStat.pas index 9bf2b85..605eea4 100644 --- a/src/fBigSquareStat.pas +++ b/src/fBigSquareStat.pas @@ -101,16 +101,17 @@ var sum_cfm : Word = 0; db : TBufDataset; begin - db := TBufDataset.Create(nil); + //db := TBufDataset.Create(nil); try - db.Fields.Clear; - with db.FieldDefs do - begin - Add('loc', ftString, 4); - Add('cfm',ftBoolean) - end; - db.CreateDataset; - db.Open; + //db.Fields.Clear; + //with db.FieldDefs do + //begin + // Add('loc', ftString, 4); + // Add('cfm',ftBoolean) + //end; + //db.CreateDataset; + //db.IndexDefs.Add('loc','loc',[ixPrimary]); + //db.Open; dmData.Q.Close; dmData.Q1.Close; @@ -144,7 +145,6 @@ begin while not dmData.Q.Eof do begin ll := dmData.Q.Fields[0].AsString; - Writeln('ll:',ll); writeln(f,''+LineEnding+''+LineEnding+''+ll+''+LineEnding+''); writeln(f,''); writeln(f,''); @@ -153,70 +153,87 @@ begin QuotedStr(ll+'%')+' and band = '+QuotedStr(cmbBands.Text)+ ' group by lll order by loc'; dmData.Q1.Open; - wkd := 0; - while not dmData.Q1.Eof do - begin - db.Append; - db.Fields[0].AsString := dmData.Q1.Fields[0].AsString; - db.Fields[1].AsBoolean := False; - db.Post; - inc(wkd); - dmData.Q1.Next - end; - sum_wkd := sum_wkd + wkd; - if tmp <> '' then - begin - dmData.Q1.Close; - dmData.Q1.SQL.Text := 'select upper(left(loc,4)) as lll FROM cqrlog_main where loc like '+ - QuotedStr(ll+'%')+' and band = '+QuotedStr(cmbBands.Text)+ - 'and ('+tmp+') group by lll order by loc'; - dmData.Q1.Open; - cfm := 0; + + + db := TBufDataset.Create(nil); //I was not able to clear all records from TBufDataset without this workaround + try + db.FieldDefs.Clear; + with db.FieldDefs do + begin + Add('loc', ftString, 4); + Add('cfm',ftBoolean) + end; + db.CreateDataset; + db.IndexDefs.Add('loc','loc',[ixPrimary]); + + db.Open; + wkd := 0; while not dmData.Q1.Eof do begin - if db.Locate('LOC',dmData.Q1.Fields[0].AsString,[]) then - begin - db.Edit; - db.Fields[1].AsBoolean := True; - db.Post - end; - inc(cfm); + db.Append; + db.Fields[0].AsString := dmData.Q1.Fields[0].AsString; + db.Fields[1].AsBoolean := False; + db.Post; + inc(wkd); dmData.Q1.Next end; - sum_cfm := sum_cfm + cfm - end; - dmData.Q1.Close; - - db.IndexName := 'loc'; - db.First; - while not db.Eof do - begin - if db.Bof then + sum_wkd := sum_wkd + wkd; + if tmp <> '' then begin - if db.Fields[1].AsBoolean then - Write(f,'',db.Fields[0].AsString,'') - else - Write(f,'',db.Fields[0].AsString,'') - end - else begin - if db.Fields[1].AsBoolean then - Write(f,', ',db.Fields[0].AsString,'') - else - Write(f,', ',db.Fields[0].AsString,'') + dmData.Q1.Close; + dmData.Q1.SQL.Text := 'select upper(left(loc,4)) as lll FROM cqrlog_main where loc like '+ + QuotedStr(ll+'%')+' and band = '+QuotedStr(cmbBands.Text)+ + 'and ('+tmp+') group by lll order by loc'; + dmData.Q1.Open; + cfm := 0; + while not dmData.Q1.Eof do + begin + if db.Locate('LOC',dmData.Q1.Fields[0].AsString,[]) then + begin + db.Edit; + db.Fields[1].AsBoolean := True; + db.Post + end; + inc(cfm); + dmData.Q1.Next + end; + sum_cfm := sum_cfm + cfm end; - db.Next; + dmData.Q1.Close; + + db.IndexFieldNames := 'loc'; + db.First; + while not db.Eof do + begin + if db.Bof then + begin + if db.Fields[1].AsBoolean then + Write(f,'',db.Fields[0].AsString,'') + else + Write(f,'',db.Fields[0].AsString,'') + end + else begin + if db.Fields[1].AsBoolean then + Write(f,', ',db.Fields[0].AsString,'') + else + Write(f,', ',db.Fields[0].AsString,'') + end; + db.Next; + end; + Writeln(f,''); + Writeln(f,''); + Writeln(f,''); + Writeln(f,''); + Writeln(f,'WKD: ',wkd,'
'); + if tmp<>'' then + Writeln(f,'CFM: ',cfm,''); + Writeln(f,'
'); + Writeln(f,''); + Writeln(f,''); + dmData.Q.Next + finally + FreeAndNil(db) end; - Writeln(f,''); - Writeln(f,''); - Writeln(f,''); - Writeln(f,''); - Writeln(f,'WKD: ',wkd,'
'); - if tmp<>'' then - Writeln(f,'CFM: ',cfm,''); - Writeln(f,'
'); - Writeln(f,''); - Writeln(f,''); - dmData.Q.Next end; Writeln(f,''); Writeln(f,'
'); @@ -234,8 +251,8 @@ begin CopyFile(TmpFile,ExtractFileNameWithoutExt(TmpFile)+'.html'); IpHtmlPanel1.OpenURL(expandLocalHtmlFileName(ExtractFileNameWithoutExt(TmpFile)+'.html')) finally - db.Close; - FreeAndNil(db) + //db.Close; + //FreeAndNil(db) end end;