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

delphi SQL查询并显示

发布网友 发布时间:2022-04-07 19:28

我来回答

6个回答

懂视网 时间:2022-04-07 23:49

为方便自己工作,使用delphi开发的一个数据库查询分析管理工具.分享给大家,具体以下特点:

 

1.由于使用ADO连接,理论支持SQL Server、Access、MySQL、Oracle等所有数据库

2.支持SQL关键词自动提示

3.支持表名自动提示

4.支持表字段自动提示

5.支持SQ关键词、表名、表字段不同颜色显示

6.支持SQL语句注释(包括ACCESS)

7.支持选择部分文字执行SQL语句

8.查询结果支持增加、修改、编辑

9.绿色程序无附加文件,只有一个文件即可运行,文件大小只有400k

 

注意:首次运行请根据提示配置udl文件

 

下载地址:http://download.csdn.net/detail/u011883102/8743797

阿庆SQL智能查询分析器,使用delphi开发的一个数据库查询分析管理工具.分享给大家

标签:

热心网友 时间:2022-04-07 20:57

DBGrid组件是用来显示数据表的。

Delphi数据库处理

第一节 BDE、ADO、InterBase和dbExpress

Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi
6.0开始还加入了一种dbExpress方法。 另外,Delphi还提供了专门处
理Borland 公司自己的数据库产品InterBase 数据库的专门的方法。
BDE(Borland Databas Engine), 是Delphi中最古老的技术,从
delphi 2.0加入BDE 技术以后,一直是Delphi处理数据库的事实上的标
准。BDE 是一个基于驱动程序的体系结构,每一种数据格式或数据源都
有一种驱动程序来驱动相近的数据源。BDE 可以很好的支持现在最流行
的ODBC API方法,
ODBC是一种C/C++ 应用程序编程接口(API ),无论是对任何一种
客户/ 服务器关系型数据库管理系统(RDBMS ),还是最流行索引顺序
访问方法(ISAM)数据库(Jet、Foxpro), 都能很好的访问。
同时,由于BDE 的驱动程序主要直接来自于第三方开发商,所以,
对于像Oracle这些非微软的数据库,执行效率上比较高。正是这些特点,
使BDE 技术还是得到了很多数据库开发程序员的欢迎。
ADO 技术是微软提出来的处理关系型数据库和非关系型数据库的新
技术,它基于微软被称为OLE DB的数据访问模式,它是专门为了给大范
围商业数据源提供访问而设计的,包括传统的关系型数据表、电子邮件
系统、图形格式、Internet资源等。ADO 所需内存更少,更适合大流量
和大事务量的网络计算机系统。
ADO 顶层有三个对象:Connection、Command、Recordset。
Connection用以指定数据源,建立和数据源的连接。
Command 对象用以对数剧源执行指定的命令,可以接受SQL 语句,
表和存储过程的名称,执行SQL 查询,更新数据,插入纪录等。
Recordset 对象表示的是来自表或命令执行结果的记录全集,操纵
来自提供者的几乎所有数据。
由于ADO 技术的迅速普及,从Delphi 5.0 开始,加入了ADO 技术
的模块,并逐步成为Delphi数据库设计的主流。但是,和VB的ADODC 相
比,它还是有所不同的,在数据绑定上,它更多的吸收了BDE 的特点,
以做到和原来的程序兼容,同时,它又可以接受标准ADO 技术的各种属
性和方法,在接受这些属性和方法时,它是和数据绑定控件脱离的,当
然从某种意义上来说,这种方案提高了执行效率,给设计人员以更多的
选择。
dbExpress 是Delphi 6.0加入的最新的数据库模块,它不使用缓存,
可以快速浏览大量的数据,但是,不使用缓存就不能更改,所以它的标
准方式是只读的。它一个重要的特点是交叉平台,可以和Linux 数据库
连接,速度相当快。
下面的讨论,将以ADO 技术为主线,最后再说明BDE 和dbExpress
的应用方式。

第二节 ADO 面板的主要组件

ADO 面板一共有7 个组件:

ADOConnection: 主要用于建立数据库的连接;
ADOdataSet:ADO 提取和操作数据库的主要数据集,可以直接连接
到数据库,也可以通过 ADOConnection连接到数据库。
ADOtable:主要用以操作和提取单个基表的数据,可以直接连接到
数据库,也可以通过 ADOConnection连接到数据库。
ADOquery:通过SQL 语言提取数据,其连接数据库的方式和前两种
一样。
ADOStoredProc: 这个组件专门用于运行数据库中的存储过程。
ADOCommand:该组件用于运行一些SQL 命令,这个组件可以和支持
数据集的组件一起使用,也可以直接从一个基表中提取一个数据集。
RDSConnection: 一个进程或一台计算机传递到另一个进程或计算
机的数据集合。
为了连接数据绑定控件,上述组件往往要和处于Data Access 中的
Datasource配合使用。
可以看出,和VB的ADODC 不同的,Delphi中解决同一个问题提供了
多种方案,看起来似乎增加了麻烦,但是却可以给程序员更大的自由空
间,便于设计出高效率的数据库程序来。
下面通过几个例子来说明ADO 控件的用法。

第三节 ADOtable组件

ADOtable、ADOdataSet、ADOquery和ADOStoredProc都继承了同一
个父类TCustomADODataSet,所以,在属性事件和方法上有很多相似的
地方,但它主要是针对数据库中的表进行操作。

ADO -〉ADOtable
属性:
Name='控件名'
ConnectionString='连接字符串'
可以通过点击右边的按钮,通过向导建立数据源。有时候需要
知道相对路径,可以用下面的方法找到程序当前的路径:

tpath:=ExtractFilepath(Application.Exename);

文件名:=Tpath+'..\data\Test.mdb'

表明数据库在当前程序上一层的Data文件夹下。

TableName='表名'
Active=true

这就激活了数据源,为了和绑定控件联系,要增加一个DadaSource
控件。事实上,所有的绑定控件都是和DadaSource联系。

Data Access-〉DadaSource
属性:
Dataset=ADOtable.Name

加入绑定控件:
Data Controls-〉

DBgrid(表格)
属性
DadaSource='DadaSource.Name'

DBNavigator(导航条)
属性
DadaSource='DadaSource.Name'

运行一下可以看出关系

下面介绍一下ADOtable的一些重要的方法,这些方法大部分和Table
是兼容的。
为了便于叙述,ADOtable控件的Name定为 ADOtable1

1)移动指针

第一个: ADotable1.First;
最后一个: ADotable1.Last;
下一个: ADotable1.Next;
前一个: ADotable1.Prior;

2)从字段中取出数据
通过如下方法可以访问字段的值

ADOtable1.FieldValues['字段名']
ADOtable1.Field[索引值]

在读写字段的时候,又是根据需要可以加上强制类型转换
例如:
Edit1.text:=ADOtable1.Field[0].AsString;

用下面的方法可以去除字段的性质:

ADOtable1.fielddefs[索引值].name; 字段名
ADOtable1.fielddefs[索引值].Size; 字段大小
ADOtable1.fielddefs[索引值].Datatype; 字段属性

3)修改数据:
修改数据的时候,需要先建立EDIT方法,然后用Post方法才能真
正的写入。

ADOtable1.edit;
ADOtable1.FieldValues['姓名']:='王秀琴';
ADOtable1.post;

4)增加一条空纪录: ADOtable1.append;

新增纪录也可以用如下方法,在新增纪录的同时输入数据

ADOtable1.appendRecord(xxx,xxx,xxx,....);

5)删除当前纪录:ADOtable1.delete;
如果在ADOtable1的OnBeforeDelete方法中写下:
if messagedlg('确实要删除吗?',mtinformation,[mbyes,mbno],
0)=mrno then abort();
可以实现删除前的提示。

6)过滤
可以用如下的方法实现数据的过滤

在ADOtable1的OnFilterRecord方法中写下:
Accept:=(条件);

然后

ADOtable1.filtered:=true; 为实现过滤。
ADOtable1.filtered:=false; 为解除过滤。

7)指针在文件的头尾

指针在最后一条记录之后 ADOtable1.Eof
指针在第一条记录之前 ADOtable1.Bof

