访问远程 DBISAM 数据库的方法
刘国辉 2009-8-17
一、 摘要
DBISAM 是简单易用的桌面型数据库,适用于开发小型的桌面程序,大部分情况下数据库是位于本机的,但是,在某些情况下也需要访问位于其他机器的数据库,本文就是介绍访问位于其他机器上的数据库的方法。
二、 方法1:通过文件共享方式
DBISAM 不是单文件数据库,没有独立的数据库文件,而是每个表都有自己的数据文件和索引文件,一个目录就是一个数据库。访问 DBISAM 数据库的常用方法如下:
var db: TDBISAMDataBase; tbl: TDBISAMTable; begin // … 创建 db 和 tbl,此处略过 db.DataBaseName := ‘test’; db.Directory := ‘d:/abc’; // 设置要访问的数据表所在目录 tbl.DataBaseName := ‘test’; // 将 tbl 关联到 db … end; |
注:这种方法中的DataBaseName只是一个标识,用于标识db对象的,没有实际意义。
而如果我们要访问其他机器上的DBISAM数据库,只需要将 db.DataBaseName 设置为该数据库所在目录的网络地址,如
db.Directory := ‘//remotehost/abc’; |
同时,要设置该目录为共享,并且根据需要设置相应的权限,如果仅仅是查询,则设置读权限即可,如果要删除记录或者插入记录等则需要设置写权限。
这种方法简单易行,但是因为要共享数据库目录,安全性较差。
三、 方法2:通过DBISAM SERVER方式
DBISAM 也提供了数据库服务器,但是,与SQL SERVER 等其他大中型数据库不同的是,该服务器并不是以服务形式运行,而是一个名为dbsrvr.exe的程序,该程序随DBISAM一起安装,位于dbisam7/server/dbsrvr目录下。首先需要运行该程序:
DBISAM 数据库服务器使用了两个端口,一个是数据访问端口12005,一个是数据库管理端口12006,我们访问数据库需要使用12005端口,而12006端口则是给数据库管理程序使用。
运行dbsrvr.exe后,我们还不能访问数据库,因为没有没有数据库可访问,还要使用DBISAM的服务器管理程序Server Administration Utility创建数据库。
Server Administration Utility程序在DBISAM 的工具包DBISAM.Additional.Software.and.Utilities中提供,执行该程序,界面如下:
首先,要设置数据库服务器参数,执行菜单File->Options,弹出设置菜单:
一般设置IP地址即可,OK之后执行菜单File->Login to server,弹出服务器登录界面,输入用户名和密码(初始用户名为Admin,初始密码为DBAdmin,用户名不限大小写,密码与大小写有关),登录后即出现管理界面:
需要关注的是Users、Databases页面,Users是设置数据库服务器的用户,即我们刚才登录时的admin用户,可以通过add来创建新用户,通过edit来修改用户密码,通过delete删除用户。
Databases页用于管理数据库:
点击Add新建一个数据库,该数据库的名字很重要,访问时需要用到,设置数据库的目录,此时就可以通过远程访问该数据库了。
远方访问代码如下:
Var db: TDBISAMDataBase; tbl: TDBISAMTable; ses: TDBISAMSession; begin // … 创建 db、tbl、ses,略过 ses.SessionType := stRemote; // 设置为访问远程数据库Session ses.RemoteAddress := ‘127.0.0.1’; // 远程数据库服务器的IP地址 ses.RemotePort := 12005; // 数据访问端口 ses.RemoteUser := ‘Admin’; // 服务器用户 ses.RemotePassword := ‘DBAdmin’; // 服务器用户密码 ses.SessionName := ‘sesTest’; // 该 Session 的标识 ses.Active := True; // 连接数据库
db.DatabaseName := ‘dbTest’; db.SessionName := ‘sesTest’; db.RemoteDatabase := ‘mytestdb’; // 远程数据库名 db.Connected := TRUE; // 打开数据库
tbl.DatabaseName := ‘dbTest’; tbl.SessionName := ‘sesTest’; tbl.TableName := ‘test’; tbl.Active := True; // 打开数据表 … // 操作数据表 end; |