⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadp.pas

📁 delphi开发的中国移动大客户管理系统,后台数据库为oracle
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                //线程同步调用
                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 + -