Benutzung AccessDB beenden/freigeben nach Daten aktualisieren in Excel

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Benutzung AccessDB beenden/freigeben nach Daten aktualisieren in Excel

    Hallo zusammen,

    ich brauche Hilfe, werde einfach nicht fündig. Ich habe eine Access-Datenbank und ein Excel übernommen, welches Daten aus der Datenbank holt und dann bis zu seinem Schließen, die Access-Datenbank blockiert. So dass diese nicht ohne Schreibschutz geöffenet werden kann. Die Pflege der Access-DB übernimmt eine andere Kollegin, als die, welche das Excel benötigt und ganztägig darin arbeitet.

    Kann ich in dem Aufruf zur Datenaktualisierung irgendwie unterbringen, dass die Access-DB wieder freigegeben wird?



    Private Sub DatenAktualisieren()

    Call QuelleMerken

    Sheets("Adressen").Activate 'wechsele zu AB zur Datenaktualisierung
    ActiveSheet.Unprotect "LoTafel"
    Range("A4").QueryTable.Refresh BackgroundQuery:=False 'Daten aus ACCESS aktualisieren
    Rows("5:999").Select
    Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("A4").Select
    ActiveSheet.Protect "LoTafel"

    Call AktiveTour
    Call Zurück
    Sheets("Adressen").Visible = False



    End Sub




    Liebe Grüße, Vielen Dank im Voraus,
    Andreas
    Willkommen im Forum. :thumbup:

    AndreasDD schrieb:

    freigegeben
    Mit welchem Code claimest Du denn die DB?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es gibt das Tabellenblatt "Adressen" und es gibt eine Dataconnection zur Access-DB, die genau so heißt, wie die Access-DB mit .odc (in C:\Users\...\Documents\Meine Datenquellen) aber wie die angelegt wird/wurde, kann ich nicht herausfinden/sagen.

    Kann man die .odc manipulieren?


    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns="http://www.w3.org/TR/REC-html40">

    <head>
    <meta http-equiv=Content-Type content="text/x-ms-odc; charset=utf-8">
    <meta name=ProgId content=ODC.Database>
    <meta name=SourceType content=OLEDB>
    <xml id=docprops></xml><xml id=msodc><odc:OfficeDataConnection
    xmlns:odc="urn:schemas-microsoft-com:office:odc"
    xmlns="http://www.w3.org/TR/REC-html40">
    <odc:SourceFile>C:\Users\...\Seafile\LMP Dresdner Tafel\DT-Kunden\DT-Kunden.mdb</odc:SourceFile>
    <odc:Connection odc:Type="OLEDB">
    <odc:ConnectionString>Provider=Microsoft.ACE.OLEDB.12.0;Password=&quot;&quot;;User ID=Admin;Data Source=C:\Users\AndreasDD\Seafile\LMP Dresdner Tafel\DT-Kunden\DT-Kunden.mdb;Mode=Share Deny Write;Extended Properties=&quot;&quot;;Jet OLEDB:System database=&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;;Jet OLEDB:Database Password=tafelwerk;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=&quot;&quot;;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;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False</odc:ConnectionString>
    </odc:Connection>
    </odc:OfficeDataConnection>
    </xml>
    <style>
    <!--
    .ODCDataSource
    {
    behavior: url(dataconn.htc);
    }
    -->
    </style>

    </head>

    <body onload='init()' scroll=no leftmargin=0 topmargin=0 rightmargin=0 style='border: 0px'>
    <table style='border: solid 1px threedface; height: 100%; width: 100%' cellpadding=0 cellspacing=0 width='100%'>
    <tr>
    <td id=tdName style='font-family:arial; font-size:medium; padding: 3px; background-color: threedface'>
    &nbsp;
    </td>
    <td id=tdTableDropdown style='padding: 3px; background-color: threedface; vertical-align: top; padding-bottom: 3px'>

    &nbsp;
    </td>
    </tr>
    <tr>
    <td id=tdDesc colspan='2' style='border-bottom: 1px threedshadow solid; font-family: Arial; font-size: 1pt; padding: 2px; background-color: threedface'>

    &nbsp;
    </td>
    </tr>
    <tr>
    <td colspan='2' style='height: 100%; padding-bottom: 4px; border-top: 1px threedhighlight solid;'>
    <div id='pt' style='height: 100%' class='ODCDataSource'></div>
    </td>
    </tr>
    </table>


    <script language='javascript'>

    function init() {
    var sName, sDescription;
    var i, j;

    try {
    sName = unescape(location.href)

    i = sName.lastIndexOf(".")
    if (i>=0) { sName = sName.substring(1, i); }

    i = sName.lastIndexOf("/")
    if (i>=0) { sName = sName.substring(i+1, sName.length); }

    document.title = sName;
    document.getElementById("tdName").innerText = sName;

    sDescription = document.getElementById("docprops").innerHTML;

    i = sDescription.indexOf("escription>")
    if (i>=0) { j = sDescription.indexOf("escription>", i + 11); }

    if (i>=0 && j >= 0) {
    j = sDescription.lastIndexOf("</", j);

    if (j>=0) {
    sDescription = sDescription.substring(i+11, j);
    if (sDescription != "") {
    document.getElementById("tdDesc").style.fontSize="x-small";
    document.getElementById("tdDesc").innerHTML = sDescription;
    }
    }
    }
    }
    catch(e) {

    }
    }
    </script>

    </body>

    </html>

    AndreasDD schrieb:

    kann ich nicht herausfinden/sagen
    Startest Du den eigentlichen Prozess per Buttondruck oder geht das bei Programmstart allein los?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    AndreasDD schrieb:

    Knopf
    Welcher Code steht in der Click-Prozedur?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ich "Makro zuweisen" drücke, ist dieses vorausgewählt: 'DT-Tagesplanung.xls'!DatenAktualisieren
    Wenn ich dieses "bearbeiten" drücke, kommt der Code von ganz oben:

    Private Sub DatenAktualisieren()

    Call QuelleMerken

    Sheets("Adressen").Activate 'wechsele zu AB zur Datenaktualisierung
    ActiveSheet.Unprotect "LoTafel"
    Range("A4").QueryTable.Refresh BackgroundQuery:=False 'Daten aus ACCESS aktualisieren
    Rows("5:999").Select
    Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("A4").Select
    ActiveSheet.Protect "LoTafel"

    Call AktiveTour
    Call Zurück
    Sheets("Adressen").Visible = False

    End Sub

    AndreasDD schrieb:

    Kann man die .odc manipulieren?
    Du kannst die Eigenschaften der QueryTable modifizieren.
    Die hat eine Property "Connection".
    Die würde ich auf jeden Fall von Hand setzen und nicht über irgendeine ODBC-Quelle gehen.
    Range("A4").QueryTable.Connection="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Mode=Read;"

    Wenn du unbedingt auf die .odc bestehst, kannst du auch das Mode=Share Deny Write; durch ​Mode=Read; ersetzen.
    Das gilt dann aber für alle Verbindungen, die du über diese ODBC-Quelle aufbaust.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()