我也是刚刚学会自定义过程的
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编辑过]