MS-Office-Forum

MS-Office-Forum (http://www.ms-office-forum.net/forum/index.php)
-   Microsoft Access (http://www.ms-office-forum.net/forum/forumdisplay.php?f=60)
-   -   Beispiel für automatisches mdb Update mittels Batch-Datei (http://www.ms-office-forum.net/forum/showthread.php?t=130759)

Fynbos 21.06.2004 15:48

Beispiel für automatisches mdb Update mittels Batch-Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich möchte mit mal erlauben, euch hier ein Beispiel zu geben, wie wir das Problem mit den ständig neuen Versionen und Updates in der Firma gelöst haben.

Ich habe den Lösungsansatz hier aus dem Forum, wie man sehen kann, ist das Original-C immer noch in der Datei.
Soviel Ehrlichkeit ist Pflicht. :)

Zuerst zur Erklärung:
Auf Basis von Access haben wir in der Firma eine Art Kundendatenbank.
Da sich diese aber ständig erweitert und wir es leid waren, ständig an 30 Leute eine 5 MB-Große .mdb zu schicken (...die Outlook ja dann eh abblockt ;) ) und wir über eine gute Standleitung verfügen, haben wir uns also gesacht, wir bauen was ein, damit die Leute immer die neuste Version nehmen müssen.
Denn leider tauchten auch da Probleme auf, wenn die User nicht die Updates ausführen.

Die Lösung: Eine Server-Seitig gelagerte Batch-Datei, die vom User zum Programm-Start aufgerufen wird, welche dann die aktuelle Version überprüft und dann evtl ersetzt.

Folgende Probleme wollten wir vermeiden:
- Die anderen Niederlassungen haben nur DSL, sind also im Download recht langsam und brauchen für 5 MB halt ihre Zeit. Und User rufen ein Programm ja immer erst auf, wenn es schnell gehen soll.
- Die User sollen nicht noch groß JA oder Nein anklicken müssen.
- Wir bestimmen wann ein Update laufen soll und wann nicht.
- Es sollte keine extra-Versionsdatei geben, warum immer 2 Dateien bei einem Update ändern, wenn auch 1 reicht?
- Die Dateien sollen immer im selben Verzeichnis sein, das nannten wir einfach mal "FrontEnd" unter dem Laufwerk C.
- Ein eigenes Programm-Icon wäre nicht schlecht. ;)

Und so ist es gelöst:
- Zuerst haben wir ein Netzwerklaufwerk auf den User-Rechnern angelegt, in diesem Fall das LAufwerk T. Es wird automatisch beim Start angemeldet und verweist auf das Verzeichnis auf dem Server, wo die Dateien liegen.
- Dort liegen zum einen die Batch-Dateien, auf die dann einfach per Verknüpfung (auf z.B. "T:\tub.bat") verknüpft wird.
- Außerdem liegen im selben Verzeichnis auf dem Server die mdb-Dateien, die der User dann benutzen soll, die allerdings lokal erst auf den User-Rechner gesaugt werden.

Das Batch-Programm (anbei) macht nun folgendes:[list=1][*]Es setzt die Variablen für die Verzeichnisse, die Version etc fest.[*]Es checkt, ob das Zielverzeichnis auf dem User-Rechner da ist. (hier: c:\FrontEnd\Theseus)[*]Wenn nicht, erstellt es es.[*]Es vergleicht die aktuelle Versionsnummer auf dem Server mit dem auf dem Zielrechner[*]Wenn diese nicht gleich sind, löscht es die alte Version auf dem Userrechner.[*]Dann kopiert es die Neue Version vom Server auf den Userrechner und gibt dazu eine Meldung aus, damit der User nicht ungeduldig wird.[*]Es startet das Programm.[*]Falls die Versionen gleich sind und das Programm nicht updaten muss, startet es direkt die Access-Datei.[*]Es löscht alle alten Variablen und schließt sich.[/list=1]

Der Trick ist nun folgender:
Um eine neue Version freizuschalten, muss man nicht mehr machen, als diese auf den Server zu kopieren und nur die Versionnummer (hier 138) ändern.
Das dauert keine 10 Sekunden und schon ziehen alle User, sobald sie das Programm neu starten (z.b. morgens, wenn die Rechner hochfahren) automatisch die neuste Version.

DER HAKEN!!!
Es gibt nur einen Haken an der Sache:
Die Command-Zeile, die das Programm startet, unterscheidet sich bei den alten Systemen wie Win95 und 98, und neueren wie XP und 2000.
Hat was mit der Command-Struktur in DOS zu tun, ist aber auch relativ egal, denn alles was man machen muss ist:
2 Batch-Dateien, eine für alte Rechner (hier "tub.bat") und eine für die neueren (hier: "tub_xp.bat").
Je nach Rechner muss man dann halt die richtige aussuchen.
(Kleiner Tip: wir haben deswegen endlich alle alten Kisten ersetzt, einfach lange genug bei der Geschäftsführung quengeln. ;) )

Achja, nochwas: Das Icon:
Das kann man ja nun einfach auf dem Server lagern und dann unter Access bei Start halt einfach "T:\icon.ico" angeben.


Ich hoffe das hilft dem ein oder anderen, wir ihr in den Dateien seht, ist die Grundidee zu dem kleinen Code von Carsten Pache, wir haben nur die Sache mit den Versionsdateien geändert.

Gruß
Fynbos

PS: Wer Fragen oder Ideen hat: Immer her damit.
Als ob wir schon alles wüßten... ;)

Fynbos 22.06.2004 11:54

Verbessert: Mit Komprimierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

gestern Abend bei einer Flasche Reisschnaps kam mir dann doch noch eine Idee, wie man das ganze verbessern kann:

Komprimieren!

Ich erinnerte mich an die gute alte Zeit, als wir zip-dateien noch unter DOS entpackt haben (nix mit GUI) und überlegte wie man die mdb-Dateien noch kleiner machen kann.
Und da fiel es mir wie Schuppen aus den Haaren:

Einfach die Dateien für die Übertragung komprimieren.

Also habe ich mir von www.winrar.de die kostenlose unrar.exe besorgt, mit dessen Hilfe man im Command-Zeilen-Modus .rar-Dateien entpacken kann.

(Ich vertraue nur auf RAR, ZIP mag ich einfach nicht. Ist aber wohl Gefühlssache... :) )

Dazu habe ich dann einige Zeilen in die Batch-Datei gebaut und nun schickt das Prog nach der Prüfung ob es eine neue Version gibt, diese gepackt rüber und entpackt diese dann.
Zudem löscht es anschließend die gepackte, übertragene Datei.

Damit lässt sich eine MDB in der Regel nochmal um 85% verkleinern!
= weinger Wartezeit bei der Übertragung!

Im Anhang befinden sich wieder die beiden Batch-Dateien in geänderter Form und außerdem nochmal der Link zu der .exe


Gruß
Fynbos

PS: Bitte gebt doch mal eure Meinung dazu ab... :(

lordofchaos 23.06.2004 15:50

Schönheitsfehler
 
Einen kleinen Schönheitsfehler bzw ein Problem habe ich entdeckt.

Du kopierst immer eine mdb mit namen, welche sich aus "tub" und der versionsnummer zusammensetzten (z.b. tub-138.mdb)
was ist nun aber, wenn jemand eine Verknüpfung auf den desktop legt ?
Er hat dann ein Verknüpfung zu "tub-138.mdb" die neue version heisst dann aber "tub-0815.mdb"
--> Verknüpfung tot

Arne Dieckmann 23.06.2004 15:55

"Schuld eigen" würde ich sagen. Es sollte laut Anleitung nur ein Desktop-Link zur Batch-Datei angelegt werden, dann sollte es klappen.

Fynbos 24.06.2004 08:29

:) So ist es.
Die Verknüpfung auf dem Desktop zielt nur auf die Batch-Datei auf dem Server, also über das Netzlaufwerk T auf T:\tub_xp.exe

Genau das ist ja der Trick, so muss bei einer neuen Version stets nur in der Batch-Datei die neue Versionsnummer eingegeben werden.

lordofchaos 24.06.2004 11:06

sowas sowas
 
Hab ich wohl nicht richtig gelesen :=)

Warum gibst du als Server-Pfad nicht \\Server\Verzeichnis\Datei.bat an ?
Dann ist eine Anmeldung eines Netzlaufwerks nicht nötig

@Arne
"Schuld eigen" ??

Arne Dieckmann 24.06.2004 11:11

@Freddy: Ich muss mir wohl so etwas abgewöhnen. Ich dachte, dass man diesen Spruch auch in München kennt. ;)
Ich könnte auch "Selber schuld" schreiben. :bye:

lordofchaos 24.06.2004 11:15

@Arne
Also ich kannte den Spruch nicht :)
Aber selber Schuld bin ich nicht *g* ich habs ja nicht verwendet ! :nene:

Fynbos 24.06.2004 12:11

Kannte ich auch noch nicht.

Um ehrlich zu sein, gibt es keinen trifftigen Grund, warum wir Netzlaufwerke nehmen. ;)
Aber irgendwie habe ich das Gefühl, dass das sauberes arbeiten ist.
Oder irre ich da irgendwie?

lordofchaos 24.06.2004 12:14

also ich finde nen direkten Pfad besser.
Vorallem muss nicht bei jedem ein Netzlaufwerk eingerichtet werden und somit kann auch keiner aus versehen oder absicht auf dem Laufwerk rumspielen.
Das Anmelden beim Start funktioniert ja auch nicht anders

Fynbos 19.08.2004 12:08

Noch mal verbessert
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wir schreiben das Sommerloch 2004 und schon kommen gelangweilte Admins, die Doom3 schon durch haben, auf die Idee:

Verbessern wir das ganze doch nochmal... ;)

Wie sich heraus stellte, wurde auf den Clients in den Außenstädten das runterladen zwar unkompliziert gehandelt, aber das Programm, speziell das Entpacken, wurde doch tatsächlich immer noch auf dem Netzlaufwerk ausgeführt!
Und das kostet immer noch etwas unnötige Zeit. :(

Lösung:
Die Batch-Datei liegt nun also komplett auf dem Client, aber die Versionsnummer alleine (also das, was sich ständig ändert) ist auf dem Server gelagert.
Und das geht am besten mit dem fast vergessenen Basic-Befehl: CALL

Es gibt nun also 2 Dateien:
- Die eine ist die Datei, die das ganze vergleichen, löschen, kopieren und starten des Programmes übernimmt,
- die andere hat nur die Versionsnummer als Variable hinterlegt und wird mit dem CALL-Befehl aufgerufen.

Erstere liegt beim Client, da sie sich ja nie ändert. (tub_xp.bat)
Zweitere auf dem Server, in dem Zielpfad. (tub_ver.bat)

Ich habe die beiden Dateien im Beispiel angehängt.

Fragen?
Fragen!

Ati 26.08.2004 14:28

Hallo zusammen. Da ich ja mit meiner Netzwerk-Variante (alle greifen auf ein und das selbe FE zu) auf die Fresse geflogen bin, wollte ich mich hier dieser Lösung bedienen. Aber irgendwas mache ich wohl noch falsch. Ich habe die Variablen entsprechend geändert und die Batch-Datei gestartet jedoch tut nach dem Hinweis das jetzt die neue Version kopiert wird nichts mehr. Also habe ich mir mit Hilfe des Echo Befehls alle Variablen mal anzeigen lasse und siehe da die Versionsnummer, sowie der Server-Pfad sind "Leer". Ich habe aber 001 bzw. \\PC-Server\Daten\ordner eingetragen ???????????????

ati

Fynbos 26.08.2004 15:31

Mhm, welche von den verschiedenen obrigen versionen nimmst du denn?
Zeig mal die Dateien, vieleicht finde ich den Fehler.

Jetzt so auf anhieb solltest du vieleicht gucken, ob du nicht einfacher mit der Server-IP arbeiten kannst, also z.B.: \\192.168.0.100\Daten\order

Gruß :)

Ati 26.08.2004 15:38

:mad: Also hier nochmal der ganze Code mit meinen Änderungen:

:: ----- START -----

@echo off
::Befehlszeilenaugabe aus

:: Microsoft Windows NT 4
:: Microsoft Access 97
::
:: Carsten Pache, 1999
:: Modifiziert Florian T. Rose, 2004
:: Modifiziert Markus Weinrich, 2004

::Variablen deklarieren
SET FrontEndVersion=100
SET FrontEndPfad=C:\Fohrer
SET FrontEndProg=test

SET ServerPfad=W:\Fohrer


:: Screen löschen
CLS
echo Pfad %FrontEndPfad%
echo Prog %FrontEndProg%
echo Ver %FrontEndVersion%
echo Ser %ServerPfad%



::Ist das Verzeichnis auf diesem Rechner bereits vorhanden?
::JA --> nichts tun
::NEIN --> Verzeichnis anlegen
IF NOT EXIST "%FrontEndPfad%\*.*" MD "%FrontEndPfad% " > nul




::Existiert die aktuelle Version bereits auf diesem Rechner?
::JA --> Programm starten
::NEIN --> Programm vom Server auf den Rechner kopieren
IF EXIST "%FrontEndPfad%\%FrontEndProg%-%FrontEndVersion%.mdb" GOTO PROGRAMMSTART

ECHO ***
ECHO *** alte Versionen werden gelöscht ...
ECHO ***
IF EXIST "%FrontEndPfad%\%FrontEndProg%*.mdb" DEL "%FrontEndPfad%\%FrontEndProg%*.mdb"

::MDB-Datei vom Server auf den aktuellen Rechner kopieren
ECHO ***
ECHO *** Kopiere "Test %FrontEndVersion%" vom Server...
ECHO *** Bitte einen Moment Geduld! (Dieser Vorgang kann einige Minuten dauern)
ECHO ***
IF EXIST "%ServerPfad%\%FrontEndProg%-%FrontEndVersion%.mdb" COPY "%ServerPfad%\%FrontEndProg%-%FrontEndVersion%.mdb" "%FrontEndPfad%\%FrontEndProg%-%FrontEndVersion%.mdb">nul



:PROGRAMMSTART
IF EXIST "%FrontEndPfad%\%FrontEndProg%-%FrontEndVersion%.mdb" START "%FrontEndPfad%\%FrontEndProg%-%FrontEndVersion%.mdb"



::Variablen loeschen
SET FrontEndVersion=
SET FrontEndPfad=
SET FrontEndProg=
SET ServerPfad=

:: ----- ENDE -----


Was mich stutzig macht ist das das Programm von vier Variablen immer nur zwei speichert. D.h. ändere ich die Variablen in ihrer reihenfolge, so zeigt er mir immer nur die ersten beiden an :mad:

Fynbos 26.08.2004 17:00

Zitat:

von Ati
Was mich stutzig macht ist das das Programm von vier Variablen immer nur zwei speichert. D.h. ändere ich die Variablen in ihrer reihenfolge, so zeigt er mir immer nur die ersten beiden an :mad:

Also, ich habe mal eben den Text hier kopiert und in eine bat geschrieben.
Die Variablen zeigte er soweit alle 4 richtig an bei mir, keine Probleme.

Allerdings mußte ich auf dem Netzlaufwerk W: erstmal das Verzeichnis \Fohrer anlegen, ist das Absicht?
Falls ja, ok.

Dann habe ich ne fohrer-100.mdb in dieses Verzeichnis gelegt und es ging alles problemlos.

Er hat das Verzeichnis auf C gemacht, dann kopiert und dann gestartet, bzw wollte starten, aber ich habe hier XP und daher ging der Start-Befehl bekannterweise in dieser Art nicht.

Tip: Mit dem Befehl "pause" kann man das Programm an der Stelle anhalten und durch drücken der Leertaste weiterlaufen lassen.
Das kombiniert mit "ohne echo off" sollte dir helfen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.