ich komme auch nach langem Suchen nicht weiter.
Szenario:
In einem Makro werden 2 Datenbanken aufgerufen. Mit der 1. Datenbank "file:///Z:/wmt/verwaltung.odb" wird LO gestartet und mit
Code: Alles auswählen
    oVerbindungZiel = oDatenbank.ActiveConnection() Die 2. Datenbank wird mit
Code: Alles auswählen
 oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    oDatenquelle = oDatabaseContext.getByName("file:///Y:/wmt/empfang.odb")
    oVerbindungQuelle = oDatenquelle.GetConnection("","")
Nachdem eine Tabelle von der 1. - zur 2. Datenbank kopiert wurde, soll die 1.Datenbank die 2.Datenbank überschreiben.
Code: Alles auswählen
FileCopy("file:///Z:/wmt/verwaltung.odb","file:///Y:/wmt/empfang.odb")Das liegt nach meinem Verständnis daran, dass die2. Datenbank nicht überschrieben werden kann, weil sie noch geöffnet ist, erkennbar auch an der Existenz des Lockfiles empfang.odb.lck
Nun versuche ich die 2. Datenbank vor dem Kopiervorgang zu schließen und komme nicht weiter.
Mit welcher Funktion wird die 2. Datenbank geschlossen, sodass das Lockfile verschwindet ? Mit oVerbindungQuelle.close() wird zwar kein Fehler angezeigt, aber die Verbindung nicht geschlossen.
Hier nochmal der gesamte Makro-Code, zum besserem Verständnis.
Code: Alles auswählen
   '/** openDatenabgleichBesuche
    '*************************************************************************.
    '* Wird von der Schaltfläche 'Datenabgleich' gestartet
    '* In empfang.odb wurde nur die Tabelle 'Besuche' geändert
    '* In verwaltung.odb wurden alle übrigen Tabellen geändert
    '* Prüft, ob beide Sticks im Rechner stecken
    '* Leert die Tabelle 'Besucher' des Z:Aufnahme-Sticks
    '* Kopiert die Tabelle 'Besucher' des Y:Empfang-Sticks in die leere Tabelle
    '* 'Besucher' des Z:Aufnahme-Sticks
    '* Kopiert die Datenbank 'verwaltung.odb' des Z:Aufnahme-Sticks nach
    '* 'empfang.odb' des Y:Empfang-Sticks
    '* Als Ergebnis sind die Datenbanken auf beiden Sticks gleich.
    '*************************************************************************
    '*/
    Sub openDatenabgleichBesuche 
       DIM oDatabaseContext AS OBJECT
       DIM oDatenbank AS OBJECT
       DIM oDatenquelle AS OBJECT
       DIM oDatenziel AS OBJECT
       DIM oVerbindungQuelle AS OBJECT
       DIM oVerbindungZiel AS OBJECT
       DIM sTitel As STRING
       if NOT checkPfadKomplett("file:///Y:/wmt/empfang.odb") then
             MsgBox("Kann empfang.odb nicht finden ! Bitte Empfangs-Stick 'Y' einstecken !",48,"Hinweis")
             exit sub
          end if   
          if NOT checkPfadKomplett("file:///Z:/wmt/verwaltung.odb") then
             MsgBox("Kann verwaltung.odb nicht finden ! Bitte Verwaltungs-Stick 'Z' einstecken !",48,"Hinweis")
             exit sub 
         end if    
       CacheToDB               
       oDatenbank = ThisComponent.Parent.CurrentController  'Ziel-Datenbank verwaltung.odb   
       If NOT (oDatenbank.isConnected()) THEN
          oDatenbank.connect()
       END IF
       oDoc = ThisComponent.Parent
       sTitel = oDoc.Title
       IF sTitel <> "verwaltung.odb" THEN
          MsgBox("Das Programm muss mit der Datei 'verwaltung.odb' gestartet werden !",16,"Falsche Datenbank gestartet")
          exit sub
       END IF
       oVerbindungZiel = oDatenbank.ActiveConnection()           'Verbindung zur Zieldatenbank verwaltung.odb aktivieren
       oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")  'Sun Service aufrufen
       oDatenquelle = oDatabaseContext.getByName("file:///Y:/wmt/empfang.odb") 'Quelldatenbank empfang.odb aufrufen
       oVerbindungQuelle = oDatenquelle.GetConnection("","")   'Quelldatenbank  verbinden
       oSQL_Anweisung = oVerbindungQuelle.createStatement()     'SQL-Anweisung für Quell-Datenbank empfang.odb
       stSql = "SELECT * FROM ""Besuche"""                     'Alles aus Tabelle Besuche der Quelldatenbank auswählen
       oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)   'Ergebnis auswerten
       oSQL_AnweisungZiel = oVerbindungZiel.createStatement()   'SQL-Anweisung für Ziel-Datenbank
       stSqlDelete = "DELETE FROM ""Besuche"""                'Tabelle Besuche der Zieldatenbank leeren
       oSql_AnweisungZiel.executeUpdate(stSqlDelete)          'SQL-Anweisung Durchführen
       WHILE oAbfrageergebnis.next                       'Alle Datensätze(Zeilen) der Quell-Tabelle empfang.odb nacheinander aufrufen
          inID = oAbfrageergebnis.getInt(1)               'Jedes Datenfeld einer Zwischenvariablen zuweisen
          dBesuche = oAbfrageergebnis.getString(2)
          inKunden_ID = oAbfrageergebnis.getInt(3)
          bEuro = oAbfrageergebnis.getBoolean(4)
          oSQL_AnweisungZiel = oVerbindungZiel.createStatement() 'SQL-Anweisung für Ziel-Datenbank vorbereiten
          stSqlZiel = "INSERT INTO ""Besuche"" (""ID"",""Besuche"",""Kunden_ID"",""Euro"") VALUES ('"+inID+"','"+dBesuche+"','"+inKunden_ID+"','"+bEuro+"')"
          oSql_AnweisungZiel.executeUpdate(stSqlZiel)           'Alle Datenfelder der Quelltabelle in die leere Zieltabelle Kopieren
       WEND    'nächster Datensatz
       oVerbindungQuelle.close()
       FileCopy("file:///Z:/wmt/verwaltung.odb","file:///Y:/wmt/empfang.odb")
       msgbox("Die Datenbank verwaltung.odb und empfang.odb haben sich gegenseitig aktualisiert."+chr$(13)+"Beide Datenbanken sind nun gleich.",64,"Datenabgleich erfolgreich")
    End Sub  Jens
 - wozu kopierst Du etwas von A nach B, wenn B Sekunden später zerstört wird?
 - wozu kopierst Du etwas von A nach B, wenn B Sekunden später zerstört wird?