免费下载应用软件、交流使用经验。

软件下载 经验交流 软件开发 专题论述 请君留言 网站介绍 休闲时光 返回主页
 
给数据库加把“锁”

作者:本人     来源:本站

    数据库是很多信息管理系统都离不开的数据文件。出于保密或保持信息数据完整和安全的角度考虑,软件的编制者一般都有不希望用户直接对数据库进行操作,要求所有对数据库的操作都有必须在程序运行中进行。为了阻止用户在数据库平台上打开数据库进行操作,软件编制者通常采取改写数据库文件头的办法,使得一般用户无法在数据库平台上打开数据库,起到加“锁”的作用。系统软件在打开数据库之前先写上正确的文件头,就可以正常使用数据库。这种对数据库文件头进行的操作尤如“加锁”和“开锁”。
    在dBASE和FoxBASE平台上,上述的“加锁”和“开锁”的操作靠调用二进制文件模块来完成。可是二进制文件的编制和调用都比较麻烦。而在FoxPro2.5平台上,利用其对低级文件操作的函数,便可以方便地对文件进行读写操作。本文所附的就是笔者编制的给数据库“加锁”和“开锁”的小程序,此程序已经正常地在笔者开发的财务管理系统中使用。你可以把这个程序挂接在自己的系统中,在要打开数据库时,发出 do <模块名称> with <数据库名>、<参数1>、<参数2>;若要关闭数据库时,则先转入该数据库的工作区,然后再发出上述的命令即可。
    需要说明的是,这种方法虽然简单易行,但只能阻止一般的用户打开数据库,而对熟练使用工具软件(如PC工具等)的用户则无能为力。 
源程序:

PROCEDURE QSSJKJS         &&数据库加锁
PARA sjkm,kgbz,dkfs       && sjkm=数据库名  kgbz=(.t.开锁or.f.加锁)
**                          dkfs=打开方式(.t.独占方式or.f.共享方式)
if used(sjkm)             &&有相应的数据库在使用
  if kgbz
    return
  else
    use
  endif
endif
if at(".",sjkm)=0         &&加后缀DBF
  sjkm=sjkm+".dbf"
endif
wjjb=fopen(sjkm,2)        &&打开文件,准备读写操作
if wjjb=1                 &&打开失败
  ?? chr(7)
  wait sjkm+"数据库找不到!" window time 2
  kgbz=.f.
  return
endif
if kgbz                   &&解锁操作
  szf=asc(fread(wjjb,1))
  if szf=27               &&是加锁数据库
    =fseek(wjjb,0)
    =fwrite(wjjb,chr(3))  &&置正常标志
  endif
  =fclose(wjjb)           &&关闭数据库
  select 0
  if kdfs
    use &sjkm shared
  else
    use &sjkm exclusive
  endif
else                      &&加锁操作
  =fwrite(wjjb,chr(27))   &&置加锁标志
  =fclose(wjjb)
endif
kgbz=.t.                  &&置成功标志
RETURN                    && OK

注:本文发表在1995年10月17日《中国计算机报》第41期第142版

发表日期:1999-4-18     修改日期:

备案序号:赣ICP备05002359号

建议使用1024*768分辩率浏览 ☆版权所有 摘抄或转载须得到书面许可☆ Hujiajun ©1999,2016
E-Mail: hu-jj@21cn.com