PDA

Vollständige Version anzeigen : StartOptionenAus von außen setzen?


ploeve
08.05.2004, 17:34
Möchte gerne eine Zusätzliche Admin Datenbank, mit der ich die Shift-Taste wieder einschalten kann.

Wie bei DonKarl zu lesen, kann man das von außen machne... Nur wie?

Mein Versuch:

Button mit folgendem Code:

Dim db As Database

Set db = OpenDatabase("C:\Aktuell\Datenbank.mdb")
db.Properties.Append db.CreateProperty("AllowBypassKey", dbBoolean, flag, True)

was passt daran nicht?
Im der Datenbank selbst, kann ichs umschalten, hierbei kommt folgende Fehlermeldung:

Laufzeitfehler: 3385
Benutzerdefinierte Eigenschaften unterstützen keine Nullwerte

Bitte um Hilfe!

Danke

Steffen0815
08.05.2004, 19:29
Hi ploeve,
eigentlich müsste man diese Funktionalität verbieten ;)

Das "flag," muss aus deiner Zeile raus.
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>db.Properties.Append db.CreateProperty(&quot;AllowBypassKey&quot;, dbBoolean, <span class="TOKEN">True</span>)</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Steffen

ploeve
08.05.2004, 19:58
hmm klappt leider auch nicht!

Steffen0815
08.05.2004, 20:09
Hi ploeve,
bekommst du die gleiche Fehlermeldung ?

Gruß Steffen

ploeve
09.05.2004, 08:17
Hi Steffen!

Nein, diesmal kommt folgende Meldung:

Laufzeitfehler: 3367

Anfügen nicht möglich. Ein Objekt mit dem Namen befindet sich bereits in der Auflistung.



Hmm, was mach ich bloß falsch...
komisch

Lg Matthias

ploeve
09.05.2004, 08:27
Endlich

Sowas dummes!

Hab jetzt endlich!

Danke Steffen für deine Hilfe.
So klappts, dann steht überall die falsche Anweisung!!:

Set db = OpenDatabase("C:\Aktuell\D.mdb")
db.Properties!AllowBypassKey = True

Steffen0815
09.05.2004, 08:28
Hi Matthias,
keine Sorgen der Fehler war zu erwarten, deshalb fragte ich.
Der Code muss komplett so lauten :
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Function</span> StartOptionenEin(flag <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>) <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> db <span class="TOKEN">As</span> DAO.Database
<span class="TOKEN">On Error GoTo</span> Err_StartOptionenEin
&nbsp;
<span class="TOKEN">Set</span> db = CurrentDb
db.Properties!AllowBypassKey = flag
&nbsp;
Exit_StartOptionenEin:
<span class="TOKEN">Exit Function</span>
&nbsp;
Err_StartOptionenEin:
<span class="TOKEN">If</span> Err = 3270 <span class="TOKEN">Then</span>
db.Properties.Append db.CreateProperty(&quot;AllowBypassKey&quot;, dbBoolean, flag)
<span class="TOKEN">Resume</span> <span class="TOKEN">Next</span>
<span class="TOKEN">Else</span>
MsgBox &quot;Fehler: &quot; &amp; Error$ &amp; &quot;(&quot; &amp; Err &amp; &quot;)&quot;
<span class="TOKEN">Resume</span> Exit_StartOptionenEin
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Und der Aufruf entsprechend :
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Call</span> StartOptionenEin(<span class="TOKEN">True</span>)
<span class="TOKEN">Call</span> StartOptionenEin(<span class="TOKEN">False</span>)
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Steffen

ploeve
09.05.2004, 08:52
Ja, von innen leutet der Code so!

Nur von außen cann ich ja mit dem nichts anfangen?

Übrigens brauchst du das Call gar nicht in der DB!

Es reicht völlig

StartOptionenEin(True)


Danke trotzdem, siehe Beitrag oberhalb, habs mit viel probieren geschafft

Nouba
09.05.2004, 09:44
Die Datenbankvariable sollte sich auch auf die Datenbank beziehen, in der die Startoption gesetzt werden soll. Ohne DBPfad-Angabe wird sich die modifizierte Funktion auf die aktuelle Datenbank beziehen, ansonsten sollte der korrekte Pfad einer externen Access-Datenbank übergeben werden.
Function StartOptionenEin(flag As Boolean, Optional DBPfad) As Integer
Dim db As DAO.Database
On Error GoTo Err_StartOptionenEin

If IsMissing(DBPfad) Then
Set db = CurrentDb()
Else
Set db = DBEngine(0).OpenDatabase(DBPfad)
End If

db.Properties!AllowBypassKey = flag

Exit_StartOptionenEin:
If Not IsMissing(DBPfad) Then
db.Close
End If
Set db = Nothing

Exit Function

Err_StartOptionenEin:
If Err = 3270 Then
db.Properties.Append db.CreateProperty("AllowBypassKey", dbBoolean, flag)
Resume Next
Else
MsgBox "Fehler: " & Error$ & "(" & Err & ")"
Resume Exit_StartOptionenEin
End If
End Function
BTW: Da Du eben Steffens <i>Call</i>-Aufruf kritisiert hast (der IMHO auch der Übersichtlichkeit dient), kritisiere ich jetzt Dein überflüssiges Klammerpaar, das allerhöchstens einen Type-Cast bewirkt, was aber in diesem Fall nicht notwerndig ist, da True sowieso ein Bool'scher Wert ist. So schön, wie Du es geschrieben hast (ohne Leerzeichen vor der Klammer), stellt das der VBA-Editor auch garnicht dar.

PS: Es erfolgte eine Änderung in der Zeile: If <b>Not</b> IsMissing(DBPfad) Then

ploeve
09.05.2004, 09:54
Danke für den Hinweis!

Hab gar nichts kritisiert!
War keine Absicht, wenns so rüber gekommen ist.

Wollte nur einen Tipp geben :(

Naja, trotzdem danke

Sascha Trowitzsch
09.05.2004, 11:13
Ich kann's nicht lassen, ;) und komme wieder mal mit meinem beliebten On Error Resume Next :

Function StartOptionenEin(flag As Boolean, DBPfad As String) As Integer
Dim db As DAO.Database

Set db = DBEngine(0).OpenDatabase(DBPfad)
On Error Resume Next

db.Properties.Append db.CreateProperty("AllowBypassKey", dbBoolean, flag)
db.Properties!AllowBypassKey = flag
db.Close
Set db = Nothing

End Function

Mir ist das übersichtlicher, als die Fortsetzung von obligatem Code in einer Fehlerbehandlung.

Ciao, Sascha

PS: Bliebe vielleicht noch zu erwähnen, dass der Code so bei einer per MDW etc. abgesicherten DB nicht funktioniert. Da wäre noch der Zwischenschritt über eine neue PrivDBEngine notwendig oder alternativ über ein neues automatisiertes Access-Objekt. Bei letzterer Methode lässt sich allerdings das Setzen von Startoptionen verhindern, wenn man in der DB im Autoexec-Makro einen Code ablaufen lässt, der die Eigenschaft UserControl abfragt und bei positivem Ergebnis die DB einfach wieder schließt. (Soviel für die "Hacker"...)

TommyK
09.05.2004, 13:40
Hallo,

sieh hier auf meiner HP http://access-beispiele.tommyk-webbox.de/index.htm
dort ist unter "Auslesen und Setzen von DB-Properties in externen DB's " eine Bsp-DB zu diesem Thema.

ploeve
09.05.2004, 13:48
Danke euch beiden!

Jetzt hab ichs verstanden, denk ich mal :p

Lg Matthias