对数据库进行操作后,如何让DBGRID自动刷新?

时间:2022-10-24 07:56:21
我现在往数据库里面插入一条纪录,但是在DBGRID里面却看不到新增加的数据,请问如何刷新才能看到?

DBGRID1的DATASOURCE属性是DATASOURCE1
DATASOURCE1的DATASET属性是adoquery1

有一个增加记录的按钮,代码如下:

strsql:='insert into table(name,phone) values(''张三'',''12345678'')';

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(strsql);
adoquery1.ExecSQL;
datasource1.DataSet.Close;
datasource1.DataSet.Open;

结果提示:'当前提供程序不支持从单一执行返回多个记录集'.

应该如何解决呢?

5 个解决方案

#1


DBGRID1是用来显示查询的数据,你为什么要连接adoquery1插入数据集呢?这明显是个错误,DBGRID1要连接一个adoquery2的查询数据集.在adoquery2的SQL里你再写查询语句"select * from table1"

#2


datasource1.DataSet.Close; 
datasource1.DataSet.Open; 
也要删除掉

#3


78hgdong  
你的方法是重新查询一遍,而不是刷新,我希望刷新后的结果是,光标要定位在刚才新增加的那一条纪录上,而不是光标定位在第一条记录上.

#4


刷新前保存关键字段值  刷新后ado.Locate('关键字段名',保存起来的值,[]);

#5


vName := adoquery1.fieldbyName('name').asString;
datasource1.DataSet.Close; 
//插入数据
strsql:= 'insert into table(name,phone) values( ' '张三 ' ', ' '12345678 ' ') '; 
adoquery1.Close; 
adoquery1.SQL.Clear; 
adoquery1.SQL.Add(strsql); 
adoquery1.ExecSQL; 
//刷新数据
strsql:= 'select name,phone from table'; 
adoquery1.Close; 
adoquery1.SQL.Clear; 
adoquery1.SQL.Add(strsql); 
adoquery1.Open; 
//定位原位置
adoquery1.Locate( 'name',vName,[]);
datasource1.DataSet.Open; 

#1


DBGRID1是用来显示查询的数据,你为什么要连接adoquery1插入数据集呢?这明显是个错误,DBGRID1要连接一个adoquery2的查询数据集.在adoquery2的SQL里你再写查询语句"select * from table1"

#2


datasource1.DataSet.Close; 
datasource1.DataSet.Open; 
也要删除掉

#3


78hgdong  
你的方法是重新查询一遍,而不是刷新,我希望刷新后的结果是,光标要定位在刚才新增加的那一条纪录上,而不是光标定位在第一条记录上.

#4


刷新前保存关键字段值  刷新后ado.Locate('关键字段名',保存起来的值,[]);

#5


vName := adoquery1.fieldbyName('name').asString;
datasource1.DataSet.Close; 
//插入数据
strsql:= 'insert into table(name,phone) values( ' '张三 ' ', ' '12345678 ' ') '; 
adoquery1.Close; 
adoquery1.SQL.Clear; 
adoquery1.SQL.Add(strsql); 
adoquery1.ExecSQL; 
//刷新数据
strsql:= 'select name,phone from table'; 
adoquery1.Close; 
adoquery1.SQL.Clear; 
adoquery1.SQL.Add(strsql); 
adoquery1.Open; 
//定位原位置
adoquery1.Locate( 'name',vName,[]);
datasource1.DataSet.Open;