如此可以实现对数据库的遍历

form1.ADOtable1.first;
while not form1.ADOtable1.eof do
Begin
.......
form1.ADOtable1.next;
End;

8)此外, ADOtable组件还继承了ADO 中的RecordSet对象几乎
全部属性和方法,简述如下:

with adoTable1.Recordset do
begin

//属性
PageSize 一页所包含的记录数
PageCount 数据的页数
AbsolutePage; 当前记录所在页
AbsolutePosition; 当前记录的序号位置
BOF; 指针在第一个记录之前
EOF; 指针在最后一个记录之后

//方法
AddNew fieldList,Values; 创建新记录,其中fieldList为用数
组表示的字段名集,Values为用数组表
示的数据集。
Cancel; 取消上一步所作的修改
Update Fields,Values; 保存对当前记录所作的修改
Delete; 删除当前记录
Move(n); 移动n 条记录
MoveFirst; 移动到第一条纪录
MoveLast; 移动到最后一条纪录
MoveNext 移动到下一条纪录
MovePrevious 移动到上一条纪录
Requery; 通过从新执行对象所基于的查询,以
更新RecordSet 对象中的数据。
end;

使用Recordset 对象来处理数据集的数据,会发现数据帮定控件的指
针一般不会跟着移动,这实际上给设计者提供了另一个在后台快速处理数
据的方法。
附录:关于TActionList控件的使用

在Standard面板,提供了一个TActionList 控件,它集中了大部分按
钮的使用方法,可以简化按钮的设计。
方法:
调入TActionList,双击,可以看到一个面板,右键 -〉New Standard
Action 选择 Datasat下的适当的控制,可以选择多个。
以后加入的开关,只要在属性Action 中选择适当的项目就可以了,不
需要专门编程,实例见“ActionList应用”。

第四节 ADOQuery组件

和ADOtable组件一样,ADOquery继承了同一个父类TCustomADODataSet,
所以,上面说到的ADOtable属性事件和方法基本上是通用的,但它主要是
针对数据库中的SQL 命令进行操作。
下面主要说一下ADOquery特殊的地方。

1)SQL 属性
SQL 是TStrings类型的属性,包含了ADOquery组件要执行的SQL 命令,
是ADOquery最为重要的属性之一。
在应用程序中,需要调用Open方法或者ExecSQL 方法来执行在SQL 中
的命令。在设计阶段,可以利用属性编辑起来编写。
例如:
Width ADOquery do
Begin
//重新写入时,要关闭原来的查询
Close;
width SQL do
Begin
//因为Add是在原来的基础上加入,所以先清除原来的SQL命令
Clear;
Add('selsct 编号,姓名,奖金')
Add('From 奖金表')
End;
//执行SQL 命令
Open;
End;

查询命令也可以这样来写:

s1:='编号';
s2:='姓名';
s3:='金额';
with ADOquery1 do
begin
sql.Clear;
SQL.Add('select ');
SQL.Add(s1+','+s2+','+s3);
SQL.Add(' From 奖金 ');
execsql;
active:=true;
end;

效果是一样的。

第五节 ADOConnection 和 ADODataSet

虽然ADOTable和ADOQuery组件可以非常简单的连接数据库,但是当需
要更加精细的控制数据库的时候,往往需要应用ADO 更多的方法,我们知
道,支撑ADO 的主要由Connection,Command,Recordsrt三个对象组成,
对应的就有ADOConnection和ADOCommand控件,而Recordsrt对象属性和方
法,封装在ADODataSet中,同时ADODataSet本身,也具备和ADOtable组件
相同的对数据绑定控件控值的属性和方法。
这就大大提高了对数据库的控制能力。
在ADO 顶层有三个对象中Connection处在最顶层,用以指定数据源,
建立和数据源的连接。所以,ADOConnection必须和其它的数据控件连接
才有效,最常用的就是和ADODataSet配合。
下面首先介绍连接方法,然后再讨论其它的问题

1)ADOConnection的加入和连接

加入ADOConnection
属性:ConnectionString='连接字符串'

加入ADODataSat
属性:Connection='ADOConnection1' ..... (ADOConnection,Name)
CommandType=cmdtable ...使用表连接
CommandText 根据上面的选择,或选择表,或出现SQL 编辑框。
Active=True 激活。
加入DataSource
属性:Dataset=ADODataSat 完成连接,再连接数据绑定控件。

2)ADOConnection的重要属性和方法

属性:

a).Attributes
设置连接的数据库自动处理事务的能力
xCommitRetaining:提交一个事务后自动开始一个新事务
xAbortRetaining :回退一个事务的同时开始一个新事务

b).Connected
标识和数据库的连接受否处于激活(True)

方法:

c).Open(UserID,PassWord)
打开一个连接(可以提供用户名和密码)

d).Cancel
关闭数据库的连接

e).Close
释放所有的系统关联资源

f).Execute 执行一个SQL 命令。
完整的表述是

Execute(SQL命令,该命令设计的记录数目,Option)

其中,Option的值如下

eoAsyncExecute 异步执行指定的命令
eoAsyncFetch 给定Cache属性的值后,再异步的取得数据
eoAsyncFetchNonBlocking 非阻塞式线程执行
eoExecuteNoRecords 没有返回纪录

g).GetProcereNames(List:Tstring);

获取数据库服务器上的存储过程名称,过程名保留在List参
数中。
f).GetTableNames(List:Tstring;SystemTables:Boolean=False)

获取数据库的数据表,表名存放在List参数中,SystemTables
指示是否获取数据库系统表的名称,系统表是关于数据库类型定义
和用户信息的数据表,是数据库本身自动产生的。在特殊的设计中,
这个表格可能会有用。

3)ADODataSet的属性和方法
我们在ADOTable中讨论的属性和方法,几乎都可以在ADODataSet中得
到应用,但还有几个特殊的属性:

CommandType

主要用于控制CommandText属性的状态,其中:

cmdtable ...CommandText使用“表名”连接
(内部是做了SQL 对各列的查询);
cmdTableDirect ...CommandText使用“表名”连接
(内部不做SQL ,而是真正的表名连接);
cmdtext ....使用SQL命令文本;
cmdfile ....CommandType属性值作为持久的文件名;
cmdStoredProc...CommandType属性值作为存储过程名称
来计算;
cmdUnKnown ....不知道(默认为SQL)

CommandText
根据CommandType的设置,向提供者发出“表名”或SQL 命令。

热心网友 时间:2022-04-07 22:15

stringgrid.rows:=adoquery.recordcount;
while not adoquery.eof
begin
stringgrid.cells[0,stringgrid.row]:=adoquery.fieldbyname('姓名').asstring;
stringgrid.cells[1,stringgrid.row]:=adoquery.fieldbyname('性别').asstring;
stringgrid.cells[2,stringgrid.row]:=adoquery.fieldbyname('上班').asstring;
stringgrid.cells[3,stringgrid.row]:=adoquery.fieldbyname('下班').asstring;

adoquery.next;
end;
就可以实现了

热心网友 时间:2022-04-07 23:50

有点不太明白,你是想把adoquery1中flashname字段的值自动赋给combobox1吧?
定义一个变量:var
i:integer;
combobox1.clear;
adoquery1.first;
if
combobox1.items.indexof(adoquery1.fieldvalues['flashname'])
then
//此处为避免combobox1中出现重复
begin
for
i:=0
to
adoquery1.recordcount-1
do
begin
combobox1.items.add(adoquery1.fieldvalues['flashname']);
adoquery1.next;
end;
end;
combobox1.text:=combobox1.items[0];让text中显示第一个值.

热心网友 时间:2022-04-08 01:41

//初始化stringgrid
procere TF_wgsss.FormActivate(Sender: TObject);
begin
StringGrid1.ColWidths[0]:=35;
StringGrid1.ColWidths[1]:=200;
StringGrid1.ColWidths[2]:=160;
StringGrid1.ColWidths[3]:=160;

StringGrid1.Font.Size :=12;
StringGrid1.Cells[0,0]:='姓名';
StringGrid1.Cells[1,0]:='性别';
StringGrid1.Cells[2,0]:='上班';
StringGrid1.Cells[3,0]:='下班';
end

