Access Workshop 2011 - Access-Stammtisch

Werbung
Access Workshop 2011
Datenbanken fürs Nirwana
Stefan Zink, November 2011
Themen dieser Präsentation
•
•
•
•
•
•
Druckerverwaltung
Add-Ins und Verweise
Updates verteilen (Frontend)
Update des Backend (Strukturänderung)
Lizenzierung, Softwareschutz, pay per use
Anbindung an 2nd-Party-Produkt
(Wenn die Zeit reicht)
Zunächst ein paar Bilder um auf
das Thema einzustimmen
(Projekte auf die ich stolz bin, was
ich also wirklich kann)
Barcode-Drucker
Citizen-ThermoTransfer_Drucker
Dymo-Labelwriter
Anforderungen
• Druck muss mit einem Klick funktionieren
• System muss erkennen ob und welcher
Drucker angeschlossen ist
• Druckeranbindung kann lokal oder über
Netzwerk sein
• Funktionen müssen auch in MDE
funktionieren
Verfügbare Dymo- und Citizen-Drucker suchen
ZaehlerDym = 0
ZaehlerCit = 0
StrDymo = "Dymo"
StrCitiz = "Citiz"
For Each prtloop In Application.Printers
StrPrtName = prtloop.DeviceName
If InStr(1, StrPrtName, StrDymo) Then
Me.Kmb_DruckerSelect.AddItem prtloop.DeviceName
ZaehlerDym = ZaehlerDym + 1
Else
If InStr(1, StrPrtName, StrCitiz) Then
Me.Kmb_DruckerSelect.AddItem prtloop.DeviceName
ZaehlerCit = ZaehlerCit + 1
End If
End If
Dim stDocName As String
Dim a As String
P_StrAktuelleArtikelNr = Me.Artikelnummer
a = Me.Kmb_DruckerSelect
Select Case True
Case a Like "*Dymo*"
Application.Printer = Application.Printers(a)
stDocName = "Ber_Lageretiketten"
DoCmd.OpenReport stDocName, acViewNormal
Set Application.Printer = Nothing
Case a Like "*Citi*"
Application.Printer = Application.Printers(a)
stDocName = "Ber_LagerEtikettCitizien"
DoCmd.OpenReport stDocName, acViewNormal
Set Application.Printer = Nothing
Case Else
MsgBox ("Kein Drucker ausgewählt!")
End Select
Sonst noch zu beachten:
• Solange der entsprechende Bericht bearbeitet
wird muss der zugehörige Drucker als
Standard ausgewählt sein!
Und Ausserdem:
• Beim jeweiligen Drucker muss unbedingt das
eingelegte Papierformat auch eingestellt sein!
Add Ins und
Verweise
???
Version beachten!
Add-Ins / Verweise
• Entwicklung unter Office 2007 im Format
2002 zwar möglich, aber nach MDEErstellung läuft es nicht mehr unter 2002
• MDE-Erstellung unbedingt unter 2002
• Speziell bei T-BarCode nur gleiche
Versionen einsetzen
Update des
Frontend
???
Anforderungen
-
Automatischer Download von WWW
Automatische Verteilung im Netz
Benutzereingriffe reduzieren
Zuverlässige Ausführung in allen
Umgebungen
- Unkomplizierte Umsetzung
Erster Ansatz
• DBUpdate.exe von Gunter Avenius
(www.avenius.de)
• Vorteile:
• - einfach zu bedienen, schnell, effektiv und
viele Möglichkeiten
• Nachteile:
• - Unter Windows 7 nicht einsetzbar da
Schreibrechte in Windows-Verzeichnis
notwendig (meines Wissens!)
Bessere Lösungen
• Projekt noch nicht umgesetzt!
• Im Moment verarbeite ich viele einzelne
Lösungsansätze, mit freundlicher Hilfe von
- Thomas Möller
- Dirk Eberhardt
- und vielen anderen.
Danke.
Update des
Backend
???
Anforderungen
• Im Lauf der Weiterentwicklung wird sicher
das BE erweitert, wie geht das?
• Es muss eine automatisierte UpdateRoutine her
• Die Update-Routine muss kumulierend
sein, man weiß ja nie welches Update der
Kunde wirklich einspielt
• Versionsvergleich zwischen FE und BE
Die Lösung
Lösung für die Techniken
- DAO
- ADO
- SQL
http://www.kulpa-online.com/assets/files/tutorials/strukturaenderung.pdf
Die einzelnen
Schritte….
Versions-Tabelle im BE
Routine für Versionsvergleich
•
•
Dim MaxAW_BE As Integer
Dim MaxAW_FE As Integer
•
•
•
'Aktuelle Version des Frontend auslesen
MaxAW_FE = DMax("VFE_Autowert", "Tbl_VersionFE")
MaxAW_BE = DMax("fAutoWert", "Tbl_VersionDaten")
•
•
P_StrAktuelleVersion = DMax("VFE_Version", "Tbl_VersionFE", "VFE_Autowert =" & MaxAW_FE)
P_StrBenoetigteVersionDaten = DLookup("VFE_MindVersBE", "Tbl_VersionFE", "VFE_Autowert =" &
MaxAW_FE)
•
•
•
•
•
•
•
•
•
•
•
'Aktuelle Version des Backend aussuchen
P_StrAktuelleVersionDaten = DLookup("VER_Version", "Tbl_VersionDaten", "fAutoWert =" & MaxAW_BE)
'Abgleichen ob die MMC_Daten.mdb auf den richtigen Stand hat
If VersChange(P_StrAktuelleVersionDaten, P_StrBenoetigteVersionDaten) = True Then
MsgBox ("Die Aktuelle Version der MMC-Daten ist veraltet." & vbCrLf & _
"Aktuelle Version: " & P_StrAktuelleVersionDaten & vbCrLf & _
"Benötige Version: " & P_StrBenoetigteVersionDaten & vbCrLf & _
"Das Programm wird beendet. Bitte spielen Sie das aktuelle Update ein."), _
vbOKOnly + vbCritical, "Achtung! Falsche Version"
DoCmd.Quit
End If
Versionsvergleich
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Function VersChange(ByVal Vers1 As String, ByVal Vers2 As String) As
Boolean
Dim var1 As Variant, var2 As Variant, i As Integer
var1 = Split(Vers1, ".")
var2 = Split(Vers2, ".")
For i = 0 To 2
If CLng(var2(i)) > CLng(var1(i)) Then
VersChange = True
Exit For
ElseIf CLng(var2(i)) < CLng(var1(i)) Then
VersChange = False ' Zeile verzichtbar durch Vorbelegung der
Variablen mit False
Exit For
End If
Next i
End Function
Beispiel Felder hinzufügen
•
•
•
•
•
'Neues Feld anlegen inkl. aller Abfragen:
'Existiert Tabelle?
'Existiert Feld?
'Sonst: Tabelle anlegen
Public Function NeuesFeldAnfügen(Str_Table As String, Str_Field As String, Str_FeldType As
DAO.DataTypeEnum, Optional Lng_FieldSize As Long = 0) As Boolean
•
•
•
•
•
•
•
•
•
•
'prüfen ob die Tabelle vorhanden ist
If TableExistsDAO(P_db, Str_Table) = False Then
'sonst erstellen
DAO_CreatedNewTable P_db, Str_Table
End If
'prüfen ob Feld exisitert
If DAO_FieldExists(P_db, Str_Table, Str_Field) = False Then
'sonst erstellen
DAO_CreateField P_db, Str_Table, Str_Field, Str_FeldType, Lng_FieldSize
End If
•
Exit Function
•
End Function
Kopierschutz und
Lizenzierung
???
Anforderungen
• Softwarenutzung muss bezahlt werden
• Weitergabe der Datenbank muss so
schwer wie möglich sein
• Bezahlung pro Arbeisplatz
• Mehrfachanmeldung an Terminalserver
muss möglich sein
• Kosten müssen überschaubar sein
Meine gewählte Lösung:
Hardware-Dongle
Besonderheiten
•
•
•
•
Lieferant: Fa. SG-Intec in Kiel
Kosten: ab 19,00 EUR Netto / Stck.
Einfach zu handeln
ohne Installation (Plug and Play)
(nur 1 DLL in System32 Verzeichnis)
• Sehr sicher und Zuverlässig
• Ausbaustufen einfach Lizenzierbar
• Gigantische Variationsmöglichkeiten
Wichtig bei Access-DB:
Ganz zu beginn muss eine Globale Variable mit den Wert False gesetzt
werden, diese darf sich erst ändern wenn wirklich alle Bedingungen der
Dongle-Prüfung erfolgt sind.
Access ist nämlich sehr Fehlertolerant, ein Fehlen der notwendigen DLL
würde mit einer „Rüge“ kommentiert, aber die Prozedur würde fortgesetzt,
mit der Konsequenz dass das Programm startet obwohl kein Dongle
angeschlossen ist.
Weitere Vorteile
• Es gibt auch Dongle mit integrierter Uhr, damit
kann im Dongle ein Ablaufdatum definiert
werden (Da liegen die Kosten aber bei rund 50
EUR / Stck… )
• Es können auch Werte in das Dongle
geschrieben werden (z.B. Personalisierung)
• Durch Produkt-ID sind verschiedene
Ausbaustufen aktivierbar
• Durch WELTWEIT eindeutige Seriennummer
sind weitere Zuordnungen möglich
Anbindung an
vorhandene
Systeme
???
Meine Erkenntnis
•
•
•
•
Ich habe es für`s erste gelassen!
Wenn dann Datenübernahme per Import
Aber auch das ist kritisch
Es bleibt vorerst bei einer Insellösung
Und hier dann mein nächstes Projekt:
E N D E! (Danke.)
Herunterladen