SELECT+ADO.OPEN和ADO.CLOSE+ADO.OPEN的区别

秋天之落叶 2018-08-10 09:16:23
我在实时刷新时使用了Timer,设置为3秒一次。
刷新方式我知道的一是SELECT * FROM TABLE+OPEN。
另外还有就是OPEN了每次直接CLOSE+OPEN刷新。
我想知道这两种方式的不同和利弊?
只是针对一个简单的表。
...全文
184 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋天之落叶 2018-08-11
  • 打赏
  • 举报
回复
这两天都试了一下,也查了查,最后选择Refresh,一是刷新后光标定位不变,二是数据表格没有闪动。
还有也查了查firedac,最大的问题在于有些SQL字段类型不太支持。
多谢楼上各位。
lyhoo163 2018-08-11
  • 打赏
  • 举报
回复
从效果上看,几个基本一致。都是将数据库中的数据,拉到DataSet数据集中。
但是,功能上是有区别的。
open,是控件连接数据表后,打开它(读取数据)
Refresh,是忆经打开该数据表,重新读取(刷新)数据

注意:open,在已经打开该数据表,再执行它无意义,只有close后再open,效果与Refresh一致。
BlueStorm 2018-08-10
  • 打赏
  • 举报
回复
如果ado的close+open就会造成数据库崩溃,那就证明ado太烂,毕竟是上古时期的东西。可改用现代一点的sdac、unidac或firedac之类的东西。
  • 打赏
  • 举报
回复
简单,这是内置的数据刷新功能,比如你用ADOQuery,只需要ADOQuery1.Refresh;就可以了

秋天之落叶 2018-08-10
  • 打赏
  • 举报
回复
引用 3 楼 DelphiGuy 的回复:
TDataSet.Refresh

嗯,有区别吗?
秋天之落叶 2018-08-10
  • 打赏
  • 举报
回复
引用 2 楼 BlueStorm 的回复:
我觉得没有什么区别。其实你自己可以测试一下,看看有什么区别。

我好像见过网上说,多次close+open会造成数据库崩溃,不知道是不是?
  • 打赏
  • 举报
回复
TDataSet.Refresh

BlueStorm 2018-08-10
  • 打赏
  • 举报
回复
我觉得没有什么区别。其实你自己可以测试一下,看看有什么区别。
秋天之落叶 2018-08-10
  • 打赏
  • 举报
回复
还有一个是ReQuery,请指教。
1,主界面 2查询功能 ‘ private void chaxun_Click(object sender, System.EventArgs e) { SqlConnection thisConnection=new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=李梦然07060021"); //表示到SQL Server的一个实例的连接 SqlCommand thisCommand=new SqlCommand("select * from student where sno='"+textBox1.Text+"'",thisConnection); SqlDataAdapter thisAdapter=new SqlDataAdapter(); thisAdapter.SelectCommand=thisCommand; DataSet thisDataSet=new DataSet(); thisConnection.Open(); thisAdapter.Fill(thisDataSet, "student"); //在运行时设置 dataGrid1的数据源和数据成员属性,即在dataGrid1中显示数据集中的数据 dataGrid1.SetDataBinding(thisDataSet,"student"); thisConnection.Close(); } 3浏览功能 private void liulan_Click(object sender, System.EventArgs e) { //用SqlConnection对象连接SQL Server数据库魏菊丽20086666 SqlConnection thisConnection=new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=李梦然07060021"); SqlDataAdapter thisAdapter=new SqlDataAdapter(); DataSet thisDataSet=new DataSet(); //创建并返回一个与SqlConnection相关联的SqlCommand 对象 SqlCommand thisCommand=thisConnection.CreateCommand(); thisCommand.CommandText="select * from student";//获取或设置要对数据源执行的SQL语句 thisAdapter.SelectCommand =thisCommand ;//获取一个SQL语句,用于在数据源中选择记录 thisConnection.Open();//打开本次设置的数据库连接 thisAdapter.Fill(thisDataSet,"student");//将以上在数据源student中选择的记录的所有行填充到数据集中。 thisConnection.Close();//断开本次数据库连接 //在运行时设置 dataGrid1的数据源和数据成员属性,即在dataGrid1中显示数据集中的数据 dataGrid1.SetDataBinding(thisDataSet,"student"); } 4,插入一个新列 private void button1_Click(object sender, System.EventArgs e) { SqlConnection thisConnection=new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=李梦然07060021"); SqlDataAdapter thisAdapter=new SqlDataAdapter(); DataSet thisDataSet=new DataSet(); SqlCommand thisCommand=thisConnection.CreateCommand(); thisCommand.CommandText="select * from student "; thisAdapter.SelectCommand =thisCommand ; thisConnection.Open(); SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); thisAdapter.Fill(thisDataSet, "student"); DataRow thisRow=thisDataSet.Tables["student"].NewRow();//在 数据集的student Table中创建新行 thisRow["sno"]="21";thisRow["sname"]="李梦然";thisRow["ssex"]="男";thisRow["thirthday"]="1987-7-31";thisRow["class"]="95001";//设置新行中的个字段值 thisDataSet.Tables["student"].Rows.Add(thisRow);//将新行添加到数据集的student Table中 thisAdapter.Update(thisDataSet,"student");// 修改数据库表 //以下显示添加后表中的数据 thisCommand.CommandText="select * from student "; thisAdapter.SelectCommand =thisCommand ; dataGrid1.SetDataBinding(thisDataSet,"student"); thisConnection.Close(); }

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