我要投稿

Delphi数据库编程技巧

时间:2008-01-24 00:15 作者:zeroline 阅读:8028

扫描二维码关注公众号,可以查询淘宝、京东商品优惠券
1. 如何动态设置ODBC源

  很多时候程序员需要自动生成ODBC数据源,而不是指导客户"打开控制面板… … ",到底如何去做呢?相信很多人会选择编程修改注册表来实现这项功能,因为ODBC的详细信息全部存放在注册表的下述键值内:

   "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC"

修改一下ODBC的配置,通过前后的注册表比较,你可以发现一定的规律。在这里我只是想说,哥们,别这么犯傻了(如果我让你写一个通用的ODBC源处理程序,你得累死),用这个Windows ODBC API函数吧,

   function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;

   lpszDriverString: String; lpszAttributes: String): Integer;

   stdcall;external ''ODBCCP32.DLL'';

  了解数据库编程的朋友都知道,数据库的访问方式不论DAO、ADO、ODBC或是BDE或是其它第三方的数据库连接控件,归根结底,都是一些个函数集,只要你愿意,你可以编写出自己的数据库访问方式用以替代。深入研究这些底层函数,很多时候会为你提供相当地便利。

  SQLConfigDataSource这个函数MSDN有详细的说明,我不想整段翻译下来让你扁我,我只是结合流行的SQL Server谈谈如何有技巧的调用该函数。其它的数据库大同小异。

  
以下是引用片段:
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,''SQL Server'',
  ''DSN=Record_ODBC''+ chr(0) +
  ''Server=(local)''+ chr(0) +
  ''Database=master''+ chr(0) +
  ''Description=DragonPC SQLServer ODBC Source''+ chr(0)); 



  
  这是我的Delphi程序中调用该函数的一个实例,第一个参数是父窗口句柄,设置为0则该函数不显示任何对话框。第二个参数是操作类型,你需要定义如下的操作类型常量:


以下是引用片段:
Const
  ODBC_ADD_DSN = 1; // Add a new user data source.
  ODBC_CONFIG_DSN = 2; // Configure (modify) an existing user data source.
  ODBC_REMOVE_DSN = 3; // Remove an existing user data source.
  ODBC_ADD_SYS_DSN = 4; // Add a new system data source.
  ODBC_CONFIG_SYS_DSN = 5; // Modify an existing system data source.
  ODBC_REMOVE_SYS_DSN = 6; // Remove an existing system data source.





  从名字我们知道,要添加ODBC源,我们需要调用的是ODBC_ADD_SYS_DSN 或是ODBC_ADD_DSN参数。第三个参数也没有什么好说的,我们添加的是SQL Server数据库的ODBC源,所以填入''SQL Server''参数,如果需要建立Excel文件的ODBC数据源,我们可以填入''Excel Files (*.xls)'',这些字符串参数相信各位同志在添加ODBC源时,已经多次见过。

  关键的是第三个参数的设置,不同的数据库类型所支持的关键字是不一样的,这里仅仅就SQL Server所支持的关键字作一个简单说明:

  DSN:你的ODBC数据源名称。

  Server:你的数据库服务器名称,使用(local)指的是本地计算机安装的数据库。注:最新的SQL Server 2000支持一台计算机运行多个SQL Server服务,这个时候你需要指定SqlSever的InstanceName。

  Address:指定SQL Server服务器的网络IP地址。

  Database:指定默认数据库名称。

  Language:指定默认语言。

  Description:备注信息。

  详细的参数和信息可以查阅微软网站的以下网址。

  http://msdn.microsoft.com/library/psdk/dasdk/odch3kit.htm

  http://msdn.microsoft.com/library/psdk/sql/od_odbc_c_99yd.htm
2. 如何动态设置BDE别名

  这个问题其实是考察程序员对BDE的TSession组件的熟悉程度,一个数据库程序的建立,即使你没有显式的添加TSession组件,系统中依然存在一个名字为Session的TSession对象,你可以在任何位置调用该对象的方法和属性。TSession类的很多方法可以帮助我们的应用程序获取系统BDE环境,下面介绍一个代码片断用以添加一个BDE别名:

  

