计算机二级辅导:C\\S结构中成批保存CLIENTDATASET中的数据
来源:优易学  2011-6-8 12:29:28   【优易学:中国教育考试门户网】   资料下载   IT书店

  我发现很多朋友在开发数据库时都使用 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);

[1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训