📄 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 + -