Access-o-Mania

Access-Forum => Access Programmierung => Thema gestartet von: Carl am Februar 06, 2018, 08:35:18

Titel: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 08:35:18
Guten Morgen,

mal ne Frage. Ich würde in einem Frontend gern anzeigen lassen, welches die aktuelle Version vom Frontend ist. Bzw. dass eine aktuellere existiert.

Ich habe dazu die Idee, in einer kleinen Tabelle die Zahl der aktuellen Version und die in dem jeweiligen Frontend angegebene Version abzulegen und im Frontend eine Anzeige einzurichten, die dann beispielsweise rot wird.

Gibt es noch andere, bessere Ideen für diesen Zweck?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 06, 2018, 08:55:28
Hallo,

das kommt auf das Update-Konzept an..

Wie editierst Du in Deinem Versuch das Tabellenfeld mit der aktuellsten Version?

Befindet sich das BE im laufenden Betrieb in Deinem Zugriff?

Was soll passieren, wenn der User "rot" sieht?


Eine (automatisierte und prinzipielle) Möglichkeit z. B. ist, die aktuell(st)e FE-Datei im Netzwerk zu veröffentlichen und jedem User lokal einen Link zu spendieren, der, bevor die DB gestartet wird, das aktuelle FE lokal auf seinen Rechner kopiert (und damit das alte überschreibt).  Danach wird das lokale FE gestartet.


Bei Usern außerhalb des LAN müssen aber andere Methode Anwendung finden. Z. B. Versand der FE-Datei per Email und eine "Update-DB" , wenn am BE zusätzlich geändert werden muss.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 06, 2018, 08:59:11
@Carl,

das Frontend muss seine Version kennen. Ob es die nun aus einer Tabelle, einer VBA-Konstanten, einer eigenen Property, der Registry, einer Datei (in Text- oder Binärform), etc. ausliest, ist dabei völlig egal.

Beim Backend ist man weniger flexibel. Hier dürfte man auf einen Tabelleneintrag oder auf  eine parallel zum Backend liegende Datei (in Text- oder Binärform) eingeschränkt sein.

Der Clou bei der Geschichte sollte es ja sein, dass der Benutzer immer mit dem aktuellen Frontend unterwegs ist. Entweder startet er seine Anwendung über eine Batch-Datei (oder auch ein anderes Skript, das vom Rechner des Datenbanknutzers gestartet werden kann), die ggf. vorher das Kopieren übernimmt, oder es liegt ein eigenes Start-Frontend vor, das eventuelles Kopieren übernimmt und danach das normale Frontend startet.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 12:19:31
Hallo,

die Tabelle ist im Formular "Einstellungen" als Unterformular eingebunden. Oder im Backend einfach per Hand.

Das BE ist im laufenden Betrieb in meinem Zugriff.

Wenn der user rot sieht, wird er durch einen Schriftzug informiert, dass eine neue Version an ihn per Email verschickt wurde und er in einer nunmehr alten Version arbeitet. Alternativ dazu könnte ich die Knöppe in der alten auch sperren und ihn zum Wechsel zwingen.

>Eine (automatisierte und prinzipielle) Möglichkeit z. B. ist, die aktuell(st)e FE-Datei im Netzwerk zu veröffentlichen und jedem User lokal einen Link zu spendieren, der, bevor die DB gestartet wird, das aktuelle FE lokal auf seinen Rechner kopiert (und damit das alte überschreibt).  Danach wird das lokale FE gestartet.<

Das wäre eventuell die einfachste Möglichkeit. Wie macht man das mit dem Link?

Oder wäre es besser, in das Frontend eine Funktion einzubauen, die das neue FE auf den Desktop kopiert, das laufende FE schließt und wieder öffnet?

Die DB wird täglich von ca. 20°° bis 6°° nicht editiert.

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 12:21:39
Oder noch einfacher: Ein Frontend, das das jeweils aktuelle Frontend auf den Desktop holt, das alte überschreibt und dann das neue startet, so dass der USER nichts davon mitbekommt, um ihn nicht zu irritieren?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 12:28:49
okay, Start-Frontend.

Wäre es möglich, dass mal jemand mal ein Start-Frontend zum anschauen anhängt? Die sind doch sicher nicht so unterschiedlich ...

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 06, 2018, 12:40:22
Hallo,

was meinst Du jetzt mit Start-FE?  Eine DB die die akt. Version kopiert, dann schließt und die neue Db startet?

Das ist zu "kompliziert", weil die FE-Datei ja schon geöffnet ist und ein Kopie in aller Regel fehlschlägt.
Das selbe Prinzip geht doch mit einem Link (zu einer Batch-Datei) einfacher und schneller:

c:\DBVerzeichnis\FeCopyStart.bat   (oder .cmd):

Xcopy "\\Server\Freigabe\DBVerzeichnis\FE_Datei.accdb" , "c:\DBVerzeichnis\FE_Datei.accdb"
"Programmpfad\Office X\MSAccess32.exe"  "c:\DBVerzeichis\FE_Datei.accdb"


Link:
Ziel:  "c:\DBVerzeichnis\FeCopyStart.bat"



Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 13:16:14
Die user haben individuelle Verzeichnisse in der Cloud. Ich komme da mit der xcopy nicht klar. Was sie alle haben ist ein Desktop. Ich dachte es wäre möglich, den code so zu formulieren, dass die db immer auf den Desktop abgelegt wird?

Gibt es eine Möglichkeit, ein (für alle user gleiches und separates) Start-FE zu nehmen, das

(1) das aktuelle FE aus seinem Verzeichnis holt und auf dem desktop ablegt
(2) dabei die alte Version überschreibt
(3) die geholte neue Version startet
(4) und sich selbst schließt
?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 06, 2018, 15:58:58
Hallo Carl,
Hier findest du ein Beispiel: http://www.ms-office-forum.net/forum/showthread.php?t=333912 (http://www.ms-office-forum.net/forum/showthread.php?t=333912)
gruss ekkehard

edit: Du kannst auch mal nach "mdbloader" gurglen.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 06, 2018, 18:40:09
Muss man bei jeder Lösungsvariante den Pfad von MS Access eingeben?

Das verlinkte Tool produziert bei mir massenweise Fehlermeldungen, ich musste das abwürgen.

Hast Du eine Variante für 2010, die man leichter configurieren und anpassen kann?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 06, 2018, 18:58:35
Mit SysCmd(acSysCmdAccessDir) lässt sich das Verzeichnis, in dem MsAccess.exe beherbergt ist, problemlos feststellen.

Zu dem Tool kann ich selbst nichts sagen - aber egal ob Access97 oder Access2016 verwendet wird, sollte die Funktionalität bei verschiedenen Versionen unverändert gleich gut oder schlecht sein.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 07, 2018, 13:06:05
Hallo Carl,
Hier eine kurze Beschreibung wie ich es bei mir mal implementiert habe.
1. In deinem FE muss es eine Tabelle geben in der du die Versionsnr. ablegst, -
Weiteres dazu siehe Code.
2. In der Start-DB
  a) verknüpfst du diese Tabelle einmal aus dem lokalen FE (alte Version) und
einmal aus dem zentralen FE (neue Version)
  b) richtest du das AutoExec-Macro ein, - Aktion: AusführenCode "LadeNeueVersion()"
  c) in ein allgem. Modul schreibst du den folgenden Code (Namen anpassen)
Option Compare Database
Option Explicit

Const conAppName As String = "DeinFE.mdb"
Const conBackupName As String = "DeinFE.bak"
'ich speichere hier zur Sicherheit das alte FE

Const conOldVersionPath As String = "PfadDeinesLokalenFE\"
Const conNewVersionPath As String = "PfadDeinesZentralenFE\"    ' = neue Version

Public Function LadeNeueVersion()

    Dim StartApp As Integer
    Dim strAccessPath As String
    Dim lngOldVersion As Long
    Dim lngNewVersion As Long
   
    strAccessPath = SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"
   
    lngOldVersion = DLookup("VersionsNr", "tbl_FlagsLocal")
    lngNewVersion = DLookup("VersionsNr", "tbl_FlagsServer")
    'Im FE gibt es eine Tabelle (tbl_Flags), die ein Feld VersionsNr enthält (Zahl).
    'In der Loader-DB (hier) wird diese einmal aus dem lokalen FE als "tbl_FlagsLocal"
    'und einmal aus dem zentralen FE als "tbl_FlagsServer" verknüpft.

    If lngOldVersion < lngNewVersion Then
        'Kopie anlegen
        FileCopy conOldVersionPath & conAppName, conOldVersionPath & conBackupName

        'alte Version löschen
        Kill conOldVersionPath & conAppName

        'neue Version vom Server holen
        FileCopy conNewVersionPath & conAppName, conOldVersionPath & conAppName
    Else
    End If

    'neues FE starten
    StartApp = _
        Shell(conAccessPath & " " & conOldVersionPath & conAppName, vbNormalFocus)

    'Loader beenden
    Application.Quit
   
End Function


gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 12, 2018, 08:24:00
Hallo Beaker, ich setzt mich dran.

Aber:
Ein Problem bei mir hat sich herauskristallisiert, dass es keinen für alle user gleichen Pfad zum Frontend oder zur Access-Installation gibt. Die user bekommen das per email zugeschickt

Ich würde jetzt lieber im Frontend anzeigen lassen, ob es eine jeweils neuere Version gibt (die dem user schon per email zugeschickt wurde).

Außerdem würde ich gern verhindern, dass jemand das Frontend aus dem Anhang einer Email heraus starten kann. Ist denn sowas möglich?

Hier der folgende code kontrolliert, ob bereits eine Instanz eines Frontends läuft. Kann man den so umwandeln, dass er kontrolliert, ob das Frontend (irgendwo) auf Platte liegt?

Function LäuftAnwendung() As Integer
 Dim DB As Database
 Set DB = CurrentDb()
 If TestDDELink(DB.Name) Then
 LäuftAnwendung = -1
 Else
 LäuftAnwendung = 0
 End If
 End Function

 Private Function TestDDELink(ByVal strAppName$) As Integer ' Hilfs Function für IsRunnig
 Dim varDDEChannel
 On Error Resume Next
 Application.SetOption ("Ignore DDE Requests"), True
 varDDEChannel = DDEInitiate("MSAccess", strAppName)

 If Err Then
 TestDDELink = False
 Else
 TestDDELink = True
 DDETerminate varDDEChannel
 DDETerminateAll

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 12, 2018, 08:52:54
Eine ACCDB kann nur 1x/Rechner geöffnet sein, deshalb ist der gezeigte Code im Zusammenhang mit der Fragestellung ziemlich sinnfrei.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 12, 2018, 13:12:20
Hallo Carl,
Zitat
Ein Problem bei mir hat sich herauskristallisiert, dass es keinen für alle user gleichen Pfad zum Frontend oder zur Access-Installation gibt. Die user bekommen das per email zugeschickt
Wie gesagt, den Pfad zur MSACCESS.EXE bekommst du von SysCmd(acSysCmdAccessDir).
Die Pfade auf den Clients könntest du auch im BE speichern. Als "ID" bietet sich da Environ("ComputerName") an.
gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 12, 2018, 14:10:12
okay, ich versuche es.

Und sag mal, welchen VBA würdest Du empfehlen, wenn Du einen Button bedingt verbergen wolltest, wenn Feld "[verbergen] = 1" ist, aber im Eigenschaftsblatt "anzeigen" = ja ist?

Sollte man im Eigenschaftsblatt ganz auf eine Einstellung verzichten und alles nur über vba laufen lassen?

Also
* Anzeigen "ja/nein" optional wie im Eigenschaftsblatt und zusätzlich
* wenn "[verbergen] = 1" obiges überschreiben und immer verbergen

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 12, 2018, 14:47:44
Hallo Carl,
Leider kannst du im Eigenschaftenblatt bei Visible keinen Ausdruck
eintragen, der einen Booleanwert zurück gibt. Du musst den Wert
per VBA eintragen.
Wenn die Sichtbarkeit von einem gebundenen Feld abhängt, musst
du das in zwei Ereignissen steuern
1. AfterUpdate des gebundenen Feldes
2. Form_Current (Beim Anzeigen)
gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 16, 2018, 09:51:54
Hallo,

was meinst Du jetzt mit Start-FE?  Eine DB die die akt. Version kopiert, dann schließt und die neue Db startet?

Das ist zu "kompliziert", weil die FE-Datei ja schon geöffnet ist und ein Kopie in aller Regel fehlschlägt.
Das selbe Prinzip geht doch mit einem Link (zu einer Batch-Datei) einfacher und schneller:

