2010-01-12 66 views
0

考慮設置:MS Access 2007年 - 確定用戶和基於該限制對數據的訪問

  • 女士訪問應用程序分成前端和後端都=本地的MS Access
  • 前端由只是形式 - 這將是訪問數據
  • 前端拷貝分配給每個用戶機(感謝答案this question

我的唯一途徑需要實現以下情形:與< 20個用戶

  • 女士訪問應用程序,
  • 每個用戶被分配到1〜10個項目,
  • 當用戶打開MS訪問,他只應呈現他被分配到

因此,例如,與項目有關的(一個或多個)的數據,我們有用戶:

  • 約翰
  • 歐文

約翰被分配給項目A,B,d。 Owen to B,D

當John登錄時,他只能看到與項目A,B,D相關的數據 。當歐文 日誌中,他只能看到B,d

約翰和歐文可以同時在後端

  • 用戶
  • 項目訪問應用程序

相關表格

  • userProject - 將用戶以多對多的關係鏈接到項目。每個用戶可以分配到一個或多個項目,一個或多個用戶可以在一個項目上工作。
  • 我碰到this solution來到databasedev.co.uk基本上採用了隱藏式的形式來存儲當前用戶的詳細信息,然後利用這個來過濾其他形式的數據。

    因此,這裏是我的問題:

    那是要推薦的解決方案?有沒有更好的選擇?我想我可以在前端使用表格而不是隱藏窗體。

    回答

    1

    編輯重新評論
    我看不出爲什麼你不應該在用戶的連接表中維護一個用戶表的後端,用戶可以用來過濾項目的項目。

    如果您使用的是網絡名稱(http://www.mvps.org/access/api/api0008.htm),可以使用代碼獲取當前用戶,它可以存儲在表單上的隱藏字段中,這對於將表單設置爲相關項目非常有用,或者您可以存儲自定義數據庫屬性的名稱(http://wiki.lessthandot.com/index.php/Custom_Database_Properties_Creation_and_Use

    以下代碼適用於查找登錄用戶的數量。

    您可以使用提供程序特定的ADO模式。你需要通過一個有效的連接,例如:

    ADOUserList Currentproject.Connection 
    
    
        Public Sub ADOUserList(oConn As ADODB.Connection) 
        Dim rs As ADODB.Recordset 
         Set rs = oConn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 
         Debug.Print rs.GetString 
         rs.Close 
        End Sub 
    

    的更多信息:http://msdn.microsoft.com/en-us/library/aa155436.aspx

    +0

    Remou,請糾正我,如果我錯了,但我相信它會給我目前的用戶名單。這不是問題所在。我要求提供一種解決方案,根據給定項目的用戶分配情況,過濾前端顯示給用戶的數據。 – kristof

    +0

    道歉,我錯誤地解讀了20位用戶登錄的問題,而不是20位用戶。 – Fionnuala

    +0

    我看不出爲什麼你不應該在後臺維護一個用戶的連接表,可以用來過濾項目的項目。 – Fionnuala

    1

    我有一個類似的,如果稍微複雜的局面。在我的情況下,用戶被分配到用戶組,這些用戶組對Access對象(表單,報告等)具有不同的權限。他們還有他們分配的項目和首選項。表:

    user

    user_group

    user_pref

    project

    user_project

    我還在,但是,使用一個隱藏的表單(session),它保存有關用戶會話的信息那'當前登錄。例如:user_id,user_name,分配項目的子窗體,首選項(如「當前項目」)。

    最後,一個模塊basSession包含我需要的所有功能getset隱藏形式的任何會話信息,例如gfSession_GetUserID()

    HTH

    +0

    謝謝,這聽起來很有趣。至少類似於我更熟悉的標準Web應用程序方法。我可能實際上使用這種方法 – kristof

    +0

    是的,我使用了我自己的LAMP開發中的'session'概念。僅供參考,我使用一個名爲CodeCharge Studio的Web應用程序IDE(使用PHP),我發現它在使用Access時非常相似,包括查詢構建器,屬性窗口等。 – maxhugen

    0

    要知道,在你目前的設置是沒有辦法的方法,以「確定用戶和基於該限制對數據的訪問」。如果所有數據駐留在共享的後端Access文件中,則用戶可以打開後端數據庫並瀏覽所有數據。實際限制用戶訪問數據的唯一方法是使用數據庫服務器。

    如果你想去訪問,我建議你創建所有(重要)表的查詢,並在表單中使用這些查詢。在查詢中包含一個WHERE語句,將輸出限制爲用戶可查看的內容。您可以通過更改打開數據庫時的完整SQL來完成此操作,也可以在查詢的WHERE部分中包含全局變量,並將該變量設置爲當前用戶ID。