Delphi数据库编程技巧
2008-04-09 04:18:35来源:互联网 阅读 ()
我原来在万千的新闻组(news://news.webking.com.cn/)Delphi版上闲逛那段时间,发现经常有人提出一些数据库方面的技巧性问题,问题其实不难,但是要一个简单的解决方案,可能也破费思量,特别在此简单谈谈:
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的通用数据库查询工具。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Delphi串口通讯的监听
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash