需要对查询结果进行编辑时,可用 TQuery 或 TStoredProc 组件并结合 TUpdataSQL 组件 来实现。 TQuery 或 TStoredProc 的 CachedUptates 为 True, 表示可进行缓存编辑,UpdateObject 属性为设置某 TUpdateSQL 对象,如 UpdateSQL1;UpdateSQL1 对象的属性 DeleteSQL, InsertSQL, ModifySQL 是作为编辑
查询结果后写入数据库时生成相应 SQL 语句的参数,可 手动设置,也可双击 UpdateSQL1 对象激活其编辑器进行生成,查询结果可显示在 DBGrid1 中 , 并 可 直 接 在 其 上 进 行 编 辑 , 示 例 代 码 如 下 (UpdateSQL1 的 DeleteSQL,InsertSQL,ModifySQL 直接用其编辑器生成,在此不列出): procedure TForm1.QueryDisplayClick(Sender: TObject); begin DataSource1.DataSet:=query1; query1.Close; query1.CachedUpdates:=True; query1.SQL.Clear; //清除 SQL 属性 query1.ParamCheck:=True; query1.DatabaseName:=’MSSQL1’;
query1.SQL.Add(’select * from employee’); query1.SQL.Add(’where pub_id>:pubid’); query1.SQL.Add(’order by emp_id’); query1.ParamByName(’pubid’).AsString:=’1000’; query1.Prepare; query1.ExecSQL; end; 上述代码中,使用 query 组件的 Add 方法增加 SQL 属性,Pubid 为动态参数,在执行 SQL 语句前需对其进行赋值, ExecSQL 方法执行 SQL 语句, DBGrid1 中对查询结果进行编 用 在 辑后,可调用 ApplyUpdates 方法把缓存中的数据写入数据库。 (2)动态创建存储过程 Delphi 可用 Query 组 件动 态创建 存储 过程。 在窗 体上放 置 Query2 对 象 和命令 按钮 GreadeProc 其代码如下: procedure TForm1.CreateProcClick(Sender: TObject); begin with Query2 do Begin DatabaseName:=’MSSQL1’; active:=False; paramcheck:=False; with SQL do Begin Clear; Add(’Create Procedure get_maxname’); Add(’@max_name char(20) output’); Add(’As’); Add(’select @max_name=max(au_fname)’); Add(’from authors’); end; ExecSQL; end; end; 代码中因执行的
是非查询语句,所以 Paramcheck 属性必须设置为 False,@maxnarme 为存 储过程的输出参数,用 ExecSQL 方法执行 SQL 语句。 (3)使用带参数的存储过程 如存储过程返回的结果为一数据集,则使用方法与 Tquery 组件相似,下面是使用上面新建 立的存储过程。在窗体上放置 StoredProc1 对象,其属性如下: DatabaseName=’MSSQL1’ StoredProcName=’dbo.get_maxname’ Param.Date=< Item DateType=ftstrying // 参数的数据类型 Name=’@max_name’ // 参数名 ParamType=ptOutPut // 参数为输出参数
End> 在窗体上放置命令按钮 WithReturnProc, 其相应代码如下: procedure TForm1.WithReturnProcClick(Sender: TObject); var tempStr:String; begin StoredProc2.Prepare; StoredProc2.ExecProc; tempStr:= StoredProc2.ParamByName(’@max_name’).AsString; showmessage(’The value of StoreProc returned is ’+tempStr); end; StoredProc 组件使用 ExecProc 方法执行存储过程,使用 ParamByName 方法访问输出参数 ‘@max_name’ 。 (4)事务控制 Delphi 通过 Database 组件可进行全面的事务控制。使用 Database 的 StartTransaction 启动一 新事务,用 Commit 方法提交数据,用 Rol1back 方法卷回事务,取消对数据库所做的修改。 例如,需把上面编辑过的数据从缓存提交给数据库,可用如下代码: procedure TForm1.QueryApplyClick(Sender: TObject); begin with Query1 do begin Database1.StartTransaction; try ApplyUpdates; //写入数据库 Database1.Commit; //写入成功,提交事务 except Database1.Rollback; //写入失败,取消修改 raise; end; CommitUpdates; //写入成功后,清除数据库缓存 end; end; 本文中的所有应用程序均可在机上正确运行, 只是由于篇幅有限, 详细的事件代码在此不一 一列出。此外,Delphi 数据库应用开发的其他方面,诸如多层应用程序开发、分布式应用编 程、ADO 编程等,只有在不断实践中才能逐渐了解其博大精深之处,在此就不赘述。 参考文献 (美)Steve Teixeira 等著,龙劲松等译《Delphi 6 开发人员指南》 机械工业出版社