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 := to 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[].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 := ;
cbb2.ItemIndex := ;
cbb3.ItemIndex := ;
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.
ADO多线程数据库查询的更多相关文章
- 【转】Delphi多线程学习(9):多线程数据库查询(ADO)
原文:http://www.cnblogs.com/djcsch2001/articles/2382559.html ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用 ...
- 教程-Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- 多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- ADO多线程数据库总结
ADO多线程数据库查询通常会出现以下问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- ADO.Net 数据库查询
数据库中的表: VS查询代码: using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- android 多线程数据库读写分析与优化
最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWriteableDataBase() 来操作数据库,现在需要多线程并发读写,项目用的是2.2的 ...
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
- 利用C#实现分布式数据库查询
随着传统的数据库.计算机网络和数字通信技术的飞速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注.但由于其开发较为复杂,在一定程度上制约了它的发展.基于此,本 ...
随机推荐
- angular.js开发 将多页面开发成单页面
用angulara.js做单页面开发时,由于不能跨页面取数据,又需要传参,可以采用:$scope.step=0/1来解决这个问题,设置初始值为想要的页面即可.
- 最初步的.NET MvcApi + Vue 前后端分离IIS部署
一.完成项目,各个项目部署在IIS上 1.前端项目部署 完成项目后在控制台npm run build 生成了dist文件夹 主要是部署这个文件夹 打开IIS 和部署AspNet MVC项目一 ...
- Win 10 开启FTP与配置
转载:https://blog.csdn.net/qq_34610293/article/details/79210539 可能出现的问题是:设置共享文件,无法被共享.极大的可能原因是电脑防火墙的问题 ...
- 深度学习之常用linux命令总结
深度学习中常用linux命令总结 1.创建文件夹 mkdir 文件名2.删除文件 rm -d 目录名 #删除一个空目录 rmdir 目录名 #删除一个空目录 rm -r 目录名 #删除一个非空目录 r ...
- 三、深入Vue组件——Vue插槽slot、动态组件
一.插槽slot() 1.1简单插槽slot [功能]用于从父组件中,通过子组件写成双标签,向子组件中放入自定的内容 parent.vue [1]首先把child写成双标签样式,把要插入的内容放双标签 ...
- Spark学习入门(让人看了想吐的话题)
这是个老生常谈的话题,大家是不是看到这个文章标题就快吐了,本来想着手写一些有技术深度的东西,但是看到太多童鞋卡在入门的门槛上,所以还是打算总结一下入门经验.这种标题真的真的在哪里都可以看得到,度娘一搜 ...
- Gym 101158D(暴力)
题意:给定两个长度为N的字符串,1<=N<=4000,求满足字符串1中的某个区间所有的字母种类和个数都与字符串2中的某个区间相同最长的区间长度. 分析: 1.预处理每个串字母个数的前缀和. ...
- HihoCoder#1052:基因工程
HihoCoder#1052:基因工程 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段 ...
- 国产超低功耗蓝牙5.0 PHY6202替换NRF51822
现在在智能穿戴领域市场不断的追求低功耗.低成本的蓝牙芯片.蓝牙芯片目前除了Dialog公司研制蓝牙芯片是最求超低功耗的但是对于其它性能上还比较满足不了其它领域的功能,另外NORDIC.TI的蓝牙芯片虽 ...
- js ajax跨域调用
正常使用ajax调用java.com $.ajax({ type: 'get', url: 'http://www.java.com/custinfo?id=888', dataType: 'json ...