delphi中的dbgrid数据操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中的dbgrid数据操作相关的知识,希望对你有一定的参考价值。

貌似很简单的问题,就是已经用ADOQuery和DataSource连接好DBGRID了,名字分别为AD_M和DS_M,我有5个按钮,我想让按钮实现添加,修改,保存,取消,删除这5个操作,增加,修改与删除操作必须得点保存后才真正存到数据库里,哦,当点取消的时候有确认是否取消的操作,是单表操作的,就这么简单,希望能给我代码和注释,我新手学的,谢谢。
那样我知道,但是要的是写的代码而不是调用事件, 而且DbNavigator的添加是像上添加的,删除弹出的窗口语句也是英语,很不方便

其实不用那么复杂.
1.放一个 Adoconnection1到 表单上,设置好数据连接字符串 并 设置 connected 属性 为 true
2 设置 adoquery1的connection 属性为 adoconnection1
3 设置 adoquery1的 sql 属性为 select * from 表名
4 设置 adoquery1的 active =true
5 设置 datasource1的dataset 属性为 adoquery1
6.再放一个 DBNavigator1 设置 datasource=datasource1
7.设置 dbgrid1的 datasource=datasource1
保存 运行 即可.注 dbnavigator 控件 中有自带代码 ...可实现 添加,删除,修改..等
要用代码 如下:
一、ADOTable对数据表的操作:

增加、修改与删除:(以线路管理为例)
1、增加:
procedure TForm7.Button1Click(Sender: TObject);
begin
ADOTable1.TableName:='线路管理';
ADOTable1.Close;
ADOTable1.Open;
adotable1.Edit;
adotable1.Insert;
adotable1.Fields[1].AsString:=edit1.Text;
adotable1.Fields[2].AsString:=edit2.Text;
adotable1.Fields[3].AsString:=edit3.Text;
adotable1.Post;
end;

2、修改:
procedure TForm7.Button2Click(Sender: TObject);
begin
adotable1.Edit;
adotable1.FieldByName('线路编号').AsString:=trim(edit1.Text);
adotable1.FieldByName('线路名称').AsString:=trim(edit2.Text);
adotable1.FieldByName('备注').AsString:=trim(edit3.Text);
end;

3、删除:
procedure TForm7.Button3Click(Sender: TObject);
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
ADOTable1.Delete;
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

二、adoquery对数据库的增加,查询,编辑,删除:
1、增加:
procedure TForm8.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.Insert;
ADOQuery1.Fields[0].AsString:=edit1.Text;
ADOQuery1.Fields[1].AsString:=edit2.Text;
ADOQuery1.Fields[2].AsString:=edit3.Text;
ADOQuery1.Fields[3].AsString:=edit3.Text;
ADOQuery1.Fields[4].AsString:=edit3.Text;
ADOQuery1.Fields[5].AsString:=edit3.Text;
ADOQuery1.Fields[6].AsString:=edit3.Text;
ADOQuery1.Post;
end;

2、查询:
procedure TForm8.Button2Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from 班次管理 where 班次编号='''+edit1.text+'''or 班次名称='''+edit2.text+''' or 开始时间='''+edit3.text+''' or 结束时间='''+edit4.text+''' or 零点之前数据流向='''+edit5.text+''' or 零点之后数据流向='''+edit6.text+''' or 备注='''+edit7.text+''''); //书写SQL语句时的格式很重要
open;
if dbgrid1.DataSource.DataSet.IsEmpty then //判断查询结果是否为空
begin
showmessage('输入错误!');
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.Add('select * from 班次管理');
adoquery1.Open;
end;
end;

end;

3、更改:
procedure TForm8.Button3Click(Sender: TObject);
begin
adoquery1.Edit;
adoquery1.FieldByName('班次名称').AsString:=trim(edit2.Text);
adoquery1.FieldByName('开始时间').AsString:=trim(edit3.Text);
adoquery1.FieldByName('结束时间').AsString:=trim(edit4.Text);
adoquery1.FieldByName('零点之前数据流向').AsString:=trim(edit5.Text);
adoquery1.FieldByName('零点之后数据流向').AsString:=trim(edit6.Text);
adoquery1.FieldByName('备注').AsString:=trim(edit7.Text);
adoquery1.Append;
end;

4、删除:
procedure TForm8.Button4Click(Sender: TObject);
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
adoquery1.Delete;
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
adoquery1.SQL.Clear; //刷新DBGRID 中显示的内容
adoquery1.SQL.Add('select * from 班次管理');
adoquery1.Open;
end;
end;

5、显示全部:
procedure TForm8.Button5Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from 班次管理');
open;
end;
end;
参考技术A 放一个 Adoconnection1到 表单上,设置好数据连接字符串 并 设置 connected 属性 为 true
2 设置 adoquery1的connection 属性为 adoconnection1
3 设置 adoquery1的 sql 属性为 select * from 表名
4 设置 adoquery1的 active =true
5 设置 datasource1的dataset 属性为 adoquery1
6.再放一个 DBNavigator1 设置 datasource=datasource1
7.设置 dbgrid1的 datasource=datasource1
保存 运行 即可.注 dbnavigator 控件 中有自带代码 ...可实现 添加,删除,修改..等
要用代码 如下:
一、ADOTable对数据表的操作:

增加、修改与删除:(以线路管理为例)
1、增加:
procedure TForm7.Button1Click(Sender: TObject);
begin
ADOTable1.TableName:='线路管理';
ADOTable1.Close;
ADOTable1.Open;
adotable1.Edit;
adotable1.Insert;
adotable1.Fields[1].AsString:=edit1.Text;
adotable1.Fields[2].AsString:=edit2.Text;
adotable1.Fields[3].AsString:=edit3.Text;
adotable1.Post;
end;

