2011-04-06 50 views
1

我有一个MS Access应用程序(我知道,我知道),它访问远程MS SQL Server上的表。如何在MS Access中创建远程表“只写”?

我也有一个表格,它允许用户在表格中输入数据。问题是,我希望用户不能读取或修改现有数据,但我只希望他们输入数据并将其存储(数据有点敏感)。

我试图授予连接到数据库的用户只有INSERT权限,导致错误,表格根本无法访问。

谷歌搜索后,我找不到任何解决此问题的东西。

所以我的问题:如何确保用户只输入数据,但不修改或读取MS Access(2003)中的现有数据?

回答

0

最后这里是我做了什么:

首先,我创建了两个表:

CREATE TABLE mydata (...) 
CREATE TABLE mydata2 (...) 

然后,我创建了一个INSTEAD OF触发:

CREATE TRIGGER mytrigger ON mydata 
INSTEAD OF INSERT 
AS 
    INSERT INTO mydata2 SELECT * FROM INSERTED 
END 

这搬离MYDATA每一个条目插入mydata2。 Access中的表单仍然保留在mydata上,这使得条目对用户不可见。

感谢CodeSlave,谁也认为这个解决方案

3

我会删除从选择权限该表(正如你已经完成的那样)并通过存储过程完成所有IO。你可以控制的方式正是被插入到系统

让我知道如果你需要帮助运行在ADO一个存储过程,我会后的东西了

+3

这是我会去和方向。如果它更容易,您可以将新记录转储到临时表中,并使用触发器将其添加到临时表中后立即将其导入到临时表中 - 然后将其从暂存表中的临时表中删除。 – BIBD 2011-04-06 15:11:58

2

我更喜欢一个存储过程,但认为这是一个备用授予访问表中的视图与检查选项

create table testview (somevalue varchar(25), entereddate datetime) 
go 
insert into testview values('First Value', getdate()) 

go 
create view testview_currentonly 
as 
SELECT 
    somevalue 
    , entereddate 
FROM testview 
WHERE entereddate >= getdate() 

with check option 
-- end view create 
go 
insert into testview_currentonly values('Second Value', getdate()) 

select * from testview_currentonly 

select * from testview 

您不能选择从该视图任何东西,因为所有条目(假定用户无法操作进入了“entereddate”字段中的值(可能应该有默认值?)。