如何把数据库和管理系统做到只读媒体或移动媒体上
一、应用场景:
1>将过期数据转移,并将清除掉,但又必须能随时查询以前数据
2>制作便于发放免安装的演示程序
二、制作步骤:
1>将数据导到access中,将access设置密码
2>用delphi的adoconnection组件连接access文件
2.1 用户名称:admin,空白密码打勾
2.2 将访问权限中的[read],[Share Deny Read],[Share Deny Write]勾上;
2.3 将Jet OLEDB:DataBase Password的值设为access的密码
2.4 选择[连接]页的[测试连接],通过OK,确定
2.5 复制Use Connection string中的内容
3>将adoconntion的连接字符串去掉,将IsolationLevel=ilBrowse,KeepConntion=false,LoginPrompt=false
4>在datamodule的创建事件中加入以下代码
- var
- mypath,sqlstr:string;
- begin
- mypath:=Extractfiledir(application.ExeName);//取得应用程序所在路径
- sqlstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%s/filename.mdb;';
- sqlstr:=format(sqlstr,[mypath]);//将数据文件放在程序同级目录下
- sqlstr:=sqlstr+'Mode=read|Share Deny Read|Share Deny Write;Jet OLEDB:Database Password=xxxxx;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0';
- cn.ConnectionString:=sqlstr;
- cn.Connected:=true;//联接数据库
- end;
5>其它的数据表打开就不说了,以前的都是关键问题
6>程序制作好后,可以刻录到光盘或复制到U盘即可
三、特点
运行程序的电脑无需安装access,方便;缺点:access的数据量不能太大,我用的数据只有主表4万多条,从表25万多条,感觉读取速度不快
附:
Mode常数
常数 含义
adModeUnknown 未指定数据源的连接许可权(默认值)
adModeRead 连接是只读的
adModeReadWrite 连接是可读写的
adModeShareDenyNone 不拒绝其他用户的读写访问(Jet OLE DB Provider的默认值)
adModeShareDenyRead 拒绝其他用户打开到数据源的读连接
adModeShareDenyWrite 拒绝其他用户打开到数据源的写连接
adModeShareExclusive 以独占方式打开数据源
adModeWrite 连接是只写的