c:\DBVerzeichnis\FeCopyStart.bat   (oder .cmd):

Xcopy "\\Server\Freigabe\DBVerzeichnis\FE_Datei.accdb" , "c:\DBVerzeichnis\FE_Datei.accdb"
"Programmpfad\Office X\MSAccess32.exe"  "c:\DBVerzeichis\FE_Datei.accdb"


Link:
Ziel:  "c:\DBVerzeichnis\FeCopyStart.bat"

Hallo, ich habe nochmal eine Frage zu dieser Lösung mit der batch-Datei.

Soviel ich verstehe, lädt die Batch das Frontend auf einem gemeinsamen Laufwerk in den Arbeitsspeicher eines jeden Kollegen. Also es liegt nicht jeweils eine Kopie für jeden lokal vor.

Gibt es da nicht vermehrt Konflikte beim Speichern unter den usern? Odr auch andere Probleme, wenn es alles aus der selben Kopie auf dem Austauschlaufwerk geladen wird?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 16, 2018, 10:16:07
Hallo,

das verstehst Du falsch. Da ist nichts mit "Arbeitsspeicher", wenn man vom Starten der DB-Anwendung mal absieht.

Mit Xcopy (oder einer anderen Copy-Funktion/Befehl)   wird lediglich die Access-Datei vom einem Netzwerkverzeichnis in einen lokalen Ordner kopiert.

Die lokale Datei wird anschließend  mit Access geöffnet, wobei die Datei-/Verzeichnisnamen natürlich anzupassen sind.


Spezielle Konflikte gibt es außer den allgemeinen Sperrungen beim gleichzeitigen Mehrfachzugriff auf einen Datensatz nicht, die DB ist ja in FE und BE aufgeteilt, so wie es sein soll.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 16, 2018, 13:22:06
ah, okay.

Und denkst Du, dass es besser ist, statt einer batch-Datei eine access-Datei zu nehmen, die das FE kopiert, startet und sich selber schließt?

Ist es auf diese Weise möglich, ein existierendes FE zu überschreiben?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 16, 2018, 15:10:21
Hallo Carl,
Beides überschreibt das existierende lokale FE.
Der Unterschied ist, dass die Batchdatei nicht prüft ob das zentrale FE
wirklich neuer ist als das lokale sondern immer kopiert.
gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 16, 2018, 15:20:31
Hallo,


eigentlich ist es egal, mit was und wie man kopiert.  Eine Access-DB für's Kopieren zu benutzen, halte ich für überzogen. Wenn aber die "DB" nur dafür benutzt wird, um VBA auszuführen, dann ist das auch ok..
Ist halt so, als ob man mit einem LKW zum Briefkasten fährt, um einen Brief einzuwerfen.  Bei allerdings 100000 Briefen sieht die Sache schon anders aus, aber eine solche Situation liegt hier, glaube ich, nicht vor.

Für einen Versionsvergleich und evtl. anschließendem Copy und DB-Start könnte auch ein VB-Script herhalten ..

Noch anders sieht es aus, wenn die lokale Db via HTTP- oder FTP-Server via Internet automatisch aktualisiert werden soll.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 17, 2018, 19:27:03
Ich wühle mich durch.

Ich habe jetzt das Frontend soweit vorbereitet, dass es selbst weiß, ob es in der aktuellen Version ist. Falls es das nicht ist, schließt es sich wieder.

Jetzt möchte ich eine DB als einfachen Loader konfigurieren, der
(1) wenn er gestartet wird sofort das Frontend in jenen Ordner kopiert, in dem der Loader selber kopiert wurde. Aufgrund der verschiedenen Systeme denke ich, dass das die stabilste Lösung ist.

(2) dabei in jedem Fall das im variablen Zielordner bereits befindliche Frontend ohne Nachfragen überschreibt.

(3) das Frontend öffnet und sich selbst als Loader wieder schließt.

Ist das sinnvoll?

Wie kann man der Filecopy beibringen, in den selben ordner zu speichern in dem der Loader liegt und dann die eventuell vorhandene Datei ohne Rückfragen zu überschreiben?

