问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在Delphi中用ADOTable控件实现数据库的查询增加删除和修改

发布网友 发布时间:2022-04-08 03:16

我来回答

4个回答

懂视网 时间:2022-04-08 07:38

1、CoInitialize 没有调用(CoInitialize was not called);所以,在使用任何dbGo对象前,必须手 调用CoInitialize和CoUninitialize。调用CoInitialize失败会产生"CoInitialize was not called"例外。

2、画布不允许绘画(Canvas does not allow drawing);所以,必须通过Synchronize过程来通知主线程访问主窗体上的任何控件。

3、不能使用主ADO连接(Main TADoConnection cannot be used!);所以,线程中不能使用主线程中TADOConnection对象,每个线程必须创建自己的数据库连接。

     Delphi2007安装后在X:Program FilesCommon FilesCodeGear SharedData目录下有一个dbdemos.mdb文件,用来作为测试的例子。dbdemos.mdb中的customer表保存了客户信息,orders表中保存了订单信息。

       测试程序流程大致是这样的:在主窗体上放TADOConnection和TQuery控件,启动时这个TQuery从Customer表中查出客户编码CustNo和公司名称Company,放到三个Combox框中,分别在三个列表框中选定客户公司名称,按照公司名称所对应的客户代码建立三个线程同时在orders表中查询销售日期SaleDate分别填入ListBox中。

 

 

 

 1 {主窗体代码}
 2 unit Main;
 3 interface
 4 uses Windows, Messages, SysUtils, Variants,
 5  Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls;
 6 type
 7 TForm2 = class(TForm)
 8  ComboBox1: TComboBox;
 9  ComboBox2: TComboBox;
10  ComboBox3: TComboBox;
11  ListBox1: TListBox;
12  ListBox2: TListBox;
13  ListBox3: TListBox;
14  Button1: TButton;
15  ADOConnection1: TADOConnection;
16  ADOQuery1: TADOQuery; 
17  Label1: TLabel;
18  Label2: TLabel;
19  Label3: TLabel;
20 procedure FormCreate(Sender: TObject); 
21 procedure Button1Click(Sender: TObject);
22 private { Private declarations }
23 public { Public declarations }
24 end;
25 var Form2: TForm2;
26 implementation
27 uses
28  ADOThread;
29 {$R *.dfm}
30 
31 procedure TForm2.Button1Click(Sender: TObject);
32 const 
33 SQL_CONST=‘Select SaleDate from orders where CustNo = %d‘;
34 var c1,c2,c3:Integer; s1,s2,s3:string;
35 begin //取得三个选择框客户的编码
36 c1:=Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
37 c2:=Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
38 c3:=Integer(ComboBox3.Items.Objects[ComboBox3.ItemIndex]); //生成SQL 查询语句
39 s1:=Format(SQL_CONST,[c1]);
40 s2:=Format(SQL_CONST,[c2]);
41 s3:=Format(SQL_CONST,[c3]); //三个线程同时查询
42  TADOThread.Create(s1,ListBox1,Label1);
43  TADOThread.Create(s2,ListBox2,Label2);
44  TADOThread.Create(s3,ListBox3,Label3);
45 end;
46 
47 procedure TForm2.FormCreate(Sender: TObject);
48 var
49 strSQL:string;
50 begin
51 strSQL:=‘SELECT CustNo,Company FROM customer‘;
52  ADOQuery1.Close;
53  ADOQuery1.SQL.Clear;
54  ADOQuery1.SQL.Add(strSQL);
55  ADOQuery1.Open;
56  ComboBox1.Clear;
57  ComboBox2.Clear;
58 ComboBox3.Clear; //将客户Company和相关CustNo填到ComboBox中
59 while not ADOQuery1.Eof do
60 begin
61 ComboBox1.AddItem(ADOQuery1.Fields[1].asString, TObject(ADOQuery1.Fields[0].AsInteger));
62  ADOQuery1.Next;
63 end;
64  ComboBox2.Items.Assign(ComboBox1.Items);
65 ComboBox3.Items.Assign(ComboBox1.Items); // 默认选中第一个
66 ComboBox1.ItemIndex := 0;
67 ComboBox2.ItemIndex := 0;
68 ComboBox3.ItemIndex := 0;
69 end;
70 end.

 

 

 1 {ADO查询多线程单元}
 2 unit ADOThread;
 3 interface
 4 uses
 5  Classes,StdCtrls,ADODB;
 6 type TADOThread = class(TThread)
 7 private { Private declarations }
 8  FListBox:TListBox;
 9  FLabel:TLabel;
