?? threadp.pas
字號:
//線程同步調用
P_i :=i;
P_j :=lj;
P_bz :=2;
//
P_value :=ppname[temp1];
if P_value='' then
P_value :='無法分類';
Synchronize(RunUpdate);
If Terminated Then Exit;
End;
If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('TypeNo') Then
begin
//線程同步調用
P_i :=i;
P_j :=lj;
P_bz :=2;
P_value :=TypeName[strtoint(temp[i])];
if P_value='' then//當數組里沒有這個數據,臟數據的存在或者說是99
P_value :='無法分類';
Synchronize(RunUpdate);
If Terminated Then Exit;
end;
end
else
begin//當類型號有空時
P_i :=i;
P_j :=lj;
P_bz :=2;
P_value :='無法分類';
Synchronize(RunUpdate);
end;
li :=i;
If Terminated Then Exit;
End;//For i := 0 To P_FieldCount - 2 Do
//加上數值
If querytj2.SQL.Text <> '' Then
Begin
querytj3.First;
While Not querytj3.Eof Do
Begin
If Terminated Then Exit;
if P_INDISEQBz then
begin
//速度慢,以后改
If querytj2.Locate
(querytj2.Fields.Fields[0].DisplayName+';'+
querytj2.Fields.Fields[1].DisplayName,
VarArrayOf([querytj3.Fields.Fields[0].AsString
,querytj3.Fields.Fields[2].AsString]), []) Then
begin
//線程同步調用
P_i :=li+1; //列數,此時的li為統計類型詳細項目數
P_j :=lj; //lj=2
P_bz :=3;
P_value :=querytj2.fieldbyname('sl').asstring;
Synchronize(RunUpdate);
If Terminated Then Exit;
end
Else
begin
//線程同步調用
P_i :=li+1;
P_j :=lj;
P_bz :=3;
P_value :='0';
Synchronize(RunUpdate);
If Terminated Then Exit;
end;
end
else
begin
//速度慢,以后改
If querytj2.Locate
(querytj2.Fields.Fields[querytj2.Fields.count - 2].DisplayName,
querytj3.Fields.Fields[0].AsString, []) Then
begin
//線程同步調用
P_i :=li+1; //列數,此時的li為統計類型詳細項目數
P_j :=lj; //lj=2
P_bz :=3;
P_value :=querytj2.fieldbyname('sl').asstring;
Synchronize(RunUpdate);
If Terminated Then Exit;
end
Else
begin
//線程同步調用
P_i :=li+1;
P_j :=lj;
P_bz :=3;
P_value :='0';
Synchronize(RunUpdate);
If Terminated Then Exit;
end;
end;
li := li + 1;
If Terminated Then Exit;
querytj3.Next;
End;//While Not querytj3.Eof Do
End;//If querytj2.SQL.Text <> '' Then
//一行的合計
If tital = 0 Then
Begin
If Terminated Then Exit;
//合計數值
If (querytj.fieldbyname('sl').asstring = '') Or (querytj.fieldbyname('sl').asstring = null) Then
begin
P_i :=li+2;
P_j :=lj;//lj為2開始
P_bz :=3;
P_value :='0';
Synchronize(RunUpdate);
end
Else
begin
//線程同步調用
P_i :=li+2;
P_j :=lj;
P_bz :=3;
P_value :=querytj.fieldbyname('sl').asstring;
Synchronize(RunUpdate);
If Terminated Then Exit;
end;
End;
//算出其他的數值,一行的其他
lsum :=0;
for i :=P_FieldCount - 1 to li do
begin
lsum :=lsum +Sheet.Cells[i,lj].asinteger;
end;
lsum :=Sheet.Cells[li+2,lj].asinteger-lsum;
P_i :=li+1;
P_j :=lj;
P_bz :=3;
P_value :=inttostr(lsum);
Synchronize(RunUpdate);
lj := lj + 1;//行數加
If Terminated Then Exit;
querytj.Next;
End;//While Not querytj.eof Do
//第一列第一行的合計
//線程同步調用
P_add :=false;
P_i :=0;
P_j :=Sheet.RowCount-1;
P_bz :=1;
P_value :='合計';
P_count :=P_FieldCount;
Synchronize(RunUpdate);
P_add :=true;
If Terminated Then Exit;
If querytj2.SQL.Text <> '' Then //總行數,總字段數,總的列數
GetTotal(P_j, P_FieldCount - 1, Sheet.ColCount)
Else
GetTotal(P_j, P_FieldCount - 1, P_FieldCount);
//修復個錯誤
for i:=0 to Sheet.ColCount-2 do
begin
if i<>P_FieldCount - 1 then
begin
P_i :=i;
P_j :=0;
P_bz :=3;
P_value :='';
Synchronize(RunUpdate);
end;
end;
Except
P_Exception :=ExceptObject as Exception;
Synchronize(ShowError);
P_Result :=false;
//self.DoTerminate;
End; // try/except
end;
Application.ProcessMessages;
ReleaseMutex(ZqsMutex);
End;
Procedure TDrawThread.GetTotal(i, j, k: integer);
Var
i1, j1, sum: integer;
Begin
For i1 := j To k - 1 Do//列數
Begin
sum := 0;
if P_INDISEQBz then
begin
For j1 := 3 To i - 1 Do//行數
Begin
If Terminated Then Exit;
If Sheet.Cells[i1, j1].Asstring <> '' Then
Sum := sum + Sheet.Cells[i1, j1].Asinteger
End;
end
else
begin
For j1 := 2 To i - 1 Do//行數
Begin
If Terminated Then Exit;
If Sheet.Cells[i1, j1].Asstring <> '' Then
Sum := sum + Sheet.Cells[i1,j1].Asinteger
End;
end;
P_i :=i1;
P_j :=i;
P_bz :=3;
P_value :=inttostr(sum);
Synchronize(RunUpdate);
If Terminated Then Exit;
End;
End;
Function TDrawThread.GetName(s: String): String;
Begin
If uppercase(s) = uppercase('CityNo') Then
Result := '地市'
Else If uppercase(s) = uppercase('off_no_home') Then
Result := '局向'
Else If uppercase(s) = uppercase('GradeNo') Then
Result := '星級'
Else If uppercase(s) = uppercase('SJ') Then
Result := '時間'
Else If uppercase(s) = uppercase('CustAtt') Then
Result := '性質'
Else If uppercase(s) = uppercase('ProductNO') Then
Result := '品牌'
Else If uppercase(s) = uppercase('SL') Then
Result := '數量'
Else If uppercase(s) = uppercase('Sex') Then
Result := '性別'
Else If uppercase(s) = uppercase('INDISEQ') Then
Result := '喜好'
Else If uppercase(s) = uppercase('ZTDM') Then
Result := '狀態'
Else If uppercase(s) = uppercase('YWDM') Then
Result := '業務'
Else If uppercase(s) = uppercase('GROUPCALLING') Then
Result := '行業'
Else If uppercase(s) = uppercase('bdmx') Then
Result := '變動明細'
Else If UpperCase(s) = Uppercase('GROUPCALLING') Then
Result := '企業類型'
Else If UpperCase(s) = UpperCase('IndiCode') Then
Result := '喜好'
Else If UpperCase(s) = UpperCase('Typeno') Then
Result := '類型'
Else If UpperCase(s) = UpperCase('FunType') Then
Result := '業務功能'
Else
Result := '';
If Terminated Then Exit;
End;
Function To_CityNo(pCityNo:String):Integer;
Begin
To_CityNo:=StrToInt(Copy(pCityNo,3,1));
End;
Procedure TDrawThread.initialize;
Var
query: Tquery;
i: integer;
Begin
query := Tquery.Create(Application);
query.DatabaseName := database;
query.Close;
query.SQL.Text := 'select * from T_D_City where CityNo is not null';
query.Open;
query.First;
While Not query.Eof Do
Begin
cityname[To_CityNo(Query.FieldByName('CityNo').AsString)] := Query.FieldByName('CityName').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'select * from T_D_County where CityNo Is Not Null And Off_no_home Is Not Null';
query.Open;
query.First;
While Not query.Eof Do
Begin
offname[To_CityNo(Query.FieldByName('CityNo').AsString), Query.FieldByName('off_no_home').Asinteger] :=Query.FieldByName('home_name').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'Select * From T_D_Grade where GradeNo Is Not Null';
query.Open;
query.First;
While Not query.Eof Do
Begin
starname[Query.FieldByName('GradeNo').Asinteger] := Query.FieldByName('DESCRIPTION').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'select * from T_D_Config where Upper(Par_Name)=''CUSTATT''';
query.Open;
query.First;
While Not query.Eof Do
Begin
lbname[Query.FieldByName('Par_Values').Asinteger] := Query.FieldByName('Par_Desc').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'Select * From T_D_Config Where Upper(Par_Name)=''BRANDNAME''';
query.Open;
query.First;
While Not query.Eof Do
Begin
i := ord(Query.FieldByName('Par_Values').asstring[1]);
ppname[i] := Query.FieldByName('Par_Desc').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'Select * From T_D_Config Where Upper(Par_Name)=''SEX''';
query.Open;
query.First;
While Not query.Eof Do
Begin
If UpperCase(Query.FieldByName('Par_Values').AsString)='F' Then
XBName[0]:=Query.FieldByName('Par_Desc').AsString;
If UpperCase(Query.FieldByName('Par_Values').AsString)='M' Then
XBName[1]:=Query.FieldByName('Par_Desc').AsString;
If UpperCase(Query.FieldByName('Par_Values').AsString)='O' Then
XBName[2]:=Query.FieldByName('Par_Desc').AsString;
query.next;
End;
query.Close;
query.SQL.Text := 'Select * From T_D_Config Where Upper(Par_Name)=''GROUPTYPE''';
query.Open;
query.First;
While Not query.Eof Do
Begin
TypeName[Query.FieldByName('Par_Values').Asinteger] := Query.FieldByName('Par_Desc').AsString;
query.next;
End;
query.Free;
End;
//
// P_i,P_j,P_Bz :integer;
// P_value :string;
procedure TDrawThread.RunUpdate;
begin
Sheet.Cells[P_i, P_j].Font.name := '宋體';
Sheet.Cells[P_i, P_j].Font.size := 12;
Sheet.Cells[P_i, P_j].VertAlign := vaCenter;
Sheet.Cells[P_i, P_j].HorzAlign := haCenter;
case P_Bz of
0:Sheet.Cells[P_i, P_j].Color := clBtnShadow;
1:Sheet.Cells[P_i, P_j].Color := clGrayText;
2:Sheet.Cells[P_i, P_j].Color := clBtnFace;
3:Sheet.Cells[P_i, P_j].Color := clWindow;
end;
Sheet.Cells[P_i, P_j].Borders[sAround] := XLSideBorder(clblack, slSingle);
Sheet.Cells[P_i, P_j].AsString :=P_Value;
//如果有幾個類型詳細項目就加大寬度
if not P_add then
Sheet.Cells[P_i, P_j].Width := P_count - 1;
end;
procedure TDrawThread.ShowError;
begin
application.ShowException(P_Exception);
end;
procedure TDrawThread.RunModify;
begin
if P_str='city' then//列并
begin
if P_J >1 then
if P_value=Sheet.Cells[P_I, P_J - 1].asstring then
Sheet.Cells[P_I, P_J - 1].Height := Sheet.Cells[P_I, P_J - 1].Height + 1;
end
else
if P_str='off_no_home' then
begin
if (P_J >1) and (P_I >0) then
if P_CityName=Sheet.Cells[P_I-1, P_J-1].asstring then
if P_value=Sheet.Cells[P_I, P_J - 1].asstring then
begin
Sheet.Cells[P_I, P_J - 1].Height := Sheet.Cells[P_I, P_J - 1].Height + 1;
end;
end
else
if P_str='INDISEQ' then//行合并,前面向后
begin
if P_i >P_FieldCount -1 then
if P_value=Sheet.Cells[P_I -1, P_J].asstring then
Sheet.Cells[P_I -1, P_J].Width := Sheet.Cells[P_I -1, P_J].Width + 1;
end
else
if P_str='INDISEQBZ' then//列并
begin
Sheet.Cells[P_I, P_J].Height := Sheet.Cells[P_I, P_J].Height + 1;
end;
end;
procedure TDrawThread.inisheet;
var i,j:dword;
begin
for i:=0 to sheet.ColCount -1 do
for j:=0 to sheet.rowCount-1 do
(sheet.cells[i,j].Borders [saround]:=xlsideborder(clblack ,slnone));
sheet.ColCount :=0;
sheet.RowCount :=0;
end;
End.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -