| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1621 人关注过本帖
标题:表修改后必须重启才能更新,为什么?
只看楼主 加入收藏
chd_zhaoke
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-9-25
收藏
 问题点数:0 回复次数:3 
表修改后必须重启才能更新,为什么?
我做了一个电影院售票系统,电影院名字用combobox显示,详细播放信息在dbgrid里显示,但是表的内容即播放影片信息修改以后combobox下拉里没有新加的电影院名字,必须要退出售票系统再重新进下才能看到新加的电影院,这是怎么回事,哪位大哥大姐指导一二????????谢谢!!!
搜索更多相关主题的帖子: 电影院 combobox 系统 拉里 dbgrid 
2007-09-25 10:39
provoke
Rank: 2
来 自:广州
等 级:新手上路
威 望:5
帖 子:175
专家分:0
注 册:2007-6-14
收藏
得分:0 


把向 combobox 里添加 items 的操作单独定义为一个过程,在播放影片信息修改以后调用一下这个过程,重新查询数据库,就可刷新同步了,无需退出,也无需关闭当前窗口。

不过有一点要注意:在添加 items 的过程里,最好在添加第一个之前执行一下 clear 事件清空原有内容,再查询数据库,并添加所有查询出来的记录;

还有就是,在这个窗体的显示事件 onShow 里,也要调用上面定义的过程,这样每当打开这个窗体时就可重新查询最新的数据库记录,而且无需再在窗体创建事件 onCreate 里调用了。

这样,想必应该没有什么问题了

[此贴子已经被作者于2007-9-26 22:24:23编辑过]


爱我至爱,至死不渝!
2007-09-26 22:19
chd_zhaoke
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-9-25
收藏
得分:0 
谢谢这位大哥,你解释的很正确,听同学说原理上就该这样修改,不过具体怎么定义那个过程我不会定义,就是“向 combobox 里添加 items 的操作单独定义为一个过程”这句我不会写,大哥能否帮下??不胜感激!
2007-09-28 10:00
provoke
Rank: 2
来 自:广州
等 级:新手上路
威 望:5
帖 子:175
专家分:0
注 册:2007-6-14
收藏
得分:0 
我也是刚刚学会自定义过程的

unit Unit1;

interface

uses
//...

type
TForm1 = class(TForm)
ADODataSet1: TADODataSet; //ADODataSet ,用于连接和查询数据库
ComboBox1: TComboBox; //下拉框
Button1: TButton; //手动刷新按钮,可以不要
//... //其他...
procedure refreshs; //声明一个自定义过程,无需参数
procedure FormShow(Sender: TObject); //窗体显示事件
procedure Button1Click(Sender: TObject); //添加一个手动刷新的按钮,按键显示如“立即刷新”等
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.refreshs; //自定义过程的实现,用于刷新,重新查询数据库并显示查询结果
var
sql,items:String;
i,num:integer; //两个整数变量,i用作循环变量,num 用于记录查询结果数

begin
try
sql:='select 电影院名 from ...'; //SQL语句,自己写
ADODataset1.Active:=false;
ADODataset1.CommandText:=sql;
ADODataset1.Active:=true; //查询

ComboBox1.Clear; //清除
ComboBox1.Items.Add('请选择...'); //添加一句提示的,可以不要
ComboBox1.Text:='请选择...'; //默认显示这一句

if (ADODataSet1.FieldValues['用户名']<>NULL) then //若查询结果非空
begin
num:=ADODataSet1.RecordCount; //记录数,即电影院数量
ADODataSet1.First; //使指针指向第一记录
for i:=1 to num do
begin
items:=ADODataSet1.FieldValues['电影院名']; //引用查询结果的指定字段
ComboBox1.Items.Add(items); //向下拉框中添加一个电影院名
ADODataSet1.next; //指针移向下一条记录
end; //不要漏了for循环的分号
end
except //异常处理,提示可能发生的错误情况
Application.MessageBox('无法连接数据库!请确定您已安装'+#13#13+'SQL Server 2000 并且服务管理器已经启动和处于运行状态。','错误',mb_ok+mb_iconerror);
end; //不要漏了 try...except 的分号

//异常处理也可以不要
end;

procedure TForm1.FormShow(Sender: TObject); //记得在窗体显示事件中调用
begin
refreshs; //调用上述定义的过程,无需参数
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
refreshs; //手动刷新,可以不要
end; //若后台数据库修改了相关信息,也可利用这个按钮实现同步

//...其他过程和函数等

end.


另外,在显示详细信息的dbgrid的onChange事件里也要调用自定义过程,这样就可以省去手动更新的麻烦。

最后说明一点,如果在下拉框中选择一个电影院名需要在其他地方作出响应,例如在dbgrid中只显示所选电影院的相关信息,还要添加一句断送,当选中的不是“请选择...”时才响应:

if (ComboBox1.Text<>'请选择...') then
begin
//...原有的响应内容
end;

只加了很少内容

[此贴子已经被作者于2007-9-28 20:56:12编辑过]


爱我至爱,至死不渝!
2007-09-28 20:52
快速回复:表修改后必须重启才能更新,为什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017191 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved