2017-04-19 51 views
0

我有一個Access 2010數據庫,我需要更新一個字段。現在我有一個按鈕,我的窗體將複製選定的行。我知道我可以通過在該字段上將Locked屬性設置爲Yes來使字段不重複。有沒有辦法保護一個字段,以便只有某些用戶可以編輯?

我需要做的是找到一種方法來使字段不重複,但仍然可以編輯某些人。我不想設置Locked屬性,因爲它會鎖定每個人。

我不知道如何做到這一點,除了改變Duplicate record按鈕的工作。現在它只是複製所選的行並將其粘貼到New Record行。這需要所有不是Locked的字段。

我讀到可能使用一堆變量並將它們設置爲每個字段的值,但這看起來很麻煩,因爲我有160個字段,我將不得不設置。然後將它們粘貼到New Record行。我寧願不必這樣做。

我已經使用過VBA而非Access。 VBA解決方案對我來說很好,我還沒有嘗試過任何東西,因爲我不知道哪裏可以開始。

+0

所以,當您點擊按鈕,它會創建一個新的行除了任何設置爲「鎖定」的字段外,表中的所有字段都來自舊記錄?你將如何決定你真的希望有人能夠編輯哪個「鎖定」字段?你將如何決定你想允許哪些用戶? –

+0

@ WayneG.Dunn只有一個字段我不想複製,只有某些用戶可以編輯。我還不知道將被允許編輯的用戶列表。我只維護DB,創建它的人離開了公司。 – Mike

回答

1

我建議一個子鎖定/解鎖的控制,就像這樣:

Private Sub SetControlsLocked(ForceLocked As Boolean) 

    Dim bLocked As Boolean 
    Dim sUser As String 

    If ForceLocked Then 
     ' Always lock before copying 
     bLocked = True 
    Else 
     ' More secure method than Environ("USERNAME") 
     sUser = CreateObject("WScript.Network").UserName 
     ' Lock for everyone except some users 
     ' If the list is longer or changes regularly, lookup the Username in a table instead 
     bLocked = Not (sUser = "jane" Or sUser = "bob" Or sUser = "mike") 
    End If 

    ' do the locking 
    Me!Control1.Locked = bLocked 
    Me!Control2.Locked = bLocked 

End Sub 

(參見上https://stackoverflow.com/a/32565953/3820271評論爲 「更安全」 的要求)。

,並在您的副本按鈕日常應用...

Private Sub cmdCopy_Click() 

    ' Lock before copying! 
    Call SetControlsLocked(True) 

    ' ... your existing copy routine 

    ' Unlock for special users 
    Call SetControlsLocked(False) 

End Sub 

...並打開表單時:

Private Sub Form_Load() 
    ' Lock for non-special users 
    Call SetControlsLocked(False) 
End Sub 
+0

這樣做了!謝謝您的幫助! – Mike

0

我所做的是有一張用戶及其權限級別和Windows登錄用戶名錶。我使用Environ("USERNAME")捕獲用戶名,並與用戶記錄匹配並適當設置表單,通常只是禁用/隱藏特定按鈕。

但真的必須做更多的數據庫設置,以防止用戶訪問受限制的數據。像隱藏導航窗格一樣,禁用功能區,禁用右鍵單擊快捷菜單,禁用功能鍵,甚至可能發佈爲可執行文件。

但是,如果他們知道後端在哪裏,是什麼阻止他們打開它?除非你去SQLServer數據庫之類的東西,什麼都不是。

+0

我並不擔心最終用戶在後端搞亂任何東西。他們甚至都不知道有一個。 Access DB只是SQL DB的前端。我是唯一可以直接訪問SQL的人。我只需要一種方法來限制用戶可以編輯一個字段的內容。 – Mike

+0

好的,我建議的是一種方式,它對用戶是透明的,他們甚至不知道,因爲他們不需要做登錄。前端打開時,代碼可以檢查是否已有記錄,然後進行相應響應,也可能拒絕訪問,直到他們「聯繫管理員」,以防有人忽略將新員工添加到Users表中。 – June7

+0

所以'Environ(「USERNAME」)'捕獲打開數據庫的人的windows用戶名?如果是這種情況,我可能只能使用需要編輯功能的用戶列表,而不允許其他人使用。 – Mike

相關問題