亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? threadp.pas

?? 中國移動大客戶管理系統
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
//說明:
//1、字段的統一定義(都是代碼的定義):
//      地市    CITYCODE
//      局向    OFF_NO_HOME
//      星級    DJDM
//      時間    SJ
//      性質    XZDM
//      品牌    PP
//      數量    SL
//      性別    COLNAME
//      喜好    JHDM
//      狀態    ZTDM
//      業務    YWDM
//      行業    HYDM

{****************曾慶順改動*******************
1、線程的總體思路是錯的,數據庫的安全訪問的問題
2、在線程執行時一直占用主線程,調用VCL。要實現線程安全
3、刪除一些沒有必要的東西,改掉了recorecount取值的方法
//2002。09。16
4、加了互斥(臨界區),防止多線程共同申請資源時出現死鎖
   2002、08、27

   待處理的問題
   1、執行函數里有個locate
   2、執行函數的加詳細數值的循環有問題
   3、線程初始化時有問題,沒必要重復做,
      還有就是自增變量會超過長度,不能用靜態數組
**********************************************}


Unit ThreadP;

Interface

Uses
  Windows,Classes, Messages, SysUtils, Graphics, ExtCtrls, Db, DBTables, XLGrids, XLCells, forms,
  Chart, Series, Dialogs, ComObj, main ;

Type
  TQXSql = Record
    QXSumSql, QXSeriesSql, QXTotalSumSql: String;
  End;

Type

  TDrawThread = Class(TThread)
  Private
    Sheet: TXLSheet;
    Querytj, Querytj2, Querytj3: Tquery;
    cityname: Array[0..20] Of String;
    offname: Array[0..20] Of Array[0..20] Of String;
    starname: Array[0..20] Of String;
    ppname: Array[0..255] Of String;
    lbname: Array[0..20] Of String;
    xbname: Array[0..5] Of String;
    TypeName: Array[0..99] Of String;
    onecity: integer;
    tital: integer;
    querytjCount,querytj3Count :integer;
    DataBase: String;
    //全局變量
    P_i,P_j,P_Bz,P_FieldCount :integer;
    P_value,P_cityname :string;
    //標志是否加合計底下的
    P_add,P_INDISEQBz :boolean;
    //
    P_count :integer;
    //
    P_str :string;
    //異常
    P_Exception :Exception;
    temp: Array[0..49] Of Variant;
    //初始化
    Procedure initialize;
    //得到幾個轉換的名稱
    Function GetName(s: String): String;
    //
    Procedure GetTotal(i, j, k: integer);
    //用來調用vcl函數等,實現線程同步
    Procedure RunUpdate;
    //修復增加統計詳細項目信息時把該合成的加在一起
    Procedure RunModify;
    //異常處理過程
    Procedure ShowError;
    procedure inisheet;
  Protected
    Procedure Execute; Override;
  Public
    P_Result :boolean;
    Constructor Create(XLSheet: TXLSheet; QueryGroup, QueryAll, QueryCol: Tquery; count1,Count2 :integer;DataBaseName: String; OneCityName: integer = 0; title: integer = 0);
  End;
//執行為true表示成功
Function RunThead(XLSheet: TXLSheet; QueryGroup, QueryAll, QueryCol: Tquery;count1,Count2 :integer; DataBaseName: String; OneCityName: integer = 0; title: integer = 0):TDrawThread;
Function To_CityNo(pCityNo:String):Integer;

Implementation

Constructor TDrawThread.Create(XLSheet: TXLSheet; QueryGroup, QueryAll, QueryCol: Tquery;count1,Count2 :integer; DataBaseName: String; OneCityName: integer = 0; title: integer = 0);
Begin
  Inherited Create(true);
  Sheet := xlsheet;
  P_Result :=true;
  P_add :=true;
  P_INDISEQBz :=false;
  //存的是統計類型的詳細的項目
  querytj := querygroup;
  //具體的統計數值合計
  querytj2 := queryall;
  //統計的類型
  Querytj3 := querycol;
  onecity := onecityname;
  querytjCount :=count1;
  querytj3Count :=Count2;
  database := databasename;
  tital := title;


  FreeOnTerminate := True;
  Resume;
