pierwszym krokiem jest stworzenie obiektu który będzie odpytyany. Jest to kwerenda z zewnętrznym źródłem danych. Nazwijmy ją np. UserInGroup
PARAMETERS GroupName Text ( 255 );
SELECT DISTINCT Count(Accounts.FGroup) AS chk
FROM MSysAccounts AS Accounts INNER JOIN (MSysAccounts AS Accounts_1 INNER JOIN MSysGroups AS Groups ON Accounts_1.SID = Groups.GroupSID) ON Accounts.SID = Groups.UserSID IN 'C:\Users\Orzemek\AppData\Roaming\Microsoft\Access\System.mdw'
WHERE (((Accounts_1.Name)=[GroupName]) AND ((Accounts.Name)=CurrentUser()) AND ((Accounts.FGroup)=0) AND ((Accounts_1.FGroup)<>0));
kolejnym elementem jest funkcja sprawdzająca
Function currentgrups(GroupName As String) As Boolean
currentgrups = CBool(CurrentProject.Connection.Execute("execute UserInGroup @GroupName ='" & GroupName & "'").Fields(0).Value)
End Function
Jest to taki typowy skrótowiec :) przedstawię go w prostszej postaci z komentarzem
Function currentgrups(GroupName As String) As Boolean
Dim aRs As ADODB.Recordset
Dim sSql As String
' tu wstawiamy kod SQL który chcemy wykonać
sSql = "execute UserInGroup @GroupName ='" & GroupName & "'"
' uruchamiamy kod SQL za pomocą aktywnego połączenia bazy danych
Set aRs = CurrentProject.Connection.Execute(sSql)
'pobieramy wartość pierwszej kolumny (uwaga zaczynamy liczyć od 0)
'i konwertujemy wynik do wartości prawda / fałsz
currentgrups = CBool(aRs.Fields(0).Value)
End Function
w szczególnym przypadku możemy zrezygnować z tworzeia dodatkowego obiektu na rzecz dynamicznego SQL-a. Funkcja wtedy wyglądała by następująco:
Function currentgrups(GroupName As String) As Boolean
Dim aRs As ADODB.Recordset
Dim sSql As String
Const spacjs As String = " "
' deklaracja ze ścieżką do zdalnego pliku z hasłami
Const plik_z_pass As String = "d:\System.mdw"
' tu wstawiamy kod SQL który chcemy wykonać
sSql = ""
sSql = sSql & "SELECT DISTINCT Count(Accounts.FGroup) AS chk" & spacjs
sSql = sSql & "FROM MSysAccounts AS Accounts INNER JOIN (MSysAccounts AS Accounts_1 INNER JOIN MSysGroups AS Groups ON Accounts_1.SID = Groups.GroupSID) ON Accounts.SID = Groups.UserSID" & spacjs
sSql = sSql & "IN '" & plik_z_pass & "'" & spacjs
sSql = sSql & "WHERE (((Accounts_1.Name)='" & GroupName & "') AND ((Accounts.Name)=CurrentUser()) AND ((Accounts.FGroup)=0) AND ((Accounts_1.FGroup)<>0));"
' uruchamiamy kod SQL za pomocą aktywnego połączenia bazy danych
Set aRs = CurrentProject.Connection.Execute(sSql)
'pobieramy wartość pierwszej kolumny (uwaga zaczynamy liczyć od 0)
'i konwertujemy wynik do wartości prawda / fałsz
currentgrups = CBool(aRs.Fields(0).Value)
End Function
Brak komentarzy:
Prześlij komentarz