2011-04-06 67 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」字段中的值(可能應該有默認值?)。