Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anzeige: Neue Version existiert

Begonnen von Carl, Februar 06, 2018, 08:35:18

⏪ vorheriges - nächstes ⏩

Carl

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

DF6GL

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.

Lachtaube

@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.
Grüße von der (⌒▽⌒)

Carl

#3
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

Carl

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

Carl

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

DF6GL

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"




Carl

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

Beaker s.a.

Hallo Carl,
Hier findest du ein Beispiel: http://www.ms-office-forum.net/forum/showthread.php?t=333912
gruss ekkehard

edit: Du kannst auch mal nach "mdbloader" gurglen.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

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

Lachtaube

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.
Grüße von der (⌒▽⌒)

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

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

Lachtaube

Eine ACCDB kann nur 1x/Rechner geöffnet sein, deshalb ist der gezeigte Code im Zusammenhang mit der Fragestellung ziemlich sinnfrei.
Grüße von der (⌒▽⌒)

Beaker s.a.

Hallo Carl,
ZitatEin 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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)