End;

//外部調用線程,返回為真就是成功
Function RunThead(XLSheet: TXLSheet; QueryGroup, QueryAll, QueryCol: Tquery;count1,Count2 :integer; DataBaseName: String; OneCityName: integer = 0; title: integer = 0):TDrawThread;
var
  draw1 :TDrawThread;
begin
  result :=nil;

  draw1 :=nil;
  try
    draw1 :=TDrawThread.Create(XLSheet,QueryGroup, QueryAll, QueryCol,count1,Count2,DataBaseName,OneCityName, title);
    result :=draw1;
  finally
    //draw1.DoTerminate;
    //draw.Suspend;
    //draw.Free;

    //draw1.Resume;
   end;
end;
Procedure TDrawThread.Execute;
Var
  i, j, temp1,li,lj,lSum: integer;
  temps,str: String;
Begin
  FreeOnTerminate:=true;
  //OnTerminate:=self.OnTerminate;
  if WaitForSingleObject(ZqsMutex,INFINITE)=WAIT_OBJECT_0 then
  begin
    Try
      initialize;
      lj :=0;
      synchronize(inisheet);//陳振劍改:修正BUG
      if querytj3.Fields.Fields[0].DisplayName = 'INDISEQ' then//喜好比較特別
         P_INDISEQBz :=true;
      if P_INDISEQBz then
      Sheet.RowCount :=querytjCount + 4
      else
      Sheet.RowCount :=querytjCount + 3;
       //如果有0表示不屬于那個城市,畫網格的列數
      If tital = 0 Then
        Sheet.ColCount := querytj3Count + querytj.Fields.Count+1
      Else
        Sheet.ColCount := querytj3Count + querytj.Fields.Count+2;
      P_FieldCount :=querytj.Fields.Count;
      Sheet.ColWidths[-1] := 0;
      Sheet.RowHeights[-1] := 0;
      If Terminated Then Exit;
      //0----clBtnShadow,1------clGrayText,2-------clBtnFace
      //畫統計的類型,比如行業等
      P_i :=P_FieldCount - 1;
      P_j :=0;
      P_bz :=0;
      P_value :=getname(querytj3.Fields.Fields[0].DisplayName);
      Synchronize(RunUpdate);


      If Terminated Then Exit;
      //畫統計的詳細項目,第一列第二行開始的幾行統計的詳細項目
      For i := 0 To P_FieldCount - 2 Do
      Begin
        //線程同步調用
        P_i :=i;
        P_j :=1;//第一列
        P_bz :=1;
        P_value :=getname(querytj.Fields.Fields[i].DisplayName);
        Synchronize(RunUpdate);
        //讓統計的詳細項目變成兩行
        if P_INDISEQBz then
        begin
          P_str :='INDISEQBZ';
          Synchronize(RunModify);
        end;
        If Terminated Then Exit;
      End;

      li :=P_FieldCount -1;
      //畫統計類型的詳細,比如行業詳細名稱的企業等
      If querytj2.SQL.Text <> '' Then
      Begin
        if querytj3.Fields.Fields[0].DisplayName = 'INDISEQ' then//喜好比較特別
        begin
          //
          querytj3.First;
          For j := 0 To querytj3Count - 1 Do
          Begin
            //線程同步調用
            //加上大類
            P_i :=li +j;
            P_j :=1;
            P_bz :=2;
            P_value :=querytj3.Fields.Fields[1].AsString;
            if P_value='' then
            P_value :='無法分類';
            Synchronize(RunUpdate);
            If Terminated Then Exit;

            //當前的大類名稱和同行的前一個比較,相同加在一起
            P_str :='INDISEQ';
            Synchronize(RunModify);

            If Terminated Then Exit;
            //加上小類
            P_i :=li +j;
            P_j :=2;
            P_bz :=2;
            P_value :=querytj3.Fields.Fields[3].AsString;
            if P_value='' then
            P_value :='無法分類';
            Synchronize(RunUpdate);
            lj :=j;
            If Terminated Then Exit;
            querytj3.Next;
          End;
        end
        else
          begin
            querytj3.First;
            For j := 0 To querytj3Count - 1 Do
            Begin
              //線程同步調用
              P_i :=li +j;
              P_j :=1;
              P_bz :=2;
              P_value :=querytj3.Fields.Fields[1].AsString;
              Synchronize(RunUpdate);
              lj :=j;
              If Terminated Then Exit;
              querytj3.Next;
            End;
          end;
      End;

      //最后一列畫上其他與合計
      If tital = 0 Then
      Begin
        P_i :=li + lj +1;
        P_j :=1;
        P_bz :=1;
        P_value :='其他';
        Synchronize(RunUpdate);
        //讓統計的詳細項目變成兩行
        if P_INDISEQBz then
        begin
          P_str :='INDISEQBZ';
          Synchronize(RunModify);
        end;
        If Terminated Then Exit;
        P_i :=li +lj+2;
        P_j :=1;
        P_bz :=1;
        P_value :='合計';
        Synchronize(RunUpdate);
        //讓統計的詳細項目變成兩行
        if P_INDISEQBz then
        begin
          P_str :='INDISEQBZ';
          Synchronize(RunModify);
        end;
        If Terminated Then Exit;
      End;
      //
      if P_INDISEQBz then
      lj := 3
      else
      lj := 2;
      //清空數組

      //畫上,第3行開始的對應的統計詳細項目的數值
      querytj.First;
      While Not querytj.eof Do
      Begin
        For i := 0 To P_FieldCount - 2 Do
        Begin
            //設置高度把相同的合并
            temp[i]:= querytj.Fields.Fields[i].Text;
  //          sheet.Cells [1,2].Free ;

            //以下判斷是哪個統計詳細項目的數值
            If (querytj.Fields.Fields[i].DisplayName <> '') and (temp[i] <> '') Then//?
            Begin

              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('CityNo')   Then
              begin
                //線程同步調用
                P_i :=i;
                P_j :=lj;
                P_bz :=2;
                P_value :=cityname[strtoint(Copy(temp[i],3,1))];
                if P_value='' then
                P_value :='無法分類';

                Synchronize(RunUpdate);
                //當前的城市名稱和同列的前一個比較,相同加在一起
                P_str :='city';
                Synchronize(RunModify);
                If Terminated Then Exit;
              end;
              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('off_no_home') Then
              Begin
                If onecity = 0 Then
                begin
                   //線程同步調用
                  P_i :=i;
                  P_j :=lj;
                  P_bz :=2;
                  P_value :=offname[strtoint(Copy(temp[i - 1],3,1)), strtoint(temp[i])];
                  if P_value='' then
                  P_value :='無法分類';
                  Synchronize(RunUpdate);
                   If Terminated Then Exit;
                end
                Else
                  begin
                    //線程同步調用
                    P_i :=i;
                    P_j :=lj;
                    P_bz :=2;
                    P_value :=offname[onecity, strtoint(temp[i])];
                    if P_value='' then
                    P_value :='無法分類';
                    Synchronize(RunUpdate);
                    If Terminated Then Exit;
                  end;
                if i>0 then
                begin
                  P_CityName :=cityname[strtoint(Copy(querytj.Fields.Fields[i -1].text,3,1))];
                  //當前的城市名稱和前1列的城市同,再看同列前一行是否同,相同加在一起
                  P_str :='off_no_home';
                  Synchronize(RunModify);
                end
                else
                  begin
                    //單個城市時
                    P_str :='city';//直接調用城市的做法就可以了
                    Synchronize(RunModify);
                  end;
              End;
              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('GradeNo') Then
              begin
                //線程同步調用
                P_i :=i;
                P_j :=lj;
                P_bz :=2;
                P_value :=starname[strtoint(temp[i])];
                if P_value='' then
                P_value :='無法分類';
                Synchronize(RunUpdate);
                If Terminated Then Exit;
              end;
              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('Custatt') Then
              begin
                //線程同步調用
                P_i :=i;
                P_j :=lj;
                P_bz :=2;
                P_value :=lbname[strtoint(temp[i])];
                if P_value='' then
                P_value :='無法分類';
                Synchronize(RunUpdate);
                If Terminated Then Exit;
              end;
              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('sex') Then
                 Begin
                    If UpperCase(Temp[i])=UpperCase('F') Then
                    begin
                      //線程同步調用
                      P_i :=i;
                      P_j :=lj;
                      P_bz :=2;
                      P_value :=xbname[0];
                      if P_value='' then
                      P_value :='無法分類';
                      Synchronize(RunUpdate);
                      If Terminated Then Exit;
                    end;
                    If UpperCase(Temp[i])=UpperCase('M') Then
                    begin
                      //線程同步調用
                      P_i :=i;
                      P_j :=lj;
                      P_bz :=2;
                      P_value :=xbname[1];
                      if P_value='' then
                      P_value :='無法分類';
                      Synchronize(RunUpdate);
                      If Terminated Then Exit;
                    end;
                    If UpperCase(Temp[i])=UpperCase('O') Then
                    begin
                      //線程同步調用
                      P_i :=i;
                      P_j :=lj;
                      P_bz :=2;
                      P_value :=xbname[2];
                      if P_value='' then
                      P_value :='無法分類';
                      Synchronize(RunUpdate);
                      If Terminated Then Exit;
                    end;
                 End;
              If UPPERcase(querytj.Fields.Fields[i].DisplayName) = uppercase('ProductNo') Then
              Begin
                temps := temp[i];
                temp1 := ord(temps[1]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本丶国产丶欧美色综合| 欧美亚洲国产怡红院影院| 日韩在线一区二区三区| 亚洲午夜久久久久久久久电影院 | 国产一区不卡视频| 美女脱光内衣内裤视频久久影院| 亚洲精选视频免费看| 亚洲欧洲综合另类| 亚洲一区在线播放| 日日摸夜夜添夜夜添精品视频| 一区二区三区在线不卡| 亚洲国产综合视频在线观看| 亚洲综合精品久久| 天天免费综合色| 美女任你摸久久| 国产一区二区福利视频| 99视频有精品| 一本大道综合伊人精品热热| 欧美午夜电影在线播放| 日韩欧美一区二区久久婷婷| 国产亚洲一区二区三区四区| 亚洲黄网站在线观看| 日韩专区一卡二卡| 国产麻豆日韩欧美久久| 91浏览器打开| 日韩免费在线观看| 日韩美女久久久| 日韩高清在线一区| 成人av网址在线观看| 在线播放中文一区| 国产欧美综合色| 日日夜夜免费精品视频| 夫妻av一区二区| 欧美日韩高清影院| 最近日韩中文字幕| 免费成人av在线播放| 成熟亚洲日本毛茸茸凸凹| 欧美丰满嫩嫩电影| 最新国产成人在线观看| 国产在线精品一区在线观看麻豆| 91麻豆自制传媒国产之光| 日韩欧美色综合网站| 一二三区精品福利视频| 丁香另类激情小说| 欧美一区二区三区系列电影| 国产精品久久久久国产精品日日| 首页国产欧美久久| 91啪亚洲精品| 日本一二三不卡| 国产在线不卡一卡二卡三卡四卡| 欧美日韩亚洲高清一区二区| 欧美高清在线一区二区| 久久超碰97中文字幕| 欧美精品乱人伦久久久久久| 国产精品短视频| 成人免费毛片app| 久久久久成人黄色影片| 麻豆成人久久精品二区三区红| 91福利国产精品| 一区二区成人在线| gogogo免费视频观看亚洲一| 久久精品视频免费| 国产在线精品视频| 久久影院电视剧免费观看| 久久精品国产999大香线蕉| 欧美片在线播放| 亚洲va中文字幕| 欧美性生活大片视频| 亚洲与欧洲av电影| 欧美中文字幕一区| 亚洲成人你懂的| 欧美日韩在线播放| 亚洲国产毛片aaaaa无费看| 91原创在线视频| 亚洲欧美日韩久久| 欧美亚洲一区二区三区四区| 亚洲欧美日韩精品久久久久| 在线免费观看成人短视频| 亚洲久草在线视频| 欧美人与性动xxxx| 97精品久久久午夜一区二区三区 | 韩国一区二区三区| 2021中文字幕一区亚洲| 国产一区二区三区四区五区美女| 久久综合久久综合九色| 福利电影一区二区| 亚洲免费观看高清在线观看| 欧洲精品一区二区三区在线观看| 午夜精品福利在线| 日韩欧美色综合网站| 国产91精品精华液一区二区三区 | 精品综合久久久久久8888| 日韩女优av电影在线观看| 国产成人av一区| 国产精品超碰97尤物18| 欧美日韩视频不卡| 麻豆精品精品国产自在97香蕉| 久久久久久久久99精品| 91天堂素人约啪| 人禽交欧美网站| 国产午夜精品在线观看| 一本高清dvd不卡在线观看| 日本欧美大码aⅴ在线播放| 久久精品视频免费观看| 欧美在线观看18| 国产一区二区三区免费播放| 亚洲视频资源在线| 欧美r级电影在线观看| 不卡电影一区二区三区| 日本成人超碰在线观看| 亚洲欧洲韩国日本视频| 欧美一二三区在线观看| 91麻豆swag| 国产高清不卡二三区| 日韩制服丝袜av| 中文字幕一区二区三区在线不卡| 欧美一级日韩不卡播放免费| 91在线看国产| 一本久道久久综合中文字幕| 久久99国产精品尤物| 亚洲激情网站免费观看| 国产欧美视频一区二区| 日韩精品中文字幕在线不卡尤物| 色婷婷综合久久久久中文| 久久超碰97人人做人人爱| 一区二区三区欧美日| 国产精品毛片大码女人| 欧美一区二区三级| 欧美亚州韩日在线看免费版国语版| 国产suv一区二区三区88区| 日韩av电影免费观看高清完整版在线观看| 国产精品嫩草影院com| 久久先锋影音av鲁色资源| 91麻豆精品国产自产在线| 日本乱人伦一区| 97久久久精品综合88久久| 丁香五精品蜜臀久久久久99网站| 久久精品99国产精品| 日本不卡在线视频| 日本美女一区二区三区| 亚洲a一区二区| 亚洲福利电影网| 天天色综合天天| 日本不卡高清视频| 日本欧美在线看| 久久99精品一区二区三区三区| 亚洲永久免费视频| 亚洲一卡二卡三卡四卡无卡久久| 亚洲美女在线一区| 亚洲黄色免费电影| 亚洲一区欧美一区| 亚洲18色成人| 丁香亚洲综合激情啪啪综合| 国产精品亚洲专一区二区三区 | 欧美自拍偷拍一区| 欧美性videosxxxxx| 欧美乱妇15p| 欧美一卡2卡三卡4卡5免费| 欧美一区二区免费视频| 精品国产乱码久久久久久免费| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 五月激情六月综合| 午夜天堂影视香蕉久久| 日韩国产精品久久久久久亚洲| 精品一区二区在线观看| 国产xxx精品视频大全| 91视频免费看| 欧美精品丝袜中出| 精品国产污网站| 国产精品美女久久久久av爽李琼| 亚洲美女电影在线| 亚洲va韩国va欧美va精品| 美女视频网站久久| 成人午夜在线视频| 欧美三级视频在线| 久久久久久久久免费| 亚洲欧美视频在线观看| 青青国产91久久久久久| 国产成人精品www牛牛影视| 日韩久久精品一区| 亚洲欧洲性图库| 视频一区二区三区中文字幕| 国产一区二区三区久久悠悠色av | 欧美高清性hdvideosex| 亚洲精品一区二区三区福利 | 欧美久久久久中文字幕| 久久久久久久精| 亚洲一区av在线| 丁香网亚洲国际| 欧美日韩免费电影| 国产女人18水真多18精品一级做 | 精品在线免费观看| 99久久精品国产导航| 欧美一区二区视频在线观看2022 | 亚洲成人免费影院| 国产成人综合在线观看| 91精品国产一区二区三区蜜臀| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区三区在线看麻豆| 99国产精品久久久久久久久久久|