以下是引用片段:
var
  BDEList : TStringList ;
  ...
  begin
  ...
  BDEList := TStringList.Create () ;
  try
  Session.GetAliasNames(BDElist) ; // 获取系统所有BDE别名列表
  if BDEList.IndexOf(''DragonPC'')= -1 then begin // 如果没有我们的BDE别名"DragonPC"
  BDEList.Clear ;
  BDEList.Add(''SERVER NAME='' + ''SQLServerName'')); // 数据库服务器名称
  BDEList.Add(''DATABASE NAME=master'') ; // 默认数据库
  BDEList.Add(''USER NAME=sa''); // 用户名
  Session.AddAlias(''DragonPC'', ''MSSQL'', BDEList) ; // 添加一个MSSQL类型的BDE别名
  ShowMessage(''系统即将建立BDE别名!'') ;
  Session.SaveConfigFile() ; // 存储BDE配置
  end;
  finally
  BDEList.Free ;
  end;





  这么简单,用户就可以随时建立、删除和修改BDE别名(有兴趣的朋友可以查看TSession组件的源代码,看看调用了哪些BDE函数)。另外像DeleteAlias,ModifyAlias,GetDatabaseNames,GetDriverNames,GetStoredProcNames,GetTableNames,GetPassword等等TSession类的方法,使用起来非常简单,通过Delphi的随机帮助,读者可以试着自己调用一下看看。通过对Session的灵活应用,再配合我下面将要提到的扑捉SQL异常的技巧,你完全可以写一个媲美SQL Explorer的通用数据库查询工具。
3. 如何扑捉运行SQL语句时的错误

  老是有朋友在开发一些开放的数据库接口(比如Delphi的SQL Explorer工具)时发愁,既然是开放的,当然需要允许用户使用SQL语句访问数据库,这些还好办,一旦用户的运行SQL语句出现错误,程序员如何扑捉该异常呢?很简单,看看下面的函数:

  

以下是引用片段:
Const
  ExecSQLMode = 0 ;
  OpenSQLMode = 1 ;
  ResultRight = ''SQL query result is right'' ;
  ...
  function RunSql(RunQuery: TQuery; Sqls: TStringList; var ErrorMsg: string;
  Mode: integer) : integer ;
  begin
  ErrorMsg := ResultRight ;
  Result := 0 ;
  try
  RunQuery.DatabaseName := ''RecordDB'' ;
  RunQuery.SQL.Clear() ;
  RunQuery.SQL.AddStrings(Sqls) ;
  if Mode = ExecSQLMode then
  RunQuery.ExecSQL()
  else
  RunQuery.Open() ;
  except
  on e:exception do
  ErrorMsg := e.Message + #13 + #10 +''--- 错误是俺发现的 ---'' ;
  end;
  end;


  朋友看明白了吧,我的函数很简单,将SQL语句代码段作为参数传递给TQuery组件,通过设置查询方式(ExecSQLMode、OpenSQLMode)来处理有结果集返回的数据查询语句(select)或是没有结果集返回的数据操作语言(update、delete、insert、create等)。而异常的扑捉呢,我们扑捉所有异常的老祖宗Exception,因为Delphi的所有异常都是从Exception继承下来的,这样一个简单的SQL语句运行和异常处理函数就完成了,一旦返回的ErrorMsg的值不是ResultRight,ErrorMsg就会返回异常的信息,程序员就可以加以判断以处理不同的情况。

最新评论

baibaini2009-08-02 18:59
学习学习来啦,好深啊
计算机补习,需要的话来着  计算机等级 微软考试 思科考试 其它认证考试 Oracle Linux JAVA 计算机等级网校培训 更多http://www.cne163.com/
baibaini2009-08-02 19:01
学习学习来啦
计算机补习,需要的话来着  计算机等级 微软考试 思科考试 其它认证考试 Oracle Linux JAVA 计算机等级网校培训 更多http://www.cne163.com/
daisy00382009-10-13 20:43
  淘宝网店铺地址:http://shop59417228.taobao.com/
  专营杰克琼斯、CUCCI、JEEP、LEVIS等等多种品牌。
  薄利多销,全场折扣,大部分商品免邮费。
  本店新开张,买多还有奖品赠送,同是支持团购。
  联系电话:13882216671(胡刚)
  QQ:779826058
«12»Pages: 2/2     Go
我要投稿 我要评论
插入url链接 添加表情
限 100000 字节
响应相关主管单位规定,关闭回帖发帖功能
[VB毕业设计] [ASP毕业设计] [JAVA毕业设计] [JSP毕业设计] [PHP毕业设计] [asp.net毕业设计] [.net毕业设计] [网络毕业设计] [Delphi毕业设计] [VC毕业设计] [VF毕业设计] [机械毕业设计] [工艺毕业设计] [模具毕业设计] [其他毕业设计]
站长联系 cccbbsnet#163.com 本站系公益性质网站,站内广告维系本站运作。欢迎赞助本站。
大学生计算机相关方向|软件编程|网络工程|web开发|数据库技术|学习资料等
本社区仅供学习计算机相关技术所使用,访客发言不得违反国家法律法规
Time now is:07-19 06:27, Gzip enabled 蜀ICP备07004838号Powered by cccbbs.net v7.5 SP3 Code © 2003-06 cccbbs
计算机毕业设计