Frage

Ich habe den folgenden Code:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing

Das Problem, das ich bin das Experimentieren ist ein Pop-up, das mir Zugang erzählt kann den Fokus auf der anderen Datenbank nicht festgelegt. Wie Sie aus dem Code sehen können, möchte ich ein Unterprogramm in einem anderen mdb laufen. Jede andere Art und Weise, dies zu erreichen wird geschätzt.

Ich arbeite mit MS Access 2003.

Dies ist ein intermittierender Fehler. Da dieser Produktionscode ist, die nur einmal im Monat ausgeführt werden werden, ist es extrem schwierig zu reproduzieren, und ich kann Sie zu diesem Zeitpunkt nicht den genauen Text und Nummer. Es ist der zweite Monat das passiert ist.

Ich vermute, das auftreten kann, wenn jemand mit diesem oder der anderen Datenbank arbeitet.

Der Datenfluß ist es, alle ‚Projekte‘ einmal im Monat in einer Datenbank zu aktualisieren und dann diese Informationen in der anderen Datenbank zur Verfügung stellen.

Vielleicht ist es wegen der ersten Zeile in dem Code ‚Routines‘:    Wenn vbNo = MsgBox ( "Möchten Sie aktualisieren?", VbYesNo, "Update") Then        Exit-Funktion    End If

Ich werde ein anderes Unterprogramm machen, ohne die MsgBox.

Ich habe in der Lage, dieses Verhalten zu reproduzieren. Es passiert, wenn der Fokus auf die genannte Datenbank zu verschieben, aber der Benutzer setzt den Fokus ([ALT] + [TAB]) auf der ersten Datenbank. Die ‚Lösung‘ war es, den Benutzer zu informieren.


Dies ist ein intermittierender Fehler. Da dieser Produktionscode ist, die nur einmal im Monat ausgeführt werden werden, ist es extrem schwierig zu reproduzieren, und ich kann Sie zu diesem Zeitpunkt nicht den genauen Text und Nummer. Es ist der zweite Monat das passiert ist.

Ich vermute, das auftreten kann, wenn jemand mit diesem oder der anderen Datenbank arbeitet.

Der Datenfluß ist es, alle ‚Projekte‘ einmal im Monat in einer Datenbank zu aktualisieren und dann diese Informationen in der anderen Datenbank zur Verfügung stellen.

Vielleicht ist es wegen der ersten Zeile in dem Code ‚Routines‘:     Wenn vbNo = MsgBox ( "Möchten Sie aktualisieren?", VbYesNo, "Update") Then         Exit-Funktion     End If

Ich werde ein anderes Unterprogramm machen, ohne die MsgBox.


Ich habe versucht, dies in unserer Entwicklung Datenbank und es funktioniert. Dies bedeutet nicht, nichts als der andere Code auch in der Entwicklung feine workes.

War es hilfreich?

Lösung 3

Ich habe in der Lage, den Fehler in ‚Entwicklung‘ zu reproduzieren.

„Diese Aktion kann nicht abgeschlossen werden, da die andere Anwendung ausgelastet ist. Wählen Sie‚Wechseln zu‘aktivieren ....“

Ich kann nicht wirklich den Rest der Nachricht sehen, da es sehr schnell blinkt. Ich denke, dieser Fehler ist auf ‚Schalt‘ zwischen den beiden Datenbanken. Ich hoffe, dass durch den Benutzer zu erziehen, diese zu stoppen.

Philippe, Ihre Antwort ist natürlich richtig. Ich habe diesen Weg gewählt würde, wenn ich die ‚Routine‘ nicht entwickelt hatte zuvor.

"Ich habe in der Lage, dieses Verhalten zu reproduzieren. Es passiert, wenn der Fokus auf die genannte Datenbank zu verschieben, aber der Benutzer setzt den Fokus ([ALT] + [TAB]) auf der ersten Datenbank. Die‚Lösung 'war, um den Benutzer zu erziehen.“ Da es unmöglich ist, den Benutzer zu verhindern Anwendung in Windows zu wechseln, ich mag das Thema schließen.

Andere Tipps

Ich denke, diese Fehlermeldung an den Zustand eines Ihrer Datenbanken verknüpft ist. Sie verwenden hier Jet-Verbindungen und Access-Objekte, und Sie können nicht in der Lage sein, aus mehreren Gründen (Multi-User-Umgebung, unability LDB Lock-Datei, etc löscht), richtig aktive Datenbank zu schließen und eine anderen zu öffnen. Also, meiner Meinung nach, die Lösung ist, die Jet-Engine zu vergessen und eine andere Verbindung zu verwenden, um die Daten in der „anderen“ Datenbank zu aktualisieren.

Wenn Sie sagen, „Der Datenfluß ist einmal in einer Datenbank im Monat all‚Projekte‘zu aktualisieren und dann diese Informationen in der anderen Datenbank zur Verfügung stellen“, Ich gehe davon aus, dass die Rolle der „Routine“ einige Daten zu aktualisieren, entweder über SQL-Anweisungen oder gleichwertiges Cord-Updates.

Warum versuchen Sie nicht das entsprechende Updates zu machen, indem eine Verbindung zu Ihrer anderen Datenbank öffnen und (1) die entsprechenden SQL-Anweisungen senden oder (2) Öffnen-Cord und angeforderten Updates zu machen?

Eine Idee wäre zum Beispiel:

Dim cn as ADODB.connexion, 
    qr as string, 
    rs as ADODB.recordset

'qr can be "Update Table_Blablabla Set ... Where ...
'rs can be "SELECT * From Table_Blablabla INNER JOIN Table_Blobloblo  

set cn = New ADODB.connexion
cn.open

You can here send any SQL instruction (with command object and execute method) 
or open and update any recordset linked to your other database, then

cn.close

Dies kann auch über eine ODBC-Verbindung (und DAO.recordsets) durchgeführt werden, so dass Sie Ihre Lieblingsobjekte auswählen können.

Wenn Sie ein anderes Mittel zur Ausführung der Funktion erfahren möchten, gehen Sie folgendermaßen vor:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing

Wo MyMacro 'hat eine Aktion von ' RunCode ' mit dem Funktionsnamen Sie würden in Working.mdb auszuführen bevorzugen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top