procere TF_wgsss.SpeedButton1Click(Sender: TObject);
var i,k:integer;
ado:TADOQuery;
begin

dm.con;
ado:=Tadoquery.Create(self);
ado.Connection:=conn;
with ado do
begin
close;
sql.Clear;
sql.Add('select * from kaoqin');
open;
end;
if ado.RecordCount =0 then
begin
for k:=1 to StringGrid1.RowCount-1 do
for i:=0 to 3 do StringGrid1.Cells[i,k]:= '';
StringGrid1.RowCount:=2;
exit;
end;
ado.First;
stringgrid1.RowCount:=ado.RecordCount +1;
for i:=1 to ado.RecordCount do
begin
stringgrid1.cells[0,i]:=ado.fieldbyname('姓名').asstring;
stringgrid1.cells[1,i]:=ado.fieldbyname('性别').asstring;
stringgrid1.cells[2,i]:=ado.fieldbyname('上班').asstring;
stringgrid1.cells[3,i]:=ado.fieldbyname('下班').asstring;

ado.Next;
end;

ado.Free;
conn.Free;

end;

热心网友 时间:2022-04-08 03:49

自己控制啊,读一条显示一条

偷懒的话用 DBGRID
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为平板变电脑无法适配怎么办华为平板电脑无法连接电脑 华为平板电脑有线网络设置在哪平板电脑要连接有线网络怎么设置_百度... diskgenius怎么恢复格式化文件 电脑内文件丢失了怎么恢复电脑文件夹丢失的文件怎么恢复 格式化数据恢复,4个方法,恢复文件好帮手 闲鱼上卖假货订单被投诉商家害不害怕-闲鱼举报假货但是商家下架了怎么... Mysql安装注意事项、安装失败的五个原因分析 ...安装 mysql 的时候提示"系统管理员设置了系统策略禁止进行此安装"有... 如何辨别烟好坏 换流站典型施工工艺标准化手册:土建篇图书目录 三方还款协议该如何写?非常感谢 糖酒会是什么协会组织的啊 中国焙烤食品糖制品工业协会的入会须知 阿司帕坦的别名是“蛋白糖”吗? 微信没声音怎么设置 甘蔗糖业是否核心期刊 农业对糖业有何补贴政策? 吃糖有啥好处啊? 人在什么时候需要吃糖?要注意些什么? 电脑窗口:“向下还原”的问题 真的是糖精打败了糖吗 为什么上微信往下拉出现个“按住拍”后就恢复不到正常了?动都动不了 向下还原键是用来干什么的? 中国有多少协会 如何取消窗口“向下还原”? 食糖可以完全不吃么? 中国糖都是哪个城市 Q版黏土人的制作材料是什么制作流程是怎么样的?《说的不是粘土人!!》 中国糖业协会的介绍 2002年8月2日属什么生肖 男友回复消息很敷衍,女人该怎么“挽回”? 黄晓明版鹿鼎记片尾曲《回转》歌词 金俊秀《回转》《讨厌爱情》中文歌词及音译歌词 哪里有鹿鼎记片尾曲的LRC歌词 现在的腾讯视频为什么没有缓存的tdl文件了? 求金俊秀《回转》音译歌词 男友没有删除女友微信有时发视频号和朋友圈就是不回微信能挽回吗? 小花仙插曲回转成王的歌词是什么 你知道怎么把m3u8格式转换成mp4吗? 求回转企鹅罐 灰色の水曜日 罗马音 初三以来作文600字以上 格力空调为什么按了清洁之后不显示温度,而且也觉得温度没之前那么凉了 转动(林俊杰)的简谱 男朋友不接电话不回短信,微信删掉了,也没有说分手。我该怎么办? 准备1万5千元,买佳能单反还是尼康单反,能给出具体的型号吗!佳能和尼康的型号(数字)和价格有关系吗 ノルニル中文歌词 好友验证的头像拍一拍会显示吗? 我男友怎么挽回,我给他发了求和信息他不理我? 野葡萄多少钱一斤? 买了个榴莲才开了一条小缝,如何判断熟了没有,现在是打开呢,还是再放几天。求教!