PDA

Vollständige Version anzeigen : berechtigung - backend neu einbinden


rainyberlin
21.11.2003, 08:24
hallo,

ich habe in meiner db benutzerrechte vergeben, wobei der hauptadmin alle rechte hat, die restlichen benutzer nur eingeschränkte.
danach habe ich meine db in fe und be geteilt.

die verknüpfung des fe mit dem be wird beim starten der db geprüft. wenn sie nicht besteht, weil zb. das be verschoben wurde, öffnet sich ein file-dialog, wo man das be auswählen und neu einbinden kann. für den hauptadmin funktioniert das alles prima - nur leider für die anderen benutzer nicht.

ich erhalte dann die fehlermeldung, dass der benutzer nicht berechtigt ist, das objekt "switchboard items" (die tabelle, auf der das switchboard beruht) zu bearbeiten. ich habe den benutzern daraufhin alle rechte (außer entwurf bearbeiten) an der tabelle gegeben, aber immernoch dieselbe fehlermeldung. selbst der gruppenadministrator, der zur gruppe der admins gehört, aber ansonsten nur eingeschränkte rechte hat, kann das be nicht einbinden.

woran kann das liegen?

ich hoffe auf hilfe

rainyberlin

Manuela Kulpa
21.11.2003, 09:30
Hi rainyberlin,

schau hier die Antwort von Sascha: ACC 97: Benutzerveraltung - Pfad zu eingebundenen Tabellen ändern (http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=369DCBD2.BBE1F3D2%40post.rwth-aachen.de&rnum=1&prev=/groups%3Fhl%3Dde%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dberechtigung%2B-%2Bbackend%2Bneu%2Beinbinden%26sa%3DN%26tab%3Dwg%26meta%3D)

Schönes WE

rainyberlin
21.11.2003, 10:17
hm, das scheint genau das zu sein, was ich suche.

da ich aber von vba nicht wirklich ahnung habe, bin ich etwas damit überfordert, das auch umzusetzen.

vielleicht hat jemand ein code-bsp. für mich??

gruß

rainyberlin

Manuela Kulpa
21.11.2003, 11:04
Hi rainyberlin,

hier mal ein bissel Code, wie es ausschauen könnte, müsstest du natürlich auf deine Bedürfnisse anpassen. Alles Weitere findest du auch in der OL-Hilfe unter CreateWorkspace-Methode.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Function</span> RelinkTable()
&nbsp;
<span class="TOKEN">Dim</span> wks <span class="TOKEN">As</span> DAO.Workspace
<span class="TOKEN">Dim</span> dbs <span class="TOKEN">As</span> DAO.Database
&nbsp;
<span class="REM"> ' Angabe der MDW</span>
DBEngine.SystemDB = Application.SysCmd( _
acSysCmdGetWorkgroupFile)
&nbsp;
<span class="REM"> ' Workspace erstellen</span>
<span class="TOKEN">Set</span> wks = DAO.DBEngine.CreateWorkspace(&quot;&quot;, _
&quot;DeinAdmin&quot;, _
&quot;DeinPasswort&quot;, _
dbUseJet)
&nbsp;
<span class="REM"> ' Aktuelle DB &ouml;ffnen</span>
<span class="TOKEN">Set</span> dbs = wks.OpenDatabase(CurrentDb.Name)
&nbsp;
<span class="REM"> ' Hier nun das Einbinden der Tabellen</span>
&nbsp;
<span class="REM"> ' Speicher freigeben</span>
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> dbs <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">Then</span> dbs.Close: <span class="TOKEN">Set</span> dbs = <span class="TOKEN">Nothing</span>
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> wks <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">Then</span> wks.Close: <span class="TOKEN">Set</span> wks = <span class="TOKEN">Nothing</span>
&nbsp;
<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)

Gruß

Sascha Trowitzsch
21.11.2003, 11:16
@Manuela:

Wofür braucht man das

DBEngine.SystemDB = Application.SysCmd(acSysCmdGetWorkgroupFile)

?

Sollte SystemDB der Engine nicht sowieso auf dem Pfad stehen, der mit dem SysCmd zurückgegeben wird?
(Bzw. AFAIK kann man .SystemDB ohnehin nicht setzen, außer bei PrivDBEngine)

Gruß, Sascha

Manuela Kulpa
21.11.2003, 11:30
Hi Sascha,

wenn ich die System-DB auf die DB nicht mit angebe, erhalte ich grundsätzlich den Fehler: 3734 (Die Anwendung kann nicht gestartet werden. Die Informationsdatei für die Arbeitsgruppe fehlt oder ist exklusiv von einem anderen Benutzer geöffnet.), wenn ein Anmeldekennwort verwendet wird. Wenn kein's angegeben ist, funktioniert die Variante natürlich auch ohne Angabe der System-DB. Vielleicht ist dies ein Bug, wer weiß.

Wenn du hier eine andere Alternative hast, wäre ich dir sehr verbunden.

Gruß

Manuela Kulpa
21.11.2003, 11:34
Nachtrag: Ist wohl schon Dokumentiert: ACC2000: Error '3028' Using CreateWorkspace with Password Argument (http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q208/8/04.asp&NoWebContent=1)

Gruß

rainyberlin
21.11.2003, 11:48
hallo,

ehrlich gesagt weiß ich nicht wirklich, wo ich den code einbauen soll. zumindest funktioniert er da, wo er jetzt steht nicht.....

ich habe das tabellen-verknüpfen-modul aus der db aus diesem thread (http://www.ms-office-forum.net/forum/showthread.php?threadid=88697&perpage=15&pagenumber=1).

könnt ihr mir bitte helfen, alleine krieg ich das nicht hin.

gruß

rainyberlin

Sascha Trowitzsch
21.11.2003, 11:58
@Manuela: (sorry rainyberlin für den Zwischenruf!)

Dieser Bug ist mir bisher nicht untergekommen bzw. aufgefallen. Sehr eigenartiges Verhalten.
Statt der Zuweisung der SystemDB reicht es, irgendeine beliebige Methode von DBEngine aufzurufen. Man kann also z.B. schreiben

Debug.Print DBEngine.SystemDB
oder einfach
DBEngine.Idle

Danach geht das mit dem Workspace.

Anscheinend muss sich die Engine erst irgendwie initialisieren.

Ciao, Sascha

Manuela Kulpa
21.11.2003, 12:22
@Sascha, dankeschön, ist natürlich wesentlich einfacher *smile* (manchmal denke ich einfach zu kompliziert)

@rainyberlin

Vorausgesetzt du hast die Beispiele von Arne 1 zu 1 übernommen, könntest du mal folgendes versuchen:

Ersetze in der Funktion RelinkTables die Zeile:
Relinked = RelinkTable(TableName)
mit folgender:
Relinked = RelinkTable(TableName, "DeinAdmin", "DeinPasswort")
falls dein Admin kein Passwort hat, übergebe einfach einen Leerstring.

Anschließend ersetze die komplette Funktion RelinkTable mit dieser:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Function</span> RelinkTable(TableName <span class="TOKEN">As</span> String, sAdminUser <span class="TOKEN">As</span> String, sAdminPasswort <span class="TOKEN">As</span> <span class="TOKEN">String</span>) <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="REM"> 'Wiedereinbindung einer einzelnen Tabelle</span>
<span class="REM"> 'wird von RelinkTables() mit entsprechendem Tabellennamen aufgerufen</span>
&nbsp;
<span class="TOKEN">On Error GoTo</span> RelinkTable_Err
&nbsp;
<span class="TOKEN">Dim</span> wk <span class="TOKEN">As</span> DAO.Workspace
<span class="TOKEN">Dim</span> db <span class="TOKEN">As</span> DAO.Database
&nbsp;
<span class="TOKEN">Dim</span> MyTable <span class="TOKEN">As</span> TableDef
<span class="TOKEN">Dim</span> Filename <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> PathName <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> SearchPath <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> OpenDlg <span class="TOKEN">As</span> MSA_OPENFILENAME
<span class="TOKEN">Dim</span> DBName <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> UserChoice <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
&nbsp;
RelinkTable = <span class="TOKEN">True</span>
DBName = &quot;&quot;
Filename = GetConnectFile(TableName) <span class="REM">'Wie heisst die QuellMDB?</span>
&nbsp;
<span class="REM"> 'Durchsuchen der Liste der bisher ausgew&auml;hlten MDBs</span>
<span class="REM"> 'Ist die gesuchte Tabelle dort enthalten?</span>
<span class="REM"> 'Wird beim ersten Durchlauf immer &uuml;bersprungen, da Liste leer</span>
I = 1
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> (I &lt;= LinkedTables) <span class="TOKEN">And</span> (DBNames(I) &lt;&gt; &quot;&quot;)
<span class="TOKEN">If</span> TableExist(DBNames(I), TableName) <span class="TOKEN">Then</span>
DBName = DBNames(I)
<span class="TOKEN">Exit Do</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
I = I + 1
<span class="TOKEN">Loop</span>
&nbsp;
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> DBName = &quot;&quot; <span class="REM">'keine passende MDB gefunden</span>
DBName = GetMDBName(TableName) <span class="REM">'Fenster &ouml;ffnen und Benutzer fragen</span>
DBName = Trim(DBName)
<span class="TOKEN">If</span> DBName = &quot;&quot; <span class="TOKEN">Then</span>
MsgBox &quot;Die Neueinbindung wurde abgebrochen!&quot;, vbExclamation, _
&quot;Einbindung fehlgeschlagen&quot;
RelinkTable = <span class="TOKEN">False</span>
<span class="TOKEN">Exit Function</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> TableExist(DBName, TableName) <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> MsgBox(&quot;Die Tabelle '&quot; &amp; TableName &amp; &quot;' wurde nicht in '&quot; &amp; _
DBName &amp; &quot;' gefunden!&quot; &amp; vbCrLf &amp; _
&quot;Andere MDB ausw&auml;hlen?&quot;, _
vbYesNo + vbQuestion, &quot;Einbindung fehlgeschlagen&quot;) = vbYes <span class="TOKEN">Then</span>
DBName = &quot;&quot;
<span class="TOKEN">Else</span>
MsgBox &quot;Die Neueinbindung wurde abgebrochen!&quot;, _
vbExclamation, &quot;Einbindung fehlgeschlagen&quot;
RelinkTable = <span class="TOKEN">False</span>
<span class="TOKEN">Exit Function</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Loop</span>
&nbsp;
DBEngine.Idle
<span class="TOKEN">Set</span> wk = DBEngine.CreateWorkspace(&quot;&quot;, sAdminUser, sAdminPasswort, dbUseJet)
<span class="REM"> ' Set db = DBEngine(0)(0)</span>
<span class="TOKEN">Set</span> db = wk.OpenDatabase(CurrentDb.Name)
<span class="TOKEN">Set</span> MyTable = db.TableDefs(TableName)
MyTable.Connect = &quot;;DATABASE=&quot; &amp; DBName
&nbsp;
Err = 0
<span class="TOKEN">On</span> <span class="TOKEN">Error</span> <span class="TOKEN">Resume</span> <span class="TOKEN">Next</span>
MyTable.RefreshLink
<span class="TOKEN">If</span> Err &lt;&gt; 0 <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> Err = NONEXISTENT_TABLE <span class="TOKEN">Then</span>
MsgBox &quot;Die Datei '&quot; &amp; _
Filename &amp; &quot;' enth&auml;lt nicht die ben&ouml;tigte Tabelle '&quot; &amp; _
MyTable.SourceTableName &amp; &quot;'.&quot;, _
vbCritical, &quot;Automatische Einbindung fehlgeschlagen&quot;
<span class="TOKEN">ElseIf</span> Err = FILE_NOT_FOUND <span class="TOKEN">Then</span>
MsgBox &quot;Die Datei '&quot; &amp; DBName &amp; &quot;' konnte nicht gefunden werden&quot;, _
vbCritical, &quot;Automatische Einbindung fehlgeschlagen&quot;
<span class="TOKEN">ElseIf</span> Err = ACCESS_DENIED <span class="TOKEN">Then</span>
MsgBox &quot;Die Datei '&quot; &amp; DBName &amp; _
&quot;' konnte nicht ge&ouml;ffnet werden, da sie entweder schreibgesch&uuml;tzt ist oder &quot; &amp; _
&quot;sich auf einem schreibgesch&uuml;tzten Datentr&auml;ger befindet.&quot;, _
vbCritical, &quot;Automatische Einbindung fehlgeschlagen&quot;
<span class="TOKEN">ElseIf</span> Err = READ_ONLY_DATABASE <span class="TOKEN">Then</span>
MsgBox &quot;Die Tabellen k&ouml;nnen nicht erneut eingebunden werden, da '&quot; &amp; _
DBName &amp; &quot;' entweder schreibgesch&uuml;tzt ist oder sich auf einem &quot; &amp; _
&quot;schreibgesch&uuml;tzten Datentr&auml;ger befindet.&quot;, _
vbCritical, _
&quot;Automatische Einbindung fehlgeschlagen&quot;
<span class="TOKEN">Else</span>
MsgBox Error, vbCritical, &quot;Automatische Einbindung fehlgeschlagen&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
RelinkTable = <span class="TOKEN">False</span>
<span class="TOKEN">Else</span>
UpdateFilelist (DBName)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">Exit Function</span>
&nbsp;
RelinkTable_Err:
MsgBox &quot;Die Neueinbindung ist fehlgeschlagen&quot;, vbCritical, &quot;Aktualisieren der Einbindung&quot;
RelinkTable = <span class="TOKEN">False</span>
<span class="TOKEN">Exit Function</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)
Ich hoffe nun funktioniert es. Ansonsten müsstest du mal deinen kompletten Code posten.

Gruß

rainyberlin
21.11.2003, 12:33
wow, ich glaubs nicht. *froi*

es hat funktioniert.

ihr seit hier echt die besten.

tausend dank.

rainyberlin