zoukankan      html  css  js  c++  java
  • ADO多线程数据库查询

    {ADO查询多线程单元}
    unit ADOThread;
    interface
    uses
      Classes,StdCtrls,ADODB;
    type TADOThread = class(TThread)
      private { Private declarations }
      FListBox:TListBox;
      FLabel:TLabel;
    
      ConnString:WideString;
      FSQLString:string;
    
      sl:TStrings;
    
      procedure UpdateCount;
      protected procedure Execute; override;
      public constructor Create(SQL:string;LB:TListBox;Lab:TLabel);
    end;
    
    implementation
    uses
      unit1,SysUtils,ActiveX;
      { TADOThread }
    
    constructor TADOThread.Create(SQL: string; LB: TListBox;Lab:TLabel);
    begin
      ConnString:=Form1.con1.ConnectionString;
      FListBox:=LB;
      FLabel:=Lab;
      FSQLString:=SQL;
      Inherited Create(False);
    end;
    
    procedure TADOThread.Execute;
    var
      Qry:TADOQuery;
      i:Integer;
    begin { Place thread code here }
      FreeOnTerminate:=True;
    
      sl:=TStringList.Create;
      CoInitialize(nil); //必须调用(需Uses ActiveX)
      Qry:=TADOQuery.Create(nil);
      try
        Qry.ConnectionString:=ConnString; //必须有自己的连接
        Qry.Close;
        Qry.SQL.Clear;
        Qry.SQL.Add(FSQLString);
        Qry.Open;
        FListBox.Clear;
        for i := 1 to 1000 do //为了执行久点重复历遍数据集101次
        begin
          Qry.First;
          while not Qry.Eof And not Terminated do
          begin
            //FListBox.AddItem(Qry.Fields[0].asstring,nil);
            //FListBox.Items.Add(Qry.Fields[0].asstring);
            sl.Add(Qry.Fields[0].asstring);
            //如果不调用Synchronize,会出现Canvas Does NOT Allow Drawing
            //Synchronize(UpdateCount);
            Qry.Next;
          end;
          //Qry.First;
          //FListBox.AddItem('*******',nil);
    
          //Synchronize(UpdateCount);
        end;
        Synchronize(UpdateCount);
      finally
        sl.Free;
        Qry.Free;
      end;
      CoUninitialize;
    end;
    
    procedure TADOThread.UpdateCount;
    begin
      //FLabel.Caption:=IntToStr(FListBox.Items.Count);
      FListBox.Items.Assign(sl);
      FLabel.Caption:=IntToStr(sl.Count);
    end;
    
    
    end.
    
    
    
    
    
    
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls;
    
    type
      TForm1 = class(TForm)
        lbl1: TLabel;
        lbl2: TLabel;
        lbl3: TLabel;
        lst1: TListBox;
        lst2: TListBox;
        lst3: TListBox;
        cbb1: TComboBox;
        cbb2: TComboBox;
        cbb3: TComboBox;
        btn1: TButton;
        qry1: TADOQuery;
        con1: TADOConnection;
        procedure FormCreate(Sender: TObject);
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    uses ADOThread;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      strSQL:string;
    begin
      strSQL:='select * from tb_student';
      qry1.Close;
      qry1.SQL.Clear;
      qry1.SQL.Add(strSQL);
      qry1.Open;
      cbb1.Clear;
      cbb2.Clear;
      cbb3.Clear; //将客户Company和相关CustNo填到ComboBox中
      while not qry1.Eof do
      begin
        //cbb1.AddItem(qry1.Fields[1].asString, TObject(qry1.Fields[0].AsInteger));
        cbb1.Items.Add(qry1.fieldbyname('smc').AsString);
        qry1.Next;
      end;
      cbb2.Items.Assign(cbb1.Items);
      cbb3.Items.Assign(cbb1.Items); // 默认选中第一个
      cbb1.ItemIndex := 0;
      cbb2.ItemIndex := 0;
      cbb3.ItemIndex := 0;
    end;
    
    procedure TForm1.btn1Click(Sender: TObject);
    const 
      SQL_CONST='select sxm from tb_student where sxm';
      var c1,c2,c3:Integer; s1,s2,s3:string;
    begin //取得三个选择框客户的编码
      s1:=SQL_CONST+QuotedStr(cbb1.Text);
      s2:=SQL_CONST+QuotedStr(cbb2.Text);
      s3:=SQL_CONST+QuotedStr(cbb3.Text);//三个线程同时查询
      TADOThread.Create(s1,lst1,lbl1);
      TADOThread.Create(s2,lst2,lbl2);
      TADOThread.Create(s3,lst3,lbl3);
    end;
    
    end.
    书搞进脑袋 创新 创造; 积极
  • 相关阅读:
    c语言 作用域、存储期、链接属性汇总
    进程上下文切换分析
    进程装载过程分析(execve系统调用分析)
    fork 创建进程的过程分析
    系统调用软中断处理程序system_call分析
    linux 系统调用分析
    8分钟带你深入浅出搞懂Nginx
    控制反转
    JAVA泛型(转)
    AOP(转)
  • 原文地址:https://www.cnblogs.com/tobetterlife/p/12170718.html
Copyright © 2011-2022 走看看