10  ConnString:WideString;
11 FSQLString:string;
12 procedure UpdateCount;
13 protected procedure Execute; override;
14 public constructor Create(SQL:string;LB:TListBox;Lab:TLabel);
15 end;
16 
17 implementation
18 uses
19  Main,SysUtils,ActiveX;
20 { TADOThread }
21 
22 constructor TADOThread.Create(SQL: string; LB: TListBox;Lab:TLabel);
23 begin
24 ConnString:=Form2.ADOConnection1.ConnectionString;
25 FListBox:=LB;
26 FLabel:=Lab;
27 FSQLString:=SQL;
28  Inherited Create(False);
29 end;
30 
31 procedure TADOThread.Execute;
32 var
33  Qry:TADOQuery;
34  i:Integer;
35 begin { Place thread code here }
36 FreeOnTerminate:=True;
37 CoInitialize(nil); //必须调用(需Uses ActiveX)
38 Qry:=TADOQuery.Create(nil);
39 try
40 Qry.ConnectionString:=ConnString; //必须有自己的连接
41  Qry.Close;
42  Qry.SQL.Clear;
43  Qry.SQL.Add(FSQLString);
44  Qry.Open;
45  FListBox.Clear;
46 for i := 0 to 100 do //为了执行久点重复历遍数据集101次
47 begin
48 while not Qry.Eof And not Terminated do
49 begin
50  FListBox.AddItem(Qry.Fields[0].asstring,nil); //如果不调用Synchronize,会出现Canvas Does NOT Allow Drawing
51  Synchronize(UpdateCount);
52  Qry.Next;
53 end;
54  Qry.First;
55 FListBox.AddItem(‘*******‘,nil);
56 end;
57 finally
58  Qry.Free;
59 end;
60  CoUninitialize;
61 end;
62 
63 procedure TADOThread.UpdateCount;
64 begin
65 FLabel.Caption:=IntToStr(FListBox.Items.Count);
66 end;
67 end.

 

 

 

程序运行结果可以看到三个线程同时执行。第一第三两个线程条件一样,查询的结果也一样。

[delphi技术]Delphi多线程数据库查询(ADO)

标签:

热心网友 时间:2022-04-08 04:46

delphi的数据库操作主要就几个方法
.insert //新增
.delete //删除
.edit //修改
.post //提交(更新到数据库)
.applyupdate //更新到数据库
.locate() //查找

在delphi帮助中查下这几个方法的使用就好了

热心网友 时间:2022-04-08 06:04

aodtable1.append; (增加)
adotable1['field1'].value:= //建立adotable1的连接后,双击,添加所有字段到列表...这样就可以使用该方法了。
...
table1.post; (保存)

---
修改用adotable1.edit;
删除用adotable1.delete;

热心网友 时间:2022-04-08 07:38

你太懒了----- 你会发现懒会让你别人花费更多的时间。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 沉夫呼妻全文翻译 CPU温度紧急!高手看看!!! 有什么软件可以监测cpu的核心温度带折线图的! i7 10750h玩游戏为什么我的cpu不论什么游戏都是90度? 求:有什么方法可以记录CPU的温度 如何检测CPU的温度是否过高? 【求教】CPU温度的问题,跪求高手! 怎么样能知道CPU的温度什么的 ??? cpu压力测试,CPU温度呈波浪形! 这个CPU温度 曲线 正常吗 玩游戏时cpu温度曲线很奇怪,不是一条直的,并且游戏帧数也不稳定。 CPU的温度怎么看,如果温度过高会有什么现象发生? 怎么打开cpu风扇温度曲线图 左图AIDA64测的,右图FurMark测,怎么看,怎么样CPU90多度?i7-9750h的笔记本 年龄最小继位的皇帝是谁??? 上任年龄最小的皇帝是? 年龄最小的皇帝是? 中国最小的皇帝是几岁? 中国历史上哪个皇帝年纪最小? 古代,年龄最小的帝王是谁,为何只当了200多天就下台了? 如何把小管家里其他同学提交的视频保存到自己的相册里 如何投资海外基金 即景作文的写作技巧 盐城好玩的地方 什么即景作文列提纲? 怎样写即景作文 部编版五上第七单元作文指导: ___即景 五年级即景作文怎么教 盐城哪个地方最好玩? 什么即景作文写什么即景才好写又容易写的好(急需) 盐城市区有哪些好玩的地方 即景作文 写作技巧 求有用 尽可能多 对写作越有帮助越好 并说说 那些是好的即景题材 课间即景作文? 即景作文提纲怎么写? 什么是即景作文 即景,作文怎么写? 什么是即景作文啊? 请提供一个简单的DELPHI查询数据库的实例,包括所有操作 无锡三雄极光的总代理是哪家啊? 昆明哪里有卖三雄极光照明的?