2、修改:
procedure TForm7.Button2Click(Sender: TObject);
begin
adotable1.Edit;
adotable1.FieldByName('线路编号').AsString:=trim(edit1.Text);
adotable1.FieldByName('线路名称').AsString:=trim(edit2.Text);
adotable1.FieldByName('备注').AsString:=trim(edit3.Text);
end;

3、删除:
procedure TForm7.Button3Click(Sender: TObject);
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
ADOTable1.Delete;
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

二、adoquery对数据库的增加,查询,编辑,删除:
1、增加:
procedure TForm8.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.Insert;
ADOQuery1.Fields[0].AsString:=edit1.Text;
ADOQuery1.Fields[1].AsString:=edit2.Text;
ADOQuery1.Fields[2].AsString:=edit3.Text;
ADOQuery1.Fields[3].AsString:=edit3.Text;
ADOQuery1.Fields[4].AsString:=edit3.Text;
ADOQuery1.Fields[5].AsString:=edit3.Text;
ADOQuery1.Fields[6].AsString:=edit3.Text;
ADOQuery1.Post;
end;

2、查询:
procedure TForm8.Button2Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from 班次管理 where 班次编号='''+edit1.text+'''or 班次名称='''+edit2.text+''' or 开始时间='''+edit3.text+''' or 结束时间='''+edit4.text+''' or 零点之前数据流向='''+edit5.text+''' or 零点之后数据流向='''+edit6.text+''' or 备注='''+edit7.text+''''); //书写SQL语句时的格式很重要
open;
if dbgrid1.DataSource.DataSet.IsEmpty then //判断查询结果是否为空
begin
showmessage('输入错误!');
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.Add('select * from 班次管理');
adoquery1.Open;
end;
end;

end;

3、更改:
procedure TForm8.Button3Click(Sender: TObject);
begin
adoquery1.Edit;
adoquery1.FieldByName('班次名称').AsString:=trim(edit2.Text);
adoquery1.FieldByName('开始时间').AsString:=trim(edit3.Text);
adoquery1.FieldByName('结束时间').AsString:=trim(edit4.Text);
adoquery1.FieldByName('零点之前数据流向').AsString:=trim(edit5.Text);
adoquery1.FieldByName('零点之后数据流向').AsString:=trim(edit6.Text);
adoquery1.FieldByName('备注').AsString:=trim(edit7.Text);
adoquery1.Append;
end;

4、删除:
procedure TForm8.Button4Click(Sender: TObject);
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
adoquery1.Delete;
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
adoquery1.SQL.Clear; //刷新DBGRID 中显示的内容
adoquery1.SQL.Add('select * from 班次管理');
adoquery1.Open;
end;
end;

5、显示全部:
procedure TForm8.Button5Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from 班次管理');
open;
end;
end;

回答者: handsomemank - 江湖新秀 四级 2009-7-29 10:39
添加的按钮我就不说了。代码如下:(对了,下面的dm是数据模块的名称,如果你不用到数据模块的话把它删了就可以了,不清楚可以再问)
procedure TForm2.Button1Click(Sender: TObject); //添加
begin
dm.ADOQuery1.Insert; //添加数据
end;

procedure TForm2.Button2Click(Sender: TObject); //修改
begin
dm.ADOQuery1.Edit; //修改数据
end;

procedure TForm2.Button4Click(Sender: TObject); //取消
begin
if Application.MessageBox('确实要取消吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Cancel; // 取消操作
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

procedure TForm2.Button5Click(Sender: TObject); // 删除
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Delete; //删除数据
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

procedure TForm2.Button3Click(Sender: TObject); //保存
begin
if Application.MessageBox('确实保存数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Append; //保存提交到数据库
Application.MessageBox('保存成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;
参考技术B 添加的按钮我就不说了。代码如下:(对了,下面的dm是数据模块的名称,如果你不用到数据模块的话把它删了就可以了,不清楚可以再问)
procedure TForm2.Button1Click(Sender: TObject); //添加
begin
dm.ADOQuery1.Insert; //添加数据
end;

procedure TForm2.Button2Click(Sender: TObject); //修改
begin
dm.ADOQuery1.Edit; //修改数据
end;

procedure TForm2.Button4Click(Sender: TObject); //取消
begin
if Application.MessageBox('确实要取消吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Cancel; // 取消操作
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

procedure TForm2.Button5Click(Sender: TObject); // 删除
begin
if Application.MessageBox('确实要删除当前数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Delete; //删除数据
Application.MessageBox('删除成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

procedure TForm2.Button3Click(Sender: TObject); //保存
begin
if Application.MessageBox('确实保存数据吗?','提示',mb_YesNo)=ID_Yes then
begin
try
dm.ADOQuery1.Append; //保存提交到数据库
Application.MessageBox('保存成功','提示',64);
except
Application.MessageBox('系统出错','提示',64);
end;
end;
end;

以上是关于delphi中的dbgrid数据操作的主要内容,如果未能解决你的问题,请参考以下文章

delphi dbgrid 修改、更新、删除

delphi中,如何向dbgrid中添加数据记录并自动刷新

Delphi DBGrid记录移动问题!

delphi的DBgrid怎么获取当前记录的上一条bookmark,dbgrid的数据源是dataset

Delphi中DBgid的操作问题

Delphi实现DBGrid全选和反选功能