-1

는, 첫 번째 양식은 콤보 상자에서 사용자의 이름을 사용하고 전역 변수에 저장, 코드는 다음과 같습니다 :수 없습니다 - 미스 액세스 나는 여러 VBA 양식을

Option Compare Database 
Public emplID_global 

Private Sub OKLogin_Click() 


If Not IsNull(Me.Combo_emplID) Then 
    emplID_global = Me.Combo_emplID.Column(1) 
    DoCmd.Close 
    DoCmd.OpenForm "NavFrm", acNormal 
End If 
End Sub 

Private Sub Form_Load() 
Me.AdvName = emplID_global 
Me.DataForm.Form.Recordset.MoveLast 

End Sub 

있지만 :

지금 내 다른 형태로 나는 내가 이전의 양식을 사용하여 저장 형태의 부하에의 valueof 그 변수를 자동으로 채울하고자하는 콤보 박스가 아래 코드 작동하지 않습니다. 아무 것도하지 않습니다. 나는 모든 형태로 이런 종류의 코드를 사용하고 싶다.

누군가 내 코드에서 실수라고 제안 할 수 있습니까? 저는 VBA를 처음 접했습니다. 미리 감사드립니다 :)

+0

양식의 레코드 하나가 편집 가능한 경우 모두 같습니다. 개별 레코드에 대한 액세스를 제어하려면 SQLServer와 같은 것이 필요할 것입니다. Access db 보안은 일반적인 주제입니다. – June7

답변

3

해당 레코드의 소유자에 대한 원본 테이블에 필드를 추가하십시오. (난 그냥 Owner라고합니다.)

은 폼에 다음 코드를 추가합니다 :

Private Sub Form_BeforeInsert(Cancel As Integer) 
Owner = Environ("username") 
End Sub 

Private Sub Form_Current() 
Dim editable As Boolean 

if nz(Owner,"")="" then 
    editable=true 
else 
    editable = (Environ("username") = Owner) 
    End If 

Form.AllowDeletions = editable 
Form.AllowEdits = editable 

End Sub 

이이 일을 매우 일반적인 솔루션입니다. Environ("username")은 사용자의 Windows 사용자 이름을 반환합니다. 이 모든 것이 반드시 인 것은 아닙니다.이 안전합니다. 한 사람이 명령 프롬프트으로 가서 username 환경 변수를 편집하여 다른 사람으로 보일 수 있습니다. 이것은 확실히 이 아니며은 작은 컴퓨터 지식과 나쁜 의도로 NSA 또는 다른 누구도 막지 않습니다. 그러나 정직한 사람들을 정직하게 유지합니다.

설명 : BeforeInsert이 (가) 새 레코드로 실행 중입니다. 이 경우 레코드의 Owner 필드를 사용자의 Windows 사용자 이름으로 설정합니다.

OnCurrent 부분은 새 레코드가 표시 될 때마다 실행됩니다. 이 코드는 현재 Windows 사용자 이름이 레코드의 Owner 필드에 저장된 사용자 이름과 일치하는지 확인하고 이에 따라 AllowEditsAllowDeletions 플래그를 설정합니다. 또한 Owner 필드가 null 인 경우 (새 레코드의 경우와 마찬가지로) editabletrue으로 설정됩니다. 당신이 정말로 을 원한다면는 사용자가, 당신은 또한 ...

TextBox1.Enabled=editable 
ComboBox2.Enabled=editable 
... etc. 

간단한 솔루션 개별 텍스트 상자를 활성화/비활성화 할 수 일을 변경되어서는 안된다는 사실을 강조한다. 정직한 사람들이 서로의 작업을 덮어 쓰지 않도록합니다. 나는이 접근법을 많이 사용한다.

+1

니스. API 호출을 사용하지 않고보다 나은 보안을 원하면'Environ ("username") 대신'CreateObject ("WScript.Network"). UserName'을 사용하십시오. – Andre

+0

thanx @xpofer, 아주 좋은 접근 방법입니다. 나는 이것을 시도하고 여러분에게 돌아올 것입니다. 당신은 awsome입니다 –

+0

안녕하세요 @xpofer 나는 사용자가 양식과 데이터 입력 모드에서 편집을 제한했기 때문에 내가 서로 데이터를 편집하지 못하게 할 수 있다고 생각하지 않는다. 제출 단추를 누른 다음 다시 쿼리 할 때 양식을 저장한다.사용자가 양식의 데이터를 볼 수 있도록 허용하지 않았지만 사용자가 테이블의 데이터를 보거나 편집 할 수있는 부속 양식 데이터 시트가 있습니다 (이후 모든 액세스 기능이 비활성화되었으므로) 그래서 어떻게해야할까요? 특정 항목을 소유 한 사용자 만 하위 항목의 항목을 편집하거나 삭제할 수 있습니다. –