Datenbank vor Fremdzugriff/Änderungen schützen

Moderator: ModerationP

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 18. Sep 2019, 08:06

Vielen Dank! Habe nun auch die Seite gefunden woher der Code stammt: https://docs.microsoft.com/de-de/office/vba/access/concepts/data-access-objects/create-a-user-defined-property

Jedoch wird hier leider auch zu wenig erklärt!? Verstehe immer noch nicht genau was alle Schritte bedeuten

Soll dieser Code zusätzlich zum vorgeschlagenen Code verwendet werden? Ja oder?
Dieser Code erstellt eine benutzerdefinierte Eigenschaft wenn diese nicht vorhanden ist, richtig?
Dieser Code wird in ein Globales Modul gesetzt, richtig?

Code: Alles auswählen
Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Hier wird ich wohl meinen Namen der Datenbank eingeben, er will sich ja auf eine Datenbank fixieren/öffnen

Code: Alles auswählen
' Set the Archive property to True.
   SetProperty dbsNorthwind, "Archive", True
greift wohl nacher auf diese Zeile zu
Code: Alles auswählen
  dbsTemp.Properties("strName") = booTemp

Das versteh ich leider nicht, Wie oder wo kommt nachher dieser String "strName" her?

Ich verstehe immer noch nicht:
Werden alle Eigenschaften gesucht? oder nur die überprüft die ich in meinen Code abfrage?

GLG Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 18. Sep 2019, 10:09

Hey,

hier meine Funktion:

Code: Alles auswählen
Private m_DaoDB As DAO.Database
Public Property Get CurrentDbC() As DAO.Database
If (m_DaoDB Is Nothing) Then
Set m_DaoDB = CurrentDb
End If
Set CurrentDbC = m_DaoDB
End Property


Falls das nicht klappen sollte, kannst du auch erstmal in dem Code aus meinem ersten Post alle CurrentDBC durch CurrentDB ersetzen.

VG
WM
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 18. Sep 2019, 15:06

Also nochmal neu

Ich habs einfach nicht hinbekommen! Jedoch mit einem anderen Code schon

Code: Alles auswählen
Sub DB_Sperren(janein As Boolean)

ChangeProp "StartupShowDBWindow", dbBoolean, Not janein
ChangeProp "StartupShowStatusBar", db, Not janein
ChangeProp "AllowBuiltinToolbars", dbBoolean, Not janein
ChangeProp "AllowFullMenus", dbBoolean, Not janein
ChangeProp "AllowBreakIntoCode", dbBoolean, Not janein
ChangeProp "AllowSpecialKeys", dbBoolean, Not janein
ChangeProp "AllowSpecialKeys", dbBoolean, Not janein
ChangeProp "AllowBypassKey", dbBoolean, Not janein
ChangeProp "AllowToolbarChanges", dbBoolean, Not janein

'ChangeProp "StartupShowDBWindow" , dbBoolean, Not janein
'ChangeProp "StartupShowStatusBar" , dbBoolean, Not janein
'ChangeProp "AllowBuiltinToolbars" , dbBoolean, Not janein
'ChangeProp "AllowFullMenus" , dbBoolean, Not janein
'ChangeProp "AllowBreakIntoCode" , dbBoolean, Not janein
'ChangeProp "AllowSpecialKeys" , dbBoolean, Not janein
'ChangeProp "AllowBypassKey" , dbBoolean, Not janein

End Sub
 
Function ChangeProp(strEigenschaftenname As String, varEigenschaftentyp As Variant, varEigenschaftenwert As Variant) As Boolean
Dim DBs As DAO.Database, prp As DAO.Property
Const conPropNotFoundError = 3270

On Error GoTo ChangeProp_Fehler

Set DBs = CurrentDb
    DBs.Properties(strEigenschaftenname) = varEigenschaftenwert
    ChangeProp = True

ChangeProp_Ende:
    Exit Function

ChangeProp_Fehler:

If Err = conPropNotFoundError Then
        Set prp = DBs.CreateProperty(strEigenschaftenname, _
            varEigenschaftentyp, varEigenschaftenwert)
        DBs.Properties.Append prp
        Resume Next
    Else
        ChangeProp = False
        Resume ChangeProp_Ende
    End If
End Function


Aufzurufen über:
Code: Alles auswählen
Sub ....
DB_Sperren true
End Sub


Es funktioniert auch wunderbar, nur leider nicht mit der "If Accde" Abfrage ...
siehe nochmals den Code dazu
Code: Alles auswählen
'Funktion, um zu prüfen ob accde: Abfrage in Formular frmStart (Form_Open)
Public Function IsACCDE() As Boolean
On Error GoTo Err_IsACCDE
Dim StrProp As String
'
On Error Resume Next
    StrProp = CurrentDb.Properties("MDE")
    IsACCDE = (Err.Number = 0) And (StrProp = "T") 'true bei ACCDE
Exit_IsACCDE:
    On Error Resume Next
'    Resume Next
    Exit Function
Err_IsACCDE:
    MsgBox Err.Description
    Resume Exit_IsACCDE
End Function


Wenn ich es ohne "if accde" verwende und die Datenbank komprimiere und repariere funktioniert es sofort, leider kann ich dann keine accde Version mehr speichern.
Wenn ich es mit der "if accde" verwende und die Datenbank komprimiere und repariere passiert erstmal nichts, leider auch nach speichern eine accde Version auch nichts...
Wenn ich es mit der "if accde" verwende und die Datenbank NICHT komprimiere und repariere passiert erstmal auch nichts, leider auch nach speichern eine accde Version auch nichts...

Was mache ich hier schon wieder falsch?? :roll:

LG Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 19. Sep 2019, 07:04

Hey,

erstelle doch mal ein Minimalbeispiel, in welchem nur ein Startformular und deine verwendete Funktion enthalten ist. Dann schau ich mir das an.

VG
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 19. Sep 2019, 07:51

Guten Morgen!

Gerne, hab sie dir angehängt.
habe alles nicht notwendige rausgenommen!, war ja doch schon sehr umfangreich die Datenbank
Da ich vieles ausprobiert habe, habe ich das momentan nicht verwendete einmal unter Kommentare gesetzt - einfach ignorieren bitte
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 19. Sep 2019, 09:14

Hey,

also, in deinem Formular frmStart:
Code: Alles auswählen
Private Sub Form_Open(Cancel As Integer)
DB_Sperren
End Sub


in dein Modul mdlDBsperren:
Code: Alles auswählen
Option Compare Database
Option Explicit

Private m_DaoDB As DAO.Database

Public Function IsACCDE() As Boolean
On Error GoTo Err_IsACCDE
Dim StrProp As String
'
On Error Resume Next
    StrProp = CurrentDb.Properties("MDE")
    IsACCDE = (Err.Number = 0) And (StrProp = "T") 'true bei ACCDE
Exit_IsACCDE:
    On Error Resume Next
'    Resume Next
    Exit Function
Err_IsACCDE:
    MsgBox Err.Description
    Resume Exit_IsACCDE
End Function

Public Sub DB_Sperren()

    If IsACCDE Then
        MsgBox ("Bin eine ACCDE Datei")
        DoCmd.ShowToolbar "Ribbon", acToolbarNo
        CurrentDbC.Properties("ShowDocumentTabs") = False
        CurrentDbC.Properties("AllowSpecialKeys") = False
        CurrentDbC.Properties("AllowDatasheetSchema") = False
        CurrentDbC.Properties("StartUpShowDBWindow") = False
        CurrentDbC.Properties("DesignWithData") = False
        CurrentDbC.Properties("AllowFullMenus") = False
        CurrentDbC.Properties("AllowBypassKey") = False
       
    Else
        MsgBox ("Bin eine Vollversion")
        DoCmd.ShowToolbar "Ribbon", acToolbarYes
        CurrentDbC.Properties("ShowDocumentTabs") = True
        CurrentDbC.Properties("AllowSpecialKeys") = True
        CurrentDbC.Properties("AllowDatasheetSchema") = True
        CurrentDbC.Properties("StartUpShowDBWindow") = True
        CurrentDbC.Properties("DesignWithData") = True
        CurrentDbC.Properties("AllowFullMenus") = True
        CurrentDbC.Properties("AllowBypassKey") = True
   
    End If

End Sub


Public Property Get CurrentDbC() As DAO.Database
If (m_DaoDB Is Nothing) Then
Set m_DaoDB = CurrentDb
End If
Set CurrentDbC = m_DaoDB
End Property


Alles auskommentierte habe ich bei mir gelöscht. Damit steht in dem ganzen Modul wirklich nur das, was ich gepostet habe. Anschließend kannst du eine accde erstellen. Diese dann öffnen, schließen und nochmal öffnen. Manche Sachen werden erst beim 2ten mal öffnen aktiv. Jetzt sollte so ziemlich alles gesperrt sein.

VG
WM
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 19. Sep 2019, 09:51

Vielen Dank es funktioniert!

Jedoch hab ich noch das Problem das beim Bericht die Menüleiste gebraucht wird bezüglich drucken?
Kann man hier nur das Drucken aktivieren oder muss die ganze Leiste her?

Habe vorhin selbst bei meinen anderen aus kommentierten Codes experimentiert, haben nämlich auch funktioniert aber wie du sagst er beim 2. öffnen - warum ist das so?

Habe jetzt noch weitere Fragen:
1. Was genau macht dieser Code?
Code: Alles auswählen
Private m_DaoDB As DAO.Database
Public Property Get CurrentDbC() As DAO.Database
If (m_DaoDB Is Nothing) Then
Set m_DaoDB = CurrentDb
End If
Set CurrentDbC = m_DaoDB
End Property


2. Mit diesen Code hat es jetzt ebenfalls funktioniert, der hat mir so gut gefallen da er so schön aus kommentiert ist (Menüleiste bleibt bei diesen Code komplett stehen)
Code: Alles auswählen
Function StartEigenschaften()
If IsACCDE Then
MsgBox ("Bin eine ACCDE Datei")

   Dim intX As Integer
   Const DB_Text As Long = 10
   Const DB_Boolean As Long = 1

   '//Anwendungstitel
   AendernEigenschaft "AppTitle", DB_Text, "Text"
   '// MS Access-Titelleiste aktualisieren
   Application.RefreshTitleBar
   '//Datenbankfenster ausblenden
   AendernEigenschaft "StartupShowDBWindow", DB_Boolean, False
   '//Menü- und Symbolleistenänderungen zulassen
   '//AendernEigenschaft "AllowToolbarChanges", DB_Boolean, False
   '//Codeansicht nach Fehler zulassen
   '//AendernEigenschaft "AllowBreakIntoCode", DB_Boolean, False

   '//Frage-Symbolleiste ausblenden
   Application.CommandBars.DisableAskAQuestionDropdown = True
   '//Fenster in Taskleiste nicht anzeigen
   Application.SetOption ("ShowWindowsInTaskbar"), False

Call DB_Sperren
Else
MsgBox ("bin die Vollversion")
Call DB_oeffnen
End If
End Function

Function AendernEigenschaft(strName As String, varTyp As Variant, varWert As Variant) As Integer

   Dim DBs As Object, prp As Variant
   Const conPropNotFoundError = 3270

   Set DBs = CurrentDb
   On Error GoTo AendernEigenschaft_Fehler

   DBs.Properties(strName) = varWert
   AendernEigenschaft = True

AendernEigenschaft_Ende:
   Exit Function

AendernEigenschaft_Fehler:
   If Err = conPropNotFoundError Then
      Set prp = DBs.CreateProperty(strName, varTyp, varWert)
      DBs.Properties.Append prp
      Resume
   Else
      AendernEigenschaft = False
      Resume AendernEigenschaft_Ende
   End If
End Function


Public Sub DB_oeffnen()
On Error Resume Next

   '//Menü- und Symbolleistenänderungen zulassen
   AendernEigenschaft "AllowToolbarChanges", DB_Boolean, True
   '//Codeansicht nach Fehler zulassen
   AendernEigenschaft "AllowBreakIntoCode", dbBoolean, True
   '//Spezialtasten (ALT+F1 (F11), STRG+F11, STRG+UNTBR und STRG+G) zulassen
   AendernEigenschaft "AllowSpecialKeys", dbBoolean, True
   '//Shifttaste zulassen
   AendernEigenschaft "AllowBypassKey", dbBoolean, True
End Sub

Public Sub DB_Sperren()
On Error Resume Next

   '//Menü- und Symbolleistenänderungen sperren
   AendernEigenschaft "AllowToolbarChanges", DB_Boolean, False
   '//Codeansicht nach Fehler sperren
   AendernEigenschaft "AllowBreakIntoCode", dbBoolean, False
   '//Spezialtasten (ALT+F1 (F11), STRG+F11, STRG+UNTBR und STRG+G) sperren
   AendernEigenschaft "AllowSpecialKeys", dbBoolean, False
   '//Shifttaste sperren
   AendernEigenschaft "AllowBypassKey", dbBoolean, False

End Sub

'Funktion, um zu prüfen ob accde: Abfrage in Formular frmStart (Form_Open)
Public Function IsACCDE() As Boolean
On Error GoTo Err_IsACCDE
Dim StrProp As String
'
On Error Resume Next
    StrProp = CurrentDb.Properties("MDE")
    IsACCDE = (Err.Number = 0) And (StrProp = "T") 'true bei ACCDE
Exit_IsACCDE:
    On Error Resume Next
'    Resume Next
    Exit Function
Err_IsACCDE:
    MsgBox Err.Description
    Resume Exit_IsACCDE
End Function


Was ich nicht verstehe ist warum wird einmal "DB_Boolean" geschrieben (dafür wurde ja oben eine Variable festgelegt)
'//Menü- und Symbolleistenänderungen zulassen
AendernEigenschaft "AllowToolbarChanges", DB_Boolean, True
und einmal "dbBoolean" (da greift die Variable nicht, oder)
'//Codeansicht nach Fehler zulassen
AendernEigenschaft "AllowBreakIntoCode", dbBoolean, True


Vielleicht könntest du mir das trotzdem noch erklären auch wenn dein Code übersichtlicher ist und ich die Kommentare einfach dort einfügen werde :)
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 19. Sep 2019, 10:23

Prinzessin87 hat geschrieben:Jedoch hab ich noch das Problem das beim Bericht die Menüleiste gebraucht wird bezüglich drucken? Kann man hier nur das Drucken aktivieren oder muss die ganze Leiste her?


Hab es selbst gelöst mit der ersten Zeile ausschalten
Code: Alles auswählen
'DoCmd.ShowToolbar "Ribbon", acToolbarNo


Jetzt wird nur die Menüleiste auf das nötigste verkleinert und fürs Drucken angezeigt
Werde das vielleicht so einbauen das es bei jeden Bericht mit aktiviert wird und danach wieder geschlossen - mal schauen

Warum ist das mit den 2x öffnen immer gleich? ist das immer so?
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 19. Sep 2019, 10:29

Hey,

beim ersten mal Öffnen wird festgestellt, das es jetzt eine accde ist und die Eigenschaften werden gesetzt. Dabei sind auch Eigenschaften, die erst beim nächsten Öffnen aktiv werden. Also beim zweiten mal öffnen.

Wenn du das Frontend an die User verteilst, dann sind die Eigenschaften schon gesetzt.

VG
WM
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 19. Sep 2019, 10:58

Bevor ich jetzt anfange in alle meine OpenReport die Zeile
"DoCmd.ShowToolbar "Ribbon", acToolbarNo" einzubauen und beim schließen das geliche

noch eine Frage:

Würde das irgendwie funktionieren das zu verallgemeinern?

Also immer wenn Bericht geöffnet wird bitte Ribbon einblenden und immer wenn Bericht geschlossen wird Ribbon ausblenden?
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 19. Sep 2019, 12:24

Hey,

du könntest das auslagern und dabei den Berichtsnamen übergeben. Aber dann musst du jedes VBA-Bericht öffnen durch die Funktion ersetzen. Also musst du so oder so jedes Bericht öffnen anfassen. Ansonsten wüsste ich nichts dazu.

VG
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 553
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Beaker s.a. » 19. Sep 2019, 13:01

@Wurstmann
VBA-Bericht öffnen durch die Funktion ersetzen

Wenn man der Prozedur die gleichen Parameter wie .OpenReport spendiert
geht das ganz einfach mit Suchen/Ersetzen.
(Luftcode)
Code: Alles auswählen
Public Sub MyOpenReport( _
        sReportName As String, _
        vView As AcView, _
        Optional sFilterName as String, _
        Optional sWhereCondition As String, _
        OptionalvWindowMode As AcWindowMode = acDialog, _
        sOpenArgs As String)

    DoCmd.ShowToolbar "Ribbon", acToolbarYes
    DoCmd.OpenReport sReportName, weitere, benötigte, Parameter
'! acDialog ist wichtig damit der Code angehalten wird, solange der Bericht
'geöffnet ist.
'evtl. muss hier noch ein "DoEvents" eingefügt werden
    DoCmd.ShowToolbar "Ribbon", acToolbarNo
End Sub
gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1006
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 24. Sep 2019, 11:48

Vielen Dank für eure tollen Antworten, werde das ganze noch ausprobieren und verfeinern :)

GLG Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 212
Registriert: 01. Jul 2016, 17:31

Vorherige

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste