Wie kann eine schreibgeschützte Datenverbindung zu einem schreibgeschützten MS Access mit MS Excel hergestellt werden?

561
Pherdindy

Meine Sorge ist, dass in der Datei, mit der ich eine Verbindung herstellen möchte, eine Lese- / Schreibsperre vorhanden ist, da sie von einer Anwendung wie gezeigt verwendet wird: Gesperrte MS Access-Datei

Wenn ich versuche, die Datenverbindung in MS Excel zu aktualisieren, treten diese Fehler / Benachrichtigungen auf, weil keine Verbindung mit der verwendeten MS Access-Datei hergestellt werden kann:

1

2.

3.

4.

Ich frage mich, ob es in MS Access eine Option gibt, die deny writenur eine allow readoder mehrere Optionen zulässt, mit denen ich eine read-only data connectionMS Excel-Datei erstellen kann, obwohl sie gesperrt ist.

Ich habe record-level lockingOptionen in der MS Access-Datei gefunden, aber ich bin besorgt, dass dies den Benutzern der Hauptanwendung, die Daten in die MS Access-Datei schreibt, Probleme verursachen kann. Ich habe versucht, es zu deaktivieren, aber es ist immer noch gesperrt. Die Optionen werden angezeigt: Sperroptionen auf Datensatzebene

Die Verbindungszeichenfolge meiner Excel-Datenverbindung zu einer Access-Datei wird unten angezeigt:

Provider=Microsoft.ACE.OLEDB.12.0; User ID=Admin; Data Source=C:\Users\ACER\Desktop\Test.MDB; Mode=Share Deny Write; Extended Properties=""; Jet OLEDB:System database=""; Jet OLEDB:Registry Path=""; Jet OLEDB:Engine Type=5; Jet OLEDB:Database Locking Mode=0; Jet OLEDB:Global Partial Bulk Ops=2; Jet OLEDB:Global Bulk Transactions=1; Jet OLEDB:New Database Password=""; Jet OLEDB:Create System Database=False; Jet OLEDB:Encrypt Database=False; Jet OLEDB:Don't Copy Locale on Compact=False; Jet OLEDB:Compact Without Replica Repair=False; Jet OLEDB:SFP=False; Jet OLEDB:Support Complex Data=False 
0
Sind Sie mit VBA vertraut, um die Nur-Lese-Verbindung von Access zu Excel herzustellen? Rajesh S vor 6 Jahren 0
Ja, ich bin mit VBA ziemlich zufrieden. Wenn Sie eine Lösung haben, wird es Ihnen gefallen Pherdindy vor 6 Jahren 0
Okay, warte, lass mich erst den Code machen! Rajesh S vor 6 Jahren 0
Um den Modus festzulegen, legen Sie entweder die Eigenschaft Verbindungsmodus oder die Verbindungszeichenfolge fest. `db.Open" Provider = Microsoft.Jet.OLEDB.4.0; Datenquelle = c: \ test.mdb; Persist Security Info = False; Mode = Read; "` Aktivieren Sie diese Option, wenn Sie für Sie angeklickt haben Antworten. Rajesh S vor 6 Jahren 0
** Weiter .. ** Andernfalls können Sie die Datenbank in einem freigegebenen Ordner speichern, in dem die anderen Benutzer nur Leserechte haben. Dann sollten sie die Daten in der verknüpften Tabelle weiterhin anzeigen, jedoch nicht ändern können. Rajesh S vor 6 Jahren 0
@RajeshS Ich habe meine Verbindungszeichenfolge in den Hauptbeitrag gestellt. Ich bin nicht sicher, wo ich das platzieren soll. Sollte ich den `Provider = Microsoft.ACE.OLEDB.12.0;` in der ersten Zeile meiner Verbindungszeichenfolge in den `db.Open'-Provider ersetzen? = Microsoft.Jet.OLEDB.4.0; `? Pherdindy vor 6 Jahren 0

1 Antwort auf die Frage

0
Rajesh S

Sie können diesen VBA verwenden, um die Access-Datenbank im schreibgeschützten Modus zu verbinden:

Sub ReadFromAccess() Dim cn As Object, rs As Object Dim intColIndex As Integer Dim DBFullName As String Dim TargetRange As Range  DBFullName = "C:\Users\Username\Desktop\Sample.mdb"  Application.ScreenUpdating = False  Set TargetRange = Sheets("Sheet1").Range("A1") Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFullName & ";" & "Persist Security Info=False;Mode=Read;"  Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM Table Name", cn,, , adCmdText  For intColIndex = 0 To rs.Fields.Count - 1 TargetRange.Offset(1, intColIndex).Value = rs.Fields(intColIndex).Name Next  TargetRange.Offset(1, 0).CopyFromRecordset rs  Application.ScreenUpdating = True On Error Resume Next rs.Close Set rs = Nothing cn.Close Set cn = Nothing On Error GoTo 0 Exit Sub  End Sub 

NB

  • Dateipfad C: \ Benutzer \ Benutzername \ Desktop \ Sample.mdb und Arbeitsblätter ("Arbeitsblatt1"). Bereich ("A1") können bearbeitet werden.
  • Anstelle der DBFullName- Variablen können Sie den Dateipfad C: \ Benutzer \ Benutzername \ Desktop \ Sample.mdb verwenden, wie ich es in den Kommentaren gezeigt habe.

.

Genial. Ich werde es morgen ausprobieren :). Pherdindy vor 6 Jahren 0
Ich habe einen Syntaxfehler in dieser einen Zeile: `cn.Open" Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "& DBFullName &"; " Persist Security Info = False; Modus = Lesen; "` Pherdindy vor 6 Jahren 0
Okay, ich glaube, ich habe den Fehler gefunden. Die Zeile sollte lauten: `cn.Open" Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "& DBFullName &"; " & "Persist Security Info = False; Mode = Read;" `fehlte in String-Verkettung nur ein Et-Zeichen und ein Semikolon Pherdindy vor 6 Jahren 0
Guter Code, das ist ein Lebensretter Pherdindy vor 6 Jahren 0
@Pherdindy, froh, Ihnen zu helfen, fragen Sie weiter asking Rajesh S vor 6 Jahren 0
@Pherdindy, Ja, das Zeichen & fehlt jetzt, da ich den Beitrag bearbeitet habe, danke. ☺ Rajesh S vor 6 Jahren 0
Hallo, ich mag deinen Code, da er momentan die einzige Lösung ist, die ich habe. Meine Sorge ist, dass ich diese Fehlermeldung bekomme: `" Methode 'CopyFromRecordset' des Objekts 'Range' ist fehlgeschlagen "` auf anderen Computern, während es auf einigen Computern einwandfrei funktioniert. Wissen Sie, was diesen Fehler verursacht? Pherdindy vor 6 Jahren 0
@Pherdindy, möglicherweise das Recordset (Daten), das Sie abrufen, enthält Nullwerte. Einfach prüfen und bestätigen? Rajesh S vor 6 Jahren 0
@Pherdindy, vielleicht hat Database eine sehr lange Zeichenfolge in der Spalte. RecordSet ruft von jedem MEMO-Datentyp ab und generiert möglicherweise auch diesen Fehler. Rajesh S vor 6 Jahren 0
Vielen Dank, dass Sie sich die Daten aus der Datenbank ansehen. Es ist seltsam, dass es auf anderen Computern funktioniert, aber auf einigen von ihnen nicht Pherdindy vor 6 Jahren 0