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#实现分布式数据库查询
随着传统的数据库.计算机网络和数字通信技术的飞速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注.但由于其开发较为复杂,在一定程度上制约了它的发展.基于此,本 ...
随机推荐
- haproxy+keepalive双主高可用实现负载均衡
转载自https://blog.51cto.com/3381847248/1977073 前面我已经介绍了haproxy结合keepalive做简单的双主高可用,如果不清楚的话,可以去我的上一 篇博客 ...
- PHP时间格式
date 用法: date(格式,[时间]); 如果没有时间参数,则使用当前时间.格式是一个字符串,其中以下字符有特殊意义: Y - 年,四位数字; 如: "1999" y - 年 ...
- manjaro更换深度桌面 卸载ked桌面
下载需要的桌面环境 pacman -S deepin deepin-extra 修改/etc/lightdm/lightdm.conf sudo nano /etc/lightdm/lightdm.c ...
- Netty简单认识
简介 Netty 是由JBOSS提供的一个 Java开源框架, 现在是 Github上的开源项目 Netty 是一个异步的.基于事件驱动的网络应用框架式, 用以快速开发高性能.高可靠性的网路IO程序 ...
- DevOps - 与敏捷方法区别
章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...
- Git如何将本地test分支设置跟踪origin/test分支
前提条件: 有一个远程仓库其中只有一个master分支,然后我把它clone到本地 1.新建一个本地分支test, 2.然后把它push到远程仓库(git push origin test) 3.本地 ...
- CGridCtrl只点击规定行中的按钮才弹出对话框
在头文件中添加: afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); 添加映射:ON_NOTIFY(NM_CLICK, IDC_CUSTOM1 ...
- iphone 面试题(转)
转]iPhone 面试题解答 2011-07-20 0:51 转载自 492437598 最终编辑 492437598 1.main() { int a[5]={1,2,3,4,5}; ...
- Vulkan SDK 之 Shaders
Compiling GLSL Shaders into SPIR-V 1.SPIR-V 是vulkan的底层shader语言.GLSL可以通过相关接口转换为SPIR-V. Creating Vulka ...
- 【转载】redis.windows.conf 参数说明
1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...