Google

星期二, 八月 26, 2008

用Python操作MS Access数据库

首先,你应安装了python和Python for Windows extensions。
1、建立数据库连接
import win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'
conn.Open(DSN)
2、打开一个记录集
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'MyRecordset'#表名
rs.Open('[' + rs_name + ']', conn, 1, 3)
3、对记录集操作
rs.AddNew()
rs.Fields.Item(1).Value = 'data'
rs.Update()
4、用SQL来插入或更新数据
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'
sql_statement = "Insert INTO [Table_Name] ([Field_1], [Field_2]) VALUES ('data1', 'data2')"
conn.Open(DSN)
conn.Execute(sql_statement)
conn.Close()
5、遍历记录
rs.MoveFirst()
count = 0
while 1:
if rs.EOF:
break
else:
count = count + 1
rs.MoveNext()

注意:如果一个记录是空的,那么将指针移动到第一个记录将导致一个错误,因为此时recordcount是无效的。解决的方法是:打开一个记录集之前,先将Cursorlocation设置为3,然后再打开记录集,此时recordcount将是有效的。
例如:
rs.Cursorlocation = 3 # don't use parenthesis here
rs.Open('Select * FROM [Table_Name]', conn) # be sure conn is open
rs.RecordCount # no parenthesis here either

http://www.pythontik.com/blog/article.asp?id=23

标签: ,

星期四, 五月 08, 2008

金额阿拉伯数字转换为中文的自定义函数

CREATE FUNCTION ChangeBigSmall
(@ChangeMoney money)
RETURNS VarChar(100) AS

BEGIN
Declare @String1 char(20)
Declare @String2 char(30)
Declare @String4 Varchar(100)
Declare @String3 Varchar(100) --从原A值中取出的值
Declare @i int --循环变量
Declare @J Int --A的值乘以100的字符串长度
Declare @Ch1 Varchar(100) --数字的汉语读法
Declare @Ch2 Varchar(100) --数字位的汉字读法
Declare @Zero Int --用来计算连续有几个零
Declare @ReturnValue VarChar(100)

Select @ReturnValue = ''
Select @String1 = '零壹贰叁肆伍陆柒捌玖'
Select @String2 = '万仟佰拾亿仟佰拾万仟佰拾元角分'

Select @String4 = Cast(@ChangeMoney*100 as int)

select @J=len(cast((@ChangeMoney*100) as int))

Select @String2=Right(@String2,@J)

Select @i = 1

while @i<= @j Begin

Select @String3 = Substring(@String4,@i,1)

if @String3<>'0' Begin

Select @Ch1 = Substring(@String1, Cast(@String3 as Int) + 1, 1)
Select @Ch2 = Substring(@String2, @i, 1)
Select @Zero = 0 --表示本位不为零
end
else Begin
If (@Zero = 0) Or (@i = @J - 9) Or (@i = @J - 5) Or (@i = @J - 1)
Select @Ch1 = '零'
Else
Select @Ch1 = ''

Select @Zero = @Zero + 1 --表示本位为0

--如果转换的数值需要扩大,那么需改动以下表达式 I 的值。
Select @Ch2 = ''

If @i = @J - 10 Begin
Select @Ch2 = '亿'
Select @Zero = 0
end

If @i = @J - 6 Begin
Select @Ch2 = '万'
Select @Zero = 0
end

if @i = @J - 2 Begin
Select @Ch2 = '元'
Select @Zero = 0
end

If @i = @J
Select @Ch2 = '整'

end

Select @ReturnValue = @ReturnValue + @Ch1 + @Ch2

select @i = @i+1
end

--最后将多余的零去掉
If CharIndex('仟仟',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '仟仟', '仟')

If CharIndex('佰佰',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '佰佰', '佰')

