Tabellen, queries onzichtbaar maken

Status
Niet open voor verdere reacties.

sanders1969

Gebruiker
Lid geworden
29 dec 2018
Berichten
243
Ik heb eerder een functie geschreven om de tabellen en queries onzichtbaar te maken via VBA echter kan ik deze functie niet meer vinden.
Hebben jullie dit eerder gedaan en zou jullie een link waar het online staat of een coderegel kunnen doorsturen?
De bedoeling is dat een specifieke groep gebruikers van de Access applicatie na opstarten niet de tabellen en de queries kunnen zien.
Ik heb de situatie al beveiligd wanneer ze het via de SHIFT knop ingedrukt houden dat dit niet mogelijk is ;-)
 
Hi,

Deze oplossing gebruik ik wel eens
Code:
'
'
' If B_Developer Then
    'Call HideUnhide(bHide)
    '
' End If


Public Sub HideUnhide(ByVal bHideUnhide As Boolean)  '1
    On Error Resume Next


    'Tables
    Dialog.Box "Tabellen:" & CurrentDb.TableDefs.count

    Dim dbs As Database
    Dim tdf As TableDef
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
        If Left(tdf.Name, 4) <> "MSys" Then
            Application.SetHiddenAttribute acTable, tdf.Name, bHideUnhide
        End If
    Next tdf
    dbs.TableDefs.Refresh

    Set tdf = Nothing
    Set dbs = Nothing


    Dim db As Object
    Set db = CurrentDb

    'Modules

    Dim obj As Object
    Dim frm As Form
    Dim i As Integer

    'Tables
    For i = 0 To CurrentDb.TableDefs.count - 1
        If Left$(CurrentDb.TableDefs(i).Name, 4) <> "MSys" Then Application.SetHiddenAttribute acTable, CurrentDb.TableDefs(i).Name, bHideUnhide
    Next i


    Dialog.Box "Queries"
    For i = 0 To CurrentData.AllQueries.count - 1
        Application.SetHiddenAttribute acQuery, CurrentData.AllQueries(i).Name, bHideUnhide
    Next i

    Dialog.Box "Forms"
    For Each frm In CurrentProject.AllForms
        frm.visible = True
        'Application.SetHiddenAttribute acForm, obj.Name, bHideUnhide
    Next frm

    Dialog.Box "Modules "
    For Each obj In CurrentProject.AllModules
        Application.SetHiddenAttribute acModule, obj.Name, bHideUnhide
    Next obj

    Dialog.Box "Reports"
    For Each obj In CurrentProject.AllReports
        Application.SetHiddenAttribute acReport, obj.Name, bHideUnhide
    Next obj
Uit:
    Exit Sub
Fout:
    Dialog.Box "HideunHide obejcts:" & Err.description

End Sub

voor dialog.box kan je msgbox lezen , wellicht is dit wat je zoekt

Gr. Jan
 
De bedoeling is dat een specifieke groep gebruikers van de Access applicatie na opstarten niet de tabellen en de queries kunnen zien.
Ik zou zeggen: op de beheerder/ontwikkelaar mag niemand de queries en tabellen zien :). Gebruikers hebben daar immers niets te zoeken. Zorgen dat het Navigatievenster niet zichtbaar is, zou toch al genoeg moeten zijn i.c.m. met het disablen van de Shift toets? De rest start je op vanaf je startformulier.
 
Beste Jan,

Volgens mij moet jouw code direct implementeerbaar zijn.
Vandaag ga ik het implementeren en ik laat je straks weten.
@Octafish, klopt alleen te vaak maak ik mee dat mijn voorgangers dit niet al te serieus nemen net zoals opdrachtgever de AVG onderschatten ;-)
 
Hoi Jan

Ik heb je oplossing geimplementeerd en de tabellen lijken onzichtbaar echter kon ik ze wel zien en als ik kan betreffende tabel gewoon openen (zie afbeelding hieronder).
Misschien dat een andere gebruiker dit niet ziet want er lijkt een soort witte filter op te zitten en dat ik als beheerder dit wel zie ofzo.
Uiteraard als ik de shift knop uitschakel dan kom je niet eens in de tabellen structuur maar ik hoopte dat dit ook een oplossing zou kunnen zijn.
Misschien moet ik mijn vraag beter stellen.
Als ik de tabellen zegmaar onzichtbaar maak, kan je dan alsnog tabellen openen?

tabellen_zichtbaar.png
 
Je kunt in het Navigatiepane aangeven dat je 'onzichtbare' objecten wilt zien. Elke gebruiker die in staat is het navigatiepane te openen, kan dat vinkje aanzetten en je verborgen tabellen zien. Die zijn dan grijs, maar wel te openen. Daarom vind ik het ook een schijnoplossing, en zou ik er geen tijd in hebben gestoken om het zo op te lossen. Het is veel beter om te zorgen dat gebruikers het Navigatievenster niet kunnen openen. Maar goed, dat is mijn simpele mening :).
 
