把向 combobox 里添加 items 的操作单独定义为一个过程,在播放影片信息修改以后调用一下这个过程,重新查询数据库,就可刷新同步了,无需退出,也无需关闭当前窗口。
不过有一点要注意:在添加 items 的过程里,最好在添加第一个之前执行一下 clear 事件清空原有内容,再查询数据库,并添加所有查询出来的记录;
还有就是,在这个窗体的显示事件 onShow 里,也要调用上面定义的过程,这样每当打开这个窗体时就可重新查询最新的数据库记录,而且无需再在窗体创建事件 onCreate 里调用了。
这样,想必应该没有什么问题了
[此贴子已经被作者于2007-9-26 22:24:23编辑过]
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.
[此贴子已经被作者于2007-9-28 20:56:12编辑过]