If CharIndex('零元',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零元', '元')

If CharIndex('零万',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零万', '万')

If CharIndex('零亿',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零亿', '亿')

If CharIndex('零整',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零整', '整')

If CharIndex('零佰',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零佰', '零')

If CharIndex('零仟',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '零仟', '零')

If CharIndex('元元',@ReturnValue) <> 0
Select @ReturnValue = Replace(@ReturnValue, '元元', '元')

return @ReturnValue

END
http://www.sdgn.cn/access/11624.html

标签: ,

星期三, 四月 02, 2008

建立access数据库的安全门

http://jackcess.sourceforge.net/xref/com/healthmarketscience/jackcess/Database.html
在office 2000下,access数据库的安全机制已经更为完善。除了对数据库设置密码保护,对数据库进行编码压缩,还可以启用用户级的安全机制,在用户级别上控制对数据库的访问。

  一、数据库设置密码

  对于单机使用的数据库或者是需要工作组共享的数据库,仅设置密码保护较为合适。知道密码的组成员,都有数据库的完全操作权限,彼此之间的使用权限没有什么区别。设置密码的步骤如下:

  启动microsoft access,在弹出的选择窗口中点取消,不打开任何数据库。

  点击菜单:文件---打开,在弹出的打开窗口中,选中要打开的数据库文件。然后在打开按钮的右侧展开箭头上单击选定以独占方式打开,用独占方式打开选定的数据库。

  在access窗口菜单上点击:工具—安全—设置数据库密码。在弹出的密码和验证输入框中,输入密码,注意区分大小

  写,并请记住。然后点击确定按钮。

  关闭数据库,退出access环境,密码设置完毕。下次再打开此数据库,就会提示输入密码,密码正确才能打开数据库。

  如要复制数据库,请不要使用数据库密码。如设置了密码,复制的数据库将不能同步。数据库的密码是和数据库文件放置在一起,而不是放在工作组信息文件中。

  二、数据库压缩编码

  为了进一步对数据库进行加密保护,可以对数据库进行编码压缩。这样使用其它工具程序或字处理等软件就无法查看此数据库的内容。而对用户在access下的使用则不影响。编码的步骤如下:

  启动microsoft access,在弹出的选择窗口中点取消,不打开任何数据库。

  点击菜单:工具—安全—加密/解密数据库。

  在弹出的数据库加密/解密窗口中,选取要编码的数据库,点击确定按钮。

  在弹出的数据库加密后另存为窗口中,在文件名输入框中输入编码后的文件名,点击保存按钮。编码压缩后的数据库被另保为另一个文件。

  三、用户级安全机制

  使用用户级的安全机制,可以更灵活更安全的保护数据库。在这种安全机制下,

  在access关联的工作组信息文件中建立用户和工作组帐户,用来管理用户;在具体的数据库中管理对象权限,可以给用户和工作组分别指定使用权限。用户要输入用户名称和密码才能打开数据库,对数据库的操作要受拥有权限的限制。

  1、工作组信息文件

   在microsoft access中,用户和工作组的信息帐户,是存储在工作组信息文件中的,即使用工作组信息文件来管理用户和工作组。而默认的工作组信息文件 是:c:\program files\microsoft office\office\system.mdw。

  用户也可以建立自己的工作组信息文件,用来按照自己的需要来划分和管理用户和工作组,一般是存放在数据库所在的工作目录下的secured.mdw文件中,当然用户也可以自己指定文件名和存放位置,但文件的扩展名不可以变。

   工作组信息文件与整个access关联对应着,在access运行环境下有效,而不是对应某个数据库的。每次access启动,都要读取工作组信息文件 从而得到用户和工作组的帐户信息。默认是读取默认工作组信息文件system.mdw,但用户可以指定access与哪个工作组信息文件关联:运行工作组 信息管理器wrkgadm.exe,(通常在c:\program files\microsoft office\office\下已经有指向该程序的快捷方式ms access workgroup administrator)可以创建新的工作组信息文件或指定access联接某一个工作组信息文件。还可以在启动access的时候用命令行启动参数 选项/wrkg <工作组信息文件名>来指定联接的工作组信息文件。

  2、工作组信息文件的管理

  启动ms access workgroup administrator快捷方式,在工作组管理员窗口中,点联接按钮可以更改access启动时要联接的工作组信息文件:在弹出的工作组信息文件窗口 中指定文件的路径名称即可。点创建按钮,则可以创建一个新的工作组信息文件:在弹出的工作组所有权信息窗口中,输入工作组名称、单位、工作组id三项内 容。在工作组信息文件窗口中输入工作组信息文件数据库的存放路径和名称。这就可以创建新的工作组信息文件,并已经建立了关联。

  工作组id是工作组唯一的唯一性标识,用于区别于其它的工作组信息文件,必须要保存好,必要时可以凭此重建文件。

  在access下,点击菜单:工具安全—用户级安全性向导,选中新建工作组信息文件,也可以建立新的工作组信息文件。

  3、安全机制

  在用户级安全机制下,每个用户有用户名称、个人标识(pid)、根据名称和pid用加密算法产生的唯一安全标识(sid)、密码;每个工作组有唯一的工作组名称、个人标识(pid)、安全标识(sid),组没有密码,也不能用组名登录。

  用户和组的个人标识(pid)是唯一的,由4~20个字符组成,区分大小写。用户和组的安全标识sid(security id),是由名称和pid用加密算法产生的,唯一性的。

   在工作组信息文件中(实际是特殊的access数据库),表msysaccounts中保存用户和组的名称、sid、密码信息,用户和组的sid和用户 的密码,是用二进制保存的。在表msysgroups中,存储工作组sid和用户sid之间的对照关系,以此判断用户属于哪个组。这两个表都是隐藏系统 表。

  用户和组,对于数据库机器各对象之间的对应操作权限关系,并不保存在工作组信息文件中,而是存放在数据库文件中,是因数据库 而异的。在access数据库(.mdb)文件中,有一个隐藏系统表msysaces,其中存放着用户和组的sid以及与之对应的数据库各对象的标识 id,还有操作权限信息。以此表示用户和组与数据库对象之间的对应和操作权限关系。

  在用户打开数据库时,microsoft access根据用户输入的用户名称和密码,在工作组信息文件的msysaccounts表中查找该用户的sid,若未找到则提示帐户无效并让重新输入; 若找到了用户的sid,则在msysgroups表中查找到用户所属组的sid。根据找到的用户和组的sid,再去数据库(.mdb)的msysaces 表中查找对应的数据库对象id和其权限信息,由此可以确定用户和组可以访问什么数据库对象及有什么操作权限。

  4、用户与工作组

   在默认的工作组信息文件system.mdw中,默认的有三个帐户:admin、creator、engine,其中creator和engine是 microsoft jet数据库引擎内建的,用户无法干涉。管理员帐户admin,则是唯一的默认帐户,拥有对数据库中所有对象的全部权限,在中文access中,帐户名可 以是“管理员”也可以是英文下的admin。

  在默认的工作组信息文件中,默认设置了两个工作组:管理员组和用户组。

   在默认状态下,用户启动access时使用的是admin帐户,且无须输入用户名称和密码,因为其名称admin默认,而初始密码为空。若:用此默认方 式启动access,然后点击菜单工具—安全—用户与组帐号,在用户与组帐号窗口中,选更改登录密码选项卡,在旧密码输入框中空着,新密码、验证输入框中 填入新密码,就可以增设了管理员帐号的新密码。如果不是默认登录方式进入的,只须在旧密码输入框中填入旧密码,就可以更改密码。对于其它的用户,也可以同 样的更改自己的密码。设置了密码后,再启动access打开数据库,就会要求输入用户帐号了。

  管理员帐号的sid,对于所有的工作组信息文件都是一样的,这意味着:无论是用哪一个工作组信息文件关联到access启动系统,都可以使用管理员帐号去访问所有本机的access数据库。

   创建对象的用户,是该对象的所有者,拥有全部权限。即使被管理员撤消了权限,也可以进入用户与组权限对话框,给自己指定权限。管理员不能永久彻底撤消对 象所有者的权限,但是可以改变对象的所有者。所以管理员除了要控制好权限外,还要适时的改变对象的所有者,才能保证安全。

  5、用户与工作组的管理与权限

  设置工作组,是为了分配和管理权限的方便,可以将用户划分分配到工作组,然后对工作组授予 权限,而不用一个个的对用户授权。默认的管理员组和用户组,一般就已经可以满足使用了,默认都拥有全部权限。管理员组的sid对所有的工作组信息文件都相 同,而用户组的sid对所有工作组信息文件都不同。所有用户都属于用户组。

  管理员拥有全部的权限,而用户的权限最好是来自于用户组而不是单独授权。为了安全,不应该让用户组拥有全部权限。

  对用户和组的管理,可以按如下步骤:

  启动access,必须用管理员的帐号登录。

  打开要管理的数据库。

  点击菜单:工具—安全—用户与组帐号,进入用户与组的管理窗口,在其中可以新建用户、新建组、分配用户到某个组、更改登录密码、删除用户、删除组、清除用户密码等。

  点击菜单:工具—安全—用户与组的权限,进入用户与组权限管理窗口,在其中可以设置每个用户、对什么对象、有什么操作权限,还可以更改对象的所有者。在用户、组、对象类型的选择中可以切换设置设置方式。

  为了更彻底的安全,可以单独建立一个管理员帐号,授予全部权限,而将默认的管理员帐号删除(从管理员组移出,不能彻底删除)。然后删除管理员和用户组的全部权限。将所有对象的所有者该为新建的管理员帐号。这样可以保证只有新建的管理员帐号才能访问数据库。

  撤消用户级安全性:将管理员归属于管理员组,密码为空;将数据库所有对象的所有权限分配给用户组;将全部对象的所有权归属于管理员。

  6、用户级安全性向导

  可以利用用户级安全性向导来建立数据库的用户级安全性。在运行向导之前先将数据库备份以防万一。从菜单:工具—安全—设置安全机制向导,可以启动向导。按照提示进行设置操作,可以设置好组、用户、权限等各种安全性。

  四、用.mde文件保护数据库

  mde是一种经过编译的特殊形式的数据库,这种格式下,大多数对象只能执行而不能修改。也不能进行对象的导入和导出。

  点击工具—数据库实用工具—生成>mde文件,可以进入保存窗口。

  指定好原始的数据库位置和名称,指定要保存的mde文件的位置和名称,点击保存即可完成。

  access数据库的安全性,从根本上来说不如sql server一类的服务器级别数据库那么完善。但是对于桌面上的数据库管理应用来说,这些安全保密性能已经可以满足使用要求了。


http://www.esnet.com.cn/Article/jishu/Data/200610/9788.html

标签:

Access的系统对象

MSysObjects
MSysACEs
MSysQueries
MSysRelationships
MSysAccessObjects
MSysDb

Tables
Databases
Relationships
Forms
Modules
Reports
Scripts
SysRel
AccessLayout
DataAccessPages

备用:Access的系统表和对象

标签:

辽ICP备05003652号
流风洄雪听天籁,轻云蔽日看落花

Powered by Blogger