Als je idd de tabellen gewoon kan bekijken is dit geen oplossing.
Je wilt juist dit voorkomen.
Hoe kan ik via vba dat gebruikers de Navigatievenster niet kunnen openen?
 
Dat had je toch al geregeld? :). Ik heb een AutoKeys macro gemaakt (met die naam dus) die één submacro als opdracht heeft: {+F11}. Daarmee voorkom je dat je de F11 toets kunt gebruiken. En dus het Navigatiepaneel kunt starten. In mijn ontwikkeldb heb ik de macro hernoemd naar AutoKeys_tmp zodat hij niet triggert als ik mijn ontwikkeldb open. Bij het uitrollen pas ik dan de naam aan naar AutoKeys.
 
Eerlijk gezegd heb ik alleen Access applicaties gebouwd waar men creatief eea kan doen maar de doelgroep die ik bediende waren geen programmeurs.
Sinds kort ben ik me gaan verdiepen in het vergrendelen dus weet niet hoe eea kan vergrendelen.
De Shiftknop vergrendelen wist ik maar zag dus dat je gewoon in de tabellenstructuur kan komen dus is geen optie.
Ik heb zojuist de toets F11 gedrukt en begrijp nu pas wat je bedoelt dat je de navigatiedeelventer gesloten houdt.
Ik ben zelf geen voorstander van Macro's en is er geen andere vba manier om deze navigatiedeelventer gesloten te houden?
 
Ik gebruik maar twee soorten macro's (althans: één soort met twee vaste namen), en dat zijn dus AutoKeys, en AutoExec. Daarmee start je acties (macro's, procedures etc) automatisch op bij het starten van de db. Die zitten mij verder niet in de weg, en werken doorgaans prima. De AutoExec gebruik ik alleen om een procedure te starten waar de rest in gebeurt. Je kunt dat omzeilen door de code onder een startmenu te hangen, dan werkt het principe hetzelfde. Het is dus alleen bedoeld om een plek te hebben waar je acties gestandaardiseerd wilt laten uitvoeren. Omdat het Navigatievenster is verborgen, zien de gebruikers ook de macro's verder niet.
Mensen die 'creatief iets mogen doen' heb ik liever niet in mijn databases :). Doorgaans betekent dat: slopen :D. Ik gebruik liever een formulier waarin mensen zelf queries mogen maken, op basis van wat voor het werk nodig is, en die dan worden opgeslagen in hun eigen profiel. Dat werkt prima, want gebruikers zitten elkaar dan niet in de weg, en ik hou mijn basisqueries netjes op orde.
 
Zo hehe ik heb eea aan de praat gekregen zonder een Macro te gebruiken.
Online heb ik code gevonden van een Pascal ter Heege en heb zelf her en der wat gewijzigd.
Ik beweer uiteraard niet dat dit de beste methode is maar vind via vba werken ideaal.

Wanneer ik de MS Access applicatie als .mde opslaat dan wil ik dat Shift knop, de F11 en de navigatiedeelvenster niet meer functioneren.
Onderstaande code kan je dit inregelen.
Klein nadeeltje is wel dat je altijd even de mde moet openen om de Shift knop, de F11 en de navigatiedeelvenster eenmaal uit te schakelen.
Lijk me geen verkeerde procedure om altijd even te controleren of alles nog werkt.

Code:
Private Sub Form_Load()

If Right(LCase(CurrentDb.Name), 3) = "mde" Then
	
'       uitschakelen navigatiedeelvenster
        DoCmd.SelectObject acTable, , True
        DoCmd.RunCommand acCmdWindowHide

        'geen shiftknop
        ChangeProperty "AllowBypassKey", 1, False

        'oa geen F11 knop
        ChangeProperty "AllowSpecialKeys", 1, False

end if

End Sub

Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
 
'   Functie komt rechtstreeks van bovenstaande Microsoft bron
 
    Dim dbs As Object, prp As Variant
    Const conPropNotFoundError = 3270
 
    Set dbs = CurrentDb
    On Error GoTo Change_Err
    dbs.Properties(strPropName) = varPropValue
    ChangeProperty = True
 
Change_Bye:
    Exit Function
 
Change_Err:
    If err = conPropNotFoundError Then
        Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)
        dbs.Properties.Append prp
        Resume Next
    Else
        ChangeProperty = False
        Resume Change_Bye
    End If
End Function
 
Ik weet niet of iemand dit weet maar sinds ik bovenstaande code heb geimplementeerd kan ik niet meer debuggen.
Ik heb een onderbrekingspunt in mijn code geplaatst echter wordt deze gewoon overgeslagen en wordt de code gewoon gerund zonder stil te staan op onderbrekingspunt.
Alles draait volgens programma echter kan ik niet debuggen.
Wellicht moet ik een bepaalde instelling resetten en hopelijk weet iemand welke.
 
Ik denk dat het aan deze regel ligt:
Code:
     ChangeProperty "AllowSpecialKeys", 1, False
Dat is althans de meest voor de hand liggende, omdat je debugt met een functietoets. Je hebt een muur rondom je huis gebouwd, maar vergeten er een deur in te zetten :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan