collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 31
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13953
  • stats Beiträge insgesamt: 66364
  • stats Themen insgesamt: 8942
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Anzeige: Neue Version existiert  (Gelesen 3492 mal)

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #15 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
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1780
Re: Anzeige: Neue Version existiert
« Antwort #16 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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #17 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
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23320
Re: Anzeige: Neue Version existiert
« Antwort #18 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.

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #19 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
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1780
Re: Anzeige: Neue Version existiert
« Antwort #20 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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23320
Re: Anzeige: Neue Version existiert
« Antwort #21 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.

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #22 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
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1227
Re: Anzeige: Neue Version existiert
« Antwort #23 am: Februar 17, 2018, 19:35:51 »
Schau Dir bitte die CurrentProject.Path-Eigenschaft in der OL-Hilfe an.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Carl

Offline bahasu

  • Moderator
  • Access Guru
  • *****
  • Beiträge: 1886
Re: Anzeige: Neue Version existiert
« Antwort #24 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
Servus
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #25 am: Februar 17, 2018, 20:54:31 »
Ich muss mit einer DB als Startdatenbank arbeiten. Keine Batch-Datei.

Carl
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #26 am: Februar 17, 2018, 21:01:23 »
Schau Dir bitte die CurrentProject.Path-Eigenschaft in der OL-Hilfe an.

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

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
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1227
Re: Anzeige: Neue Version existiert
« Antwort #27 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?
Grüße von der (⌒▽⌒)
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23320
Re: Anzeige: Neue Version existiert
« Antwort #28 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.



« Letzte Änderung: Februar 18, 2018, 10:00:11 von DF6GL »
 
Folgende Mitglieder bedankten sich: Carl

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 329
Re: Anzeige: Neue Version existiert
« Antwort #29 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