在Delphi中使用原生ADO控制数据库计算机二级考试

文章作者 100test 发表时间 2009:06:15 07:13:50
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库

  我发现很多朋友在开发数据库时都使用 Delphi 自带的 ADO 组件 或 Diamond ADO,其实在 Delphi 中使用原生 ADO 接口也是十分方便和有效的。我使用原生 ADO 开发项目已有很长一段时间,也回答过一些朋友类似的问题,现在把自己的一点心得与大家分享,班门弄斧,只是希望能对大家有所帮助。当然,这帖子也是原生的,不是转贴的。
  一、优点
  1、大家知道 Delphi 对 ADO 接口进行了一番包装后形成了 ADOExpress,我想 Borland 的主要目的还是想与自己的数据敏感控件相连。然而事实上数据敏感控件并不是那么耀眼,如果你希望你编出来的程序稍微有点水准的话那就别用那玩意;如果你很少使用数据敏感控件,那么 ADOExpress 基本上失去了其应有的作用,无数冗余的属性、虚方法,不管你用不用得到一股脑给你编译进去,也会使你的程序再大上 200K;效率么,不说了。
  2、MSDN 和 VB 中的例子你可以搬过来就用。
  3、告诉那些 Delphi 反对者,Delphi 不是离开组件就活不了。
  4、关于代码重用:我给大家的例子都是以函数或过程形式,重用性不好么?
  5、别说帖子太长,那你看看 DB.pas, ADODB.pas 多长?
  二、基本储备
  1、一些必须的单元
  uses
  Variants, ComObj.
  2、一些基本常数(其它查 ADODB2000.pas):
  const
  adOpenDynamic = $00000002.
  adOpenStatic = $00000003.
  adLockOptimistic = $00000003.
  adLockBatchOptimistic = $00000004.
  adStateClosed = $00000000.
  adStateOpen = $00000001.
  adStateConnecting = $00000002.
  adStateExecuting = $00000004.
  adStateFetching = $00000008.
  adUseServer = $00000002.
  adUseClient = $00000003.
  adModeReadWrite = $00000003.
  adXactCursorStability = $00001000.
  adCmdText = $00000001.
  adCmdTable = $00000002.
  adCmdStoredProc = $00000004.
  adCmdFile = $00000100.
  adAffectCurrent = $00000001.
  adAffectGroup = $00000002.
  adAffectAll = $00000003.
  adAffectAllChapters = $00000004.
  3、一些基本函数和过程
  //创建 Connection 对象
  function CreateConnection: OleVariant.
  //释放 Connection 对象;cnn 为 Connection 对象
  procedure FreeConnection(var cnn: OleVariant).
  //创建 Recordset 对象
  function CreateRecordset: OleVariant.
  //释放 Recordset 对象;rst 为 Recordset 对象
  procedure FreeRecordset(var rst: OleVariant).
  //创建 Command 对象
  function CreateCommand: OleVariant.
  //释放 Command 对象;cmd 为 Command 对象
  procedure FreeCommand(var cmd: OleVariant).
  //用 Connection 连接到 SQLServer 数据库;cnn 为 Connection 对象,db 数据库名,host 主机名,usr 用户名,pwd 密码
  function ConnectToDB(cnn: OleVariant. const db, host, usr, pwd: string): Boolean.
  //执行 SQL 语句,有返回行,无事务处理;cnn 为 Connection 对象,rst 为 Recordset 对象,sql 为 SQL 语句(可以是存储过程)
  function ExecSQL(cnn, rst: OleVariant. const sql: string): Boolean.
  //执行 SQL 语句,无返回行,有事务处理;cnn 为 Connection 对象,cmd 为 Command 对象,sql 为 SQL 语句(可以是存储过程)
  function ExecSQLA(cnn, cmd: OleVariant. const sql: string): Boolean.
  function CreateConnection: OleVariant.
  begin
  try
  Result := CreateOleObject(\ADODB.Connection\).
  Result.CursorLocation := adUseServer.
  Result.IsolationLevel := adXactCursorStability.
  Result.Mode := adModeReadWrite.
  Result.Provider := \SQLOLEDB.1\.
  except
  if not VarIsEmpty(Result) then Result := Unassigned.
  end.
  end.
  procedure FreeConnection(var cnn: OleVariant).
  begin
  if not VarIsEmpty(cnn) then
  begin
  if cnn.State <.>. adStateClosed then cnn.Close.
  cnn := Unassigned.
  end.
  end.
  function CreateRecordset: OleVariant.
  begin
  try
  Result := CreateOleObject(\ADODB.Recordset\).
  Result.CacheSize := 1000.
  Result.CursorType := adOpenStatic.
  Result.CursorLocation := adUseServer.
  Result.LockType := adLockOptimistic.
  except
  if not VarIsEmpty(Result) then Result := Unassigned.
  end.
  end.
  procedure FreeRecordset(var rst: OleVariant).
  begin
  FreeConnection(rst).
  end.
  function CreateCommand: OleVariant.
  begin
  try
  Result := CreateOleObject(\ADODB.Command\).
  Result.CommandType := adCmdText.
  Result.CommandTimeout := 5.
  except
  if not VarIsEmpty(Result) then Result := Unassigned.
  end.
  end.
  procedure FreeCommand(var cmd: OleVariant).
  begin
  if not VarIsEmpty(cmd) then cmd := Unassigned.
  end.
  function ConnectToDB(cnn: OleVariant. const db, host, usr, pwd: string): Boolean.
  begin
  Result := not VarIsEmpty(cnn).
  if Result then
  begin
  if cnn.State <.>. adStateClosed then cnn.Close.
  cnn.ConnectionString :=
  \Provider=SQLOLEDB.1.Persist Security Info=True.Initial Catalog=\
  db \.Data Source=\ host \.Connect Timeout=5.\
  \Use Procedure for Prepare=1\.
  try
  cnn.Open(cnn.ConnectionString, usr, pwd, -1).
  except
  Result := False.
  end.
  end.
  end.
  function ExecSQL(cnn, rst: OleVariant. const sql: string): Boolean.
  begin
  Result := not (VarIsEmpty(cnn) or VarIsEmpty(rst)) and (cnn.State = adStateOpen).
  if Result then
  begin
  if rst.State <.>. adStateClosed then rst.Close.
  try
  rst.Open(sql, cnn, adOpenStatic, adLockOptimistic, adCmdText).
  except
  Result := False.
  end.
  end.
  end.

相关文章


C\\S结构中成批保存CLIENTDATASET中的数据计算机二级考试
在Delphi中使用原生ADO控制数据库计算机二级考试
DELPHI数据库相关:sql语句解决分页问题计算机二级考试
DELPHI数据库相关:ASTA3初探计算机二级考试
分布式数据库中的关键问题计算机二级考试
DELPHI技巧:用Delphi编写圆周率模拟器计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