Como fazer uma conexão de dados somente leitura para um MS Access bloqueado de leitura / gravação usando o MS Excel?

0

Minha preocupação é que haja um bloqueio de leitura / gravação no arquivo ao qual desejo me conectar, pois ele está sendo usado por um aplicativo conforme mostrado: Arquivo do MS Access bloqueado

Quando tento atualizar a conexão de dados no MS Excel, esses erros / notificações ocorrem porque não é possível estabelecer uma conexão com o arquivo do MS Access que está sendo usado:

EuestouquerendosaberseháumaopçãonoMSAccessquedenywriteapenas,masallowreadoualgoquemepermitiráestabelecerumread-onlydataconnectionparaomeuarquivodoMSExcel,mesmoqueestejabloqueado.

Euencontreiasopçõesrecord-levellockingnoarquivodoMSAccess,masestoupreocupadoquepossacausarproblemasaosusuáriosdoaplicativoprincipalqueestágravandodadosnoarquivodoMSAccess.Eutenteidesativá-lo,masaindaestábloqueado.Asopçõessãomostradas: Opções de bloqueio no nível de registro

A seqüência de conexão da minha conexão de dados do Excel para um arquivo do Access é mostrada abaixo:

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
    
por Pherdindy 05.09.2018 / 09:37

1 resposta

0

Você pode usar este VBA para conectar o banco de dados do Access no modo somente leitura:

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

N.B.

  • Caminho do arquivo C: \ Usuários \ Nome do usuário \ Desktop \ Sample.mdb e Folhas ("Folha1"). O intervalo ("A1") é editável.
  • Em vez da variável DBFullName , você pode usar o caminho do arquivo C: \ Users \ Nome de usuário \ Desktop \ Sample.mdb , como mostrei nos comentários.

.

    
por 05.09.2018 / 14:10