FileCopy "S:\Frontend.accdb", "was soll hier stehen?\Frontend.accdb"
wie überschreiben anordnen?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 17, 2018, 19:35:51
Schau Dir bitte die CurrentProject.Path-Eigenschaft (https://msdn.microsoft.com/de-de/vba/access-vba/articles/currentproject-path-property-access) in der OL-Hilfe an.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: bahasu am Februar 17, 2018, 20:13:31
Hi,

dass die Batchdatei nicht prüft ob das zentrale FE wirklich neuer ist als das lokale sondern immer kopiert.

Bei einem anderen Lösungsweg kann man in einer Batch-Datei den Befehl verwenden:
xcopy X:\Server\MeineDatenbank.mdb C:\1\*.* /D/C/R/Y

"/D" hat die Eigenschaft, dass nur eine aktuellere Datei in das Zielverzeichnis kopiert wird.
Diese Batch-Datei besteht aus 2 Zeilen:
Der obigen Kopieranweisung und der Zeile mit dem access-Aufruf.
Der Aufwand ist also relativ einfach.

Harald
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 17, 2018, 20:54:31
Ich muss mit einer DB als Startdatenbank arbeiten. Keine Batch-Datei.

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 17, 2018, 21:01:23
Schau Dir bitte die CurrentProject.Path-Eigenschaft (https://msdn.microsoft.com/de-de/vba/access-vba/articles/currentproject-path-property-access) in der OL-Hilfe an.

Ist das der Code:
&amp; Application.CurrentProject.Path &amp;

Ich brauche erstmal einen funktionierenden Code als Beispiel, dann kann ich das nach und nach anpassen und auf andere Projekte abwandeln. Mir fehlt irgendwie das Grundverständnis für die Funktionsweise solcher Zeilen. Hast Du nicht irgend wie mal einen größeren Code, wo ich mir das Ganze im Zusammenhang ansehen kann?

Ich verstehe auch nicht die Funktionsweise von "dimensionieren" usw..

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 18, 2018, 00:41:59
In das Beispiel haben sich HTML-Artefakte eingeschlichen. Richtig müsste es so formuliert sein:   MsgBox "Die aktuelle Datenbank befindet sich unter " & Application.CurrentProject.Path & "."
Variablen werden deklariert; im Modulkopf (also vor der ersten Sub bzw. Function) in der Regel mit dem vorangestellten Schlüsselwort Public (gleichwertig Global) oder Private (gleichwertig Dim) oder innerhalb einer Sub, Property bzw. Function mit dem Schlüsselwort Dim oder Static. Danach folgt dann der gewählte Variablenname. Ohne Angabe einer Klammerung hinter dem Variablennamen handelt es sich um eine skalare Variable, die genau einen Wert aufnehmen kann. Als letztes folgt dann optional der Datentyp (wie Long, Byte, Date, String, usw.). Fehlt die Angabe des Datentyps, wird die Variable oder das Datenfeld vom Typ Variant sein, der quasi alle Datentypen und auch Null-Werte und Instanzen von Objekten repräsentieren kann.

Will man jedoch mehrere Variablen gleichen Typs anlegen, setzt man hinter die Variable ein Klammerpaar. Jetzt kommt der Begriff Dimensionierung zur Geltung, wobei es unterschiedliche Formen der Dimensionierung gibt. Will man z. Bsp. die Lotto-Zahlen erfassen und weiß, dass 6 Werte (ohne Zusatzzahl) zugewiesen werden, die linear in einer Folge vorliegen, deklariert man also ein eindimensionales Datenfeld dafür und kann die Ober- und Untergrenze seines Datenfelds bereits bei der Deklaration festlegen. Steht die Anzahl der zu speichernden Werte erst später fest, bleibt es bei einem leeren Klammerpaar. Die Dimensionierung wird dann durchgeführt - bleiben wir bei den Lottozahlen -, wenn wenn feststeht, ob die Lottozahlen mit oder ohne Zusatzzahl erfasst werden sollen. Dafür gibt es dann eine weitere Anweisung, die ReDim heißt.

Standardmäßig ist die Untergrenze eines Datenfelds der Index 0, der nicht extra angegeben werden muss. Soll der Index mit einem anderen Wert starten, so muss auch der untere Wert angegeben werden. Beispiel in einem allgemeinen Modul:Option Explicit

Public gLottoZahlen(5) As Byte 'Byte kann Werte zwischen 0..255 speichern
'erster Wert steht in gLottoZahlen(0)
'letzter Wert steht in gLottoZahlen(5)

Private pLottoZahlen(1 To 6) As Long 'Angabe von Unter- und Obergrenze
'erster Wert steht in pLottoZahlen(1)
'letzter Wert steht in gLottoZahlen(6)

Sub Foo()
   Dim LottoZahlen() As Integer 'Größe der Dimension ist noch unbekannt

   'es soll auch die Zusatzzahl erfasst werden
   ReDim LottoZahlen(6) 'schafft Platz für 7 Werte im Array 0..6
End Sub

Will man im Datenfeld mehr als eine Ziehung erfassen, kann die Dimension erhöht werden. Für vier Ziehungen könnte man dann ein zweidimensionales Datenfeld anlegen, bei dem selbst zu definieren ist, ob in der ersten Dimension die Woche oder die Position der Lottozahl steht.Private pLZ(3, 6) As Long 'zuerst die Woche, dann die Zahlen (28 Werte)
So, ich will das jetzt hier nicht weiter vertiefen. Jedes Lehrbuch zu VBA sollte das auch besser und umfangreicher erklären können.

PS: Hatte ich Dir nicht neulich auch einen Link zu einem VBA-Wikibook zukommen lassen - oder täusche ich mich da?
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 18, 2018, 09:18:58
Hallo,


wird jetzt schon per Lottoziehung entschieden, welche Datenbank gestartet werden soll?   :) :) ;D ;D


Zitat
Ich muss mit einer DB als Startdatenbank arbeiten. Keine Batch-Datei.

Kannst Du auch erklären, warum?? Und was genau diese "DB" nun machen soll?

Ein Beispiel eines Db-Loaders hast Du doch  letzthin schon bekommen.

Und hier auch noch ein Beispiel eines VB-Scrips, wenn's denn komplizierter als eine bat-Datei sein muss:

Dim strOrigDir, strLocalDir, strFileName, strFileAttr
Dim strOrigFile, strNewFile, strFile
Dim fso

'Hier die richtigen Namen einsetzen
strOrigDir = "Z:\Server_DB_Verzeichnis\"     ' hier der Pfad zu der Original-Datei
strLocalDir = "C:\Lokal_DB_Verzeichnis\"      ' hier der Pfad auf dem lokalen Rechner
strFile = "MeineTolleDB.accdb"                     ' Dateiname der DB

strOrigFile=strOrigDir & strFile
strNewFile=strLocalDir & strFile
Set fso = CreateObject("Scripting.FileSystemObject")

if NOT fso.FileExists(strOrigFile) Then
      ' msgbox "Die Prüfung nach einem Programmupdate für " strFile & " im dafür vorgesehenen Verzeichnis verlief ergebnislos. Ein Update steht momentan nicht zur Verfügung. Starten Sie Ihre DB  wie gewohnt. " & VbCr & strOrigFile
      '   wscript.quit
End if


fso.CopyFile strOrigFile, strNewFile, true

set fso = nothing

DIM WSHShell
DIM rootPath
DIM mdbKey
DIM accessRegKeyString
DIM applicationPath
DIM subKeyString
 
SET WSHShell = CreateObject("WScript.Shell")
 
rootPath = "HKLM\Software\Classes\"
mdbKey = ".accdb\"
subKeyString = "shell\Open\Command\"
 
accessRegKeyString = WshShell.RegRead(rootPath & mdbKey)
 
applicationPath = WshShell.RegRead(rootPath & accessRegKeyString & "\" & subKeyString )


applicationPath=left(applicationPath,instr( applicationPath,".EXE")+4)
msgbox applicationPath & " """ & strNewFile &  """"
WSHShell.run applicationPath & " """ & strNewFile &  """"
Set WSHShell = Nothing



Kopiere den Code in eine txt-Datei und benenne sie um in "BlahBlahBlah.vbs"
Ersetze die gekennzeichneten Stellen durch Deine Verzeichnisnamen und den DB-Name.

Bei Doppelklick auf die vbs-Datei passiert genau das, was Du erreichen willst.



Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 09:40:41
Ich versuche, hiermit beim Starten des loader.accdb die Datei frontend.accdb in den Ordner zu kopieren, in dem der loader.accdb liegt. Aber es geht nicht und er öffnet den Debugger. Wie muss der Code richtig heißen?

Private Sub Form_Current()
FileCopy "S:\Frontend.accdb", & Application.CurrentProject.Path & "\Frontend.accdb"
End Sub

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 18, 2018, 10:05:38
Hallo,



Private Sub Form_Current()
FileCopy "S:\Frontend.accdb",  Application.CurrentProject.Path & "\Frontend.accdb"
End Sub



Bist Du sicher, dass die Frontend.accdb in das Verzeichnis der loader.accdb kopiert werden soll?

Und warum beim Form_Current-Ereignis? Jedesmal würde die FE-Datei beim Datensatzwechsel (falls ein  solcher überhaupt auftreten kann) neu kopiert.

Was passiert denn nach dem Kopieren?


Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 18, 2018, 13:46:28
@Franz
Zitat
Bist Du sicher, dass die Frontend.accdb in das Verzeichnis der loader.accdb kopiert werden soll?
Warum nicht? Bei mir liegen Loader und FE auch im gleichen lokalen
Verzeichnis.

@Carl
Wo hakt es denn in der von mir (#11) gezeigten Lösung?

gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 18:26:26
@Carl
Wo hakt es denn in der von mir (#11) gezeigten Lösung?

gruss ekkehard

Ich vermute es ist zu viel auf einmal, ich verstehe es nicht. Ich bin vom Denken her nicht so gut in diesen Gegenständen. Am Besten ist, wenn ich mich mit Beispielen schrittweise heran taste und sie lerne. :-)

Diese "Löffelfütterung" ist in dem Fall besser. Zum Beispiel kriege ich bei mehreren sich kombinierenden Fehlern den Fehler nur noch sehr schlecht über die Kombinatorik raus. Es erscheint mir besser, schrittweise zu bauen und immer von einer funktionierenden Zeile zur nächsten zu hangeln.

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 18:35:15
Bist Du sicher, dass die Frontend.accdb in das Verzeichnis der loader.accdb kopiert werden soll?

Ja, ich möchte es auf z.B. dem Desktop haben. Das Frontend soll jedesmal neu geladen werden. Wenn der user es direkt startet, erkennt es selbst, ob es veraltet ist und schließt sich im Bedarfsfall mit dem Hinweis, mit dem Loader zu starten.

Und warum beim Form_Current-Ereignis? Jedesmal würde die FE-Datei beim Datensatzwechsel (falls ein  solcher überhaupt auftreten kann) neu kopiert.

Das verstehe ich nicht. Welcher Datensatzwechsel?

Was passiert denn nach dem Kopieren?

Nach dem Kopieren möchte ich das Frontend öffnen und den Loader schließen.

Würdest Du es anders machen?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 19:06:03
Was ist denn an diesem code falsch?

Er soll
* ein Frontend öffnen, das im selben Verzeichnis liegt wie der Loader
* den Focus darauf richten
* die Access-Installation soll dabei mit "SysCmd" abgefragt werden, weil sie abweichen kann

Shell "SysCmd(acSysCmdAccessDir) \Frontend.accdb", vbNormalFocus

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 18, 2018, 19:09:06
   Shell SysCmd(acSysCmdAccessDir) "Frontend.accdb", vbNormalFocus
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 19:15:15
Das wird rot, er erwartet Anweisungsende. Fehlt da ein Komma?

Shell SysCmd(acSysCmdAccessDir), "Frontend.accdb", vbNormalFocus

Hier erwartet Access ein Anweisungsende, was ist damit gemeint?

Carl

Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 18, 2018, 19:47:31
Da fehlt dann noch ein & zur Verknüpfung des Pfads.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 18, 2018, 19:54:12
Ich habe viele Kombinationen durch, an welcher Stelle?

Shell & SysCmd(acSysCmdAccessDir) "Frontend.accdb", vbNormalFocus
Shell SysCmd(acSysCmdAccessDir) & "Frontend.accdb", vbNormalFocus
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 19, 2018, 10:54:06
Bei diesem Code markiert Access die Zeile mit Shell SysCmd gelb. Ich weiß einfach nicht, woran es liegt.

Kopieren und schließen klappt, nur die kopierte DB wird nicht aufgerufen.

Private Sub Form_Current()
FileCopy "S:\AutorentoolFrontend.accdb", Application.CurrentProject.Path & "\Frontend.accdb"
Shell SysCmd(acSysCmdAccessDir) & "Frontend.accdb", vbNormalFocus
DoCmd.Quit
End Sub

Was könnte es sein?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 19, 2018, 11:17:59
Hallo,

Shell SysCmd(acSysCmdAccessDir) & "MSaccess.exe """ & CurrentProject.Path & "\Frontend.accdb""", vbNormalFocus
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Lachtaube am Februar 19, 2018, 11:18:30
   Shell SysCmd(acSysCmdAccessDir) & "MsAccess.exe """ & _
         CurrentProject.Path & "\Frontend.accdb""", vbNormalFocus
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 19, 2018, 15:08:04
Ach so, der Name der Exe! Vielen Dank! Ich wende es mehrfach an. :-)

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 19, 2018, 15:45:04
Hallo Carl,
Das steht aber auch schon in meinem Code aus #11 so drin
strAccessPath = SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"Allerdings ist dann in der Shell-Anweisung eine Fehler  >:( -
statt
Zitat
Shell(conAccessPath & " " & conOldVersionPath & conAppName, vbNormalFocus)
muss es natürlich
Zitat
Shell(strAccessPath & " " & conOldVersionPath & conAppName, vbNormalFocus)
heissen.

gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 20, 2018, 07:35:20
Ach, stimmt. Ich habe das nicht gesehen.

Sag mal, ist die Frage nach dem automatischen Aktivieren der Makros ungünstig gewesen?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 20, 2018, 12:17:55
Hallo Carl,
Von Macros habe ich keine Ahnung, - ich verwende die nicht. Deshalb kann
ich auch nichts zu deren Aktivierung sagen.
gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 20, 2018, 13:30:02
@Franz
Kannst du mir deinen Code aus #28 näher erläutern?
Der erste Teil ist mir klar. Was ich nicht verstehe ist der Zugriff auf die
Registry im zweiten Teil.
Dank im Voraus.
gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 20, 2018, 13:35:37
Hallo Ekkhard,

es wird die einer Datei-Extension (accdb) in Windows zugeordnete Anwendung (MsAccess.exe) ermittelt und gestartet.
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Carl am Februar 20, 2018, 13:39:14
Hallo Carl,
Von Macros habe ich keine Ahnung, - ich verwende die nicht. Deshalb kann
ich auch nichts zu deren Aktivierung sagen.
gruss ekkehard

siehe Bild im Anhang

Ich meinte die Sicherheitswarnung, die immer angezeigt wird, wenn die DB drüber kopiert wurde. Man muss hier aktiv die "Inhalte" aktivieren.

In den Office-eigenen Optionen lässt sich nur die Warnung ausschalten. Ich hätte aber gern, dass die Inhalte permanent aktiviert sind. Zumal es ja alles selbst erzeugte und immer die selben Inhalte sind. Geht sowas?

Carl
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 20, 2018, 16:49:07
@Franz
Danke, verstanden. Trotzdem noch die Frage, rhetorisch, da hier nicht  gewünscht,
könnte man das auch "fest verdrahten"? Ich meine so wie in VBA, wenn der Pfad
zur MSACCESS.EXE bekannt ist.

@Carl
Bin mir nicht sicher, aber das könnte mit den vertrauenswürdigen Speicherorten
zusammenhängen. Vielleicht weiss dazu jemand mehr.

gruss ekkehard
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: DF6GL am Februar 20, 2018, 17:43:47
Hallo,

na klar:
.
.
.
DIM WSHShell
DIM rootPath
DIM mdbKey
DIM accessRegKeyString
DIM applicationPath
DIM subKeyString
 
SET WSHShell = CreateObject("WScript.Shell")

applicationPath="""C:\Program Files (x86)\Microsoft Office\Office14\MSAccess.exe"""

WSHShell.run applicationPath & " """ & strNewFile &  """"

Set WSHShell = Nothing
wscript.Quit


Zu "Makro aktivieren":

es müssen alle Einstellungen im  Sicherheitscenter (TrustCenter)  geprüft und angepasst werden, z. B. "Alle Makros aktivieren" 
Titel: Re: Anzeige: Neue Version existiert
Beitrag von: Beaker s.a. am Februar 21, 2018, 12:46:44
@Franz
Danke nochmal.
gruss ekkehard