Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

把表设置成只读的问题

lmzdq  发表于:2014-01-22 09:49:09  
复制

近日有一简单的access数据库,想把其中的一张表设置为只读,从而保证该表中的内容不被修改,论坛中落新小尘给出了答案,如下:

 

 

可以用代码把表设置成只读的系统表,代码如下:

    For Each tabdef In CurrentDb.TableDefs
        If tabdef.Name = tabname Then
                tabdef.Attributes = -2147483646
        End If
    Next

请问,具体如何操作呢?这些代码怎么放,放在哪里?期待您的答复。

 

Top
落尘_小新 发表于:2014-01-22 10:07:12

可以把这段代码写在一个标准模块中,写成公共过程.如下这样:

Public Sub 表只读(tabname As String)
    For Each tabdef In CurrentDb.TableDefs
        If tabdef.Name = tabname Then
            tabdef.Attributes = -2147483646
        End If
    Next
End Sub
然后在窗体或按钮等控件的适当的事件中写入调用代码即可,如:

Call 表只读("表1")

当然,也可以在宏中运行该段过程.这就看你的需要了.

上传一示例供参考.本例中是在窗体中的按钮单击事件中执行的.

点击下载此附件



lmzdq 发表于:2014-01-22 10:53:32
由于本人学习太浅,实在是看不懂。望大大附上具体的操作步骤。

lmzdq 发表于:2014-01-22 10:57:09
如何写在宏里呢?

落尘_小新 发表于:2014-01-22 11:37:44

如果要用宏来执行的话,可以新建一个宏并用 RunCode 操作来执行.(甚至宏名你可以写成 autoexec 这样只要打开数据库就会自动运行该宏,当然是要屏避掉Shift快捷键以避免绕过该宏的运行.)

并且需要把该 SUB 语句修改成 Function 语句,如示例:

点击下载此附件

这样做其实也不是完全的办法,如果有人想恶意的去修改你的数据,那么有N多的办法来把这个表的属性修改过来并进行任何操作.

即使生成MDE文件也无法避免.

但如果把恶意的这部分人排除的话(只是怕误操作),那完全没有必要这样做.就像你前一个贴中 黎红军 老师回复的一样.

只要让用户在窗体中操作,而表不直接面对用户,这样你在窗体中设置了你的规则,你想怎么样都行.




lmzdq 发表于:2014-01-22 12:06:38

由于技术层次相差距大,本人access水平实在太烂,真的无法看懂您的说明。您的指点,对有一定基础的人而言,一点就通了。可对我来讲,就是云里雾里。



总记录:5篇  页次:1/1 9 1 :