Access Blog

Access Anwendungsentwicklung

Schnellerfassung 1:n verbundener Daten

Montag 15. März 2010 von Andreas Vogt

Stellt euch vor, ihr habt eine ausgedrukte Liste von Daten vor euch liegen, und sollt diese erfassen. Das ist schon Arbeit genug, aber richtig heftig wird es erst, wenn die Daten in verschiedene Tabellen gehören. Das bedeutet, zuerst die Daten in die Stammdatentabelle eintragen, erstellter AutoWert-ID aufschreiben, und danach in die Detaildatentabelle gehen und die restlichen Daten mit der aufgeschriebenen Nummer eintragen. Eigentlich eine Arbeit für Praktikanten?! Aber wie hoch ist die Gefahr von Falscheingabe? Stimmt der übertragene ID nicht überein, sind die Detaildaten nicht mehr auffindbar. Die Lösung ist, wir lassen das von einem Programm erledigen.

Also nur noch 1 Formular mit allen Daten, und per VBA-Code werden die Inhalte in die richtigen Tabellen geschrieben. Das will ich euch mal an einem einfachen Beispiel zeigen. Gegeben ist eine Bücherliste mit Buchtitel, Vor- und Nachname des Autors.

Wer haben also 3 Textfelder im Formular die Vorname, Nachname und Buchtitel heißen. Außerdem brauchen wir eine Logik die es verhindert dass ein Autor mit selben Namen doppelt angelegt wird, und eine Logik die verhindert dass ein Buch mehrmals angelegt wird. Kommen wir mal zum Code. Dieser ist zweckmäßiger Weise in eine Prozedur eingebunden, welche mit einer Befehlsschaltfläche im Formular aufgerufen wird. Wir haben 2 Tabellen, TabelelBuch und TabelleAutor. Die Feldbezeichner sind aus dem Code zu entnehmen, die Schlüsselfelder beider Tabellen heißen jeweils “id”.

Eine kleine Besonderheit ist die Art wir der zu übertragene ID ausgelesen wird, dies geschieht mit folgender Abfrage: SELECT @@IDENTITY AS ID;
@@IDENTITY ist ene Systemfunktion, die den zuletzt eingefügten Identitätswert zurückgibt. Wenn der Einfügevorgang keinen Datensatz eingefügt hat, gibt die Funktion den Wert Null zurück.

Sub Speichern()
    Dim autorid As Long
    Dim db As Database
    Dim rs As Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("Select id From TabelleAutor Where Vorname = '" & Me!Vorname & "' And Nachname = '" & Me!Nachname & "'", dbOpenDynaset)
    If rs.EOF Then
        db.Execute "Insert into TabelleAutor (Vorname, Nachname) Values ('" & Me!Vorname & "', '" & Me!Nachname & "')"
        Set rs = db.OpenRecordset("SELECT @@IDENTITY AS ID;", dbOpenDynaset)
        autorid = rs!ID
    Else
        Set rs = db.OpenRecordset("Select id From TabelleAutor Where Vorname = '" & Me!Vorname & "' And Nachname = '" & Me!Nachname & "'", dbOpenDynaset)
        autorid = rs!ID
    End If

    Set rs = db.OpenRecordset("Select id From TabelleBuch Where Titel= '" & Me!Titel & "'", dbOpenDynaset)
    If rs.EOF Then
        db.Execute "Insert into TabelleBuch (Titel, Autorid) Values ('" & Me!Titel & "', " & autorid & ")"
        MsgBox "Daten gespeichert"
    Else
        MsgBox "Buch schon vorhanden!"
    End If

    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

Zuerst wird geprüft ob der Autor schon existiert. Falls nicht werden die Autor-Daten in die Tabelle eingefügt und den automatisch erzeugten ID-Wert ausgelesen. Falls bereits vorhanden wird lediglich der ID-Wert des Autors geholt. Der ID-Wert wird in beiden Fällen in der Variable autorid zwischengespeichert.

Danach wird geprüft ob das Buch schon vorhanden ist, falls nicht, wird das Buch gespeichert und eine Erfolgsmeldung ausgegeben, bzw. im anderen Falle die Meldung ausgegeben, dass das Buch schon vorhanden ist. Am Schluss noch wie üblich Aufräumen, Recordset schließen und Objekte zurücksetzen.

Wie immer fehlt eine zusätzliche Fehlerbehandlung, die ihr im Betrieb unbedingt einbauen solltet. Das Beispiel kann man auch auf mehrere 1:n verbundener Tabellen anwenden, man muss dann sorgfältig die Daten trennen was wohin gehört und dann mehrmals mit @@IDENTITY den gespeicherten ID-Wert holen.

AV 2010

Kategorie: Formulardesign, VBA Code | Keine Kommentare »

Verzeichnis in ein Listenfeld auslesen

Sonntag 14. Februar 2010 von Andreas Vogt

Kürzlich hatte ich ein Projekt bei dem XML-Dateien importiert wurden. Zur Auswahl der Dateien mussten diese zuvor aus einem Verzeichnis in ein Listenfeld ausgelesen werden.
Um das zu bewerkstelligen bedienen wir uns wieder einmal der “Microsoft Scripting Runtime” Bibliothek. Diese wird seit Office 2000 mit dem Office-Paket ausgeliefert und beinhaltet verschiedene Objekte die Dateizugriff möglich machen, u.a. auch das aus einem anderen Artikel bekannte FileSystemObject, kurz FSO genannt. Des weiteren werden die Objekte Files() und Folder() im Beispiel verwendet.

Das FileSystemObject hat verschiedene Methoden zum Datei- und Verzeichniszugriff. Wir verwenden im unteren Beispiel die Methoden GetFolder() und FolderExists(). Die Methode Files des Folder-Objektes liefert eine Collection von Dateiobjekten zurück. Diese Objekte kann man über die “Name” Eigenschaft überprüfen, ob es sich auch um den gewünschten Dateityp handelt, also z.B. “XML”.

Soweit erst mal die graue Theorie, kommen wir zum VBA-Code.
Zuerst die Deklaration der benötigten Objektvariablen. Benötigt wird dazu der Verweis auf Microsoft Scripting Runtime.

    Dim oFSO As Scripting.FileSystemObject
    Dim oFolder As Scripting.Folder
    Dim oFile As Scripting.FILE
    Dim cFile As String

Dann die Zuweisung von oFSO und oFolder:

Set oFSO = New Scripting.FileSystemObject
    If oFSO.FolderExists(Me!Folder) Then
        Set oFolder = oFSO.GetFolder(Me!Folder)

In einer Schleife über oFolder.Files, welches eine Collection aller Dateiobjekte ist, erfolgt das Auslesen der Dateinamen im Verzeichnis:

        For Each oFile In oFolder.Files
            DoEvents
            cFile = oFile.NAME
            If Right(cFile, 3) = "xml" Then
                ReDim Preserve aFiles(i)
                aFiles(i) = cFile
                i = i + 1
            End If
        Next

Zuletzt noch die Zuweisung der Dateinamen an das Listenfeld:

Me!Listenfeld1.RowSource = Join(aFiles, ";")

Den ganzen Beitrag lesen »

Kategorie: Formulardesign, VBA Code | Keine Kommentare »

Müssen Formulare immer rechteckig sein?

Samstag 13. Februar 2010 von Andreas Vogt

Hallo,
ich hab mich in letzter Zeit ein wenig mit den Möglichkeiten der GDI32.dll API Bibliothek befasst. Die GDI (Graphik Device Interface) beinhaltet Funktionen um z.B. das Aussehen eines Formulares zu verändern. Ob dreieckig, rund, abgerundet etc ist alles möglich. Auch Kombinationen von Formen sind zulässig.
OK, zugegeben, braucht eigentlich niemand. Aber man darf auch schon mal beim Design der Formulare etwas mehr an Kreativität zeigen als sonst.

Ich möchte euch jetzt zeigen wie ihr Coole runde Formulare erstellt.
Zuerst braucht ihr einen Hintergrund. Benützt dazu euer Grafikprogramm wie z.B. Photoshop etc. und erstellt eine Grafik. macht diese gleich etwas größer als das spätere Formular. Eine Verlaufsebene einfügen, darauf mit einem coolen Stil ein Kreis malen, in den Kreis ein weiterer Kreis mit weissem Hintergrund malen. Dies gibt der Rand eures Formulars.

Dann erstellt ein leeres Formular.
Plaziert darauf eure Steuerelemente wie gewohnt, denkt aber an die spätere Formular form.

Dann kommt der Code-Teil dran. Wir benötigen 3 API Funktionen, SetWindowRgn(), DeleteObject() und CreateEllipticRgn().

Hier der Deklarationsteil:

Private Declare Function SetWindowRgn _
                          Lib "user32" (ByVal hWnd As Long, _
                                        ByVal hRgn As Long, _
                                        ByVal bRedraw As Boolean) As Long

Private Declare Function DeleteObject Lib "gdi32" ( _
                                      ByVal hObject As Long) As Long

Private Declare Function CreateEllipticRgn Lib "gdi32.dll" ( _
                                           ByVal X1 As Long, _
                                           ByVal Y1 As Long, _
                                           ByVal X2 As Long, _
                                           ByVal Y2 As Long) As Long

Dim Region1 As Long

Dann im Ereignis “Beim Laden” wird die Form geändert. Die Koordinaten müsst ihr entsprechend anpassen, damit es bei euch passt.

Private Sub Form_Load()
    X1 = 29
    Y1 = 50
    X2 = 533
    Y2 = 552
    Me.Picture = CurrentProject.Path & "\hintergrund.gif"
    Region1 = CreateEllipticRgn(X1, Y1, X2, Y2)
    SetWindowRgn Me.hWnd, Region1, True
End Sub

Wenn das Formular entladen wird sollte auch die Form zurückgesetzt werden:

Private Sub Form_Unload(Cancel As Integer)
    DeleteObject Region1
End Sub

Hier noch ein Beispiel wie das ganze aussehen könnte:

Auf www.vbAchiv.net findet ihr zu den API-Funktinonen und zu weiteren Funktionen der GDI Erklärungen.
Ein komplexeres Beispiel als Download findet ihr auf access-o-mania

AV 2010

Kategorie: Formulardesign, VBA Code | Keine Kommentare »

Arbeiten mit ISO Passmaßen

Mittwoch 6. Januar 2010 von Andreas Vogt

Wenn Sie in Ihrer Anwendung ISO Passmaße nach ISO 286 benötigen, so findet man im Internet zahlreiche Excel-Tabellen die sämtliche Abmaße für Bohrung und Welle enthalten.
Ich bin für mein Projekt auf der Seite www.siritec.com fündig geworden. Siritec stellt das Programm “PMTabelle V4.0.1″ für Solid Edge kostenlos zur verfügung, dieser Download enthält u.a. die Excel-Datei PassMassTabelle.xls, auf deren Struktur der folgende Programmcode aufbaut. Die Excel Arbeitsmappe enthält über 60 Arbeitsblätter, für jede Toleranzlage und Bohrung/Welle je eine Seite bei einem Nennmaß bis 500mm.

Der Aufbau im Einzelnen ist folgender:

  • Spalte 1: Nennmassbereich untere Grenze (ausschließend)
  • Spalte 2: Nennmassbereich obere Grenze (einschließend)
  • Spalte 3 bis 38: Toleranzgrade 1 bis 18, wobei jedes Toleranzfeld 2 Spalten umfasst, für die untere und für die obere Abmaße.
  • Zeile 2: Toleranzgrade
  • Zeile 3: Kennung untere Grenze/obere Grenze
  • Zeile 4-28 Toleranzen in µm

Was jetzt folgt ist die Excel Automation als late Binding, die ich nur in Ausschnitten zeigen und erleutern möchte.

Public UTG AS Double
Public OTG AS Double
...
Sub getPassMasse(istmass, Toleranzlage, Toleranzgrad)
    Dim ExcelApp AS Object
    Dim ws AS Long 'Worksheet - Zähler
    Dim tol AS long  'Toleranzen - Zähler
    Set ExcelApp = CreateObject("Excel.Application")
    ExcelApp.Workbooks.Open FileName:="c:\PassMassTabelle.xls", ReadOnly:=True
    With ExcelApp
        For ws = 1 To .Sheets.Count    'alle Arbeitsblätter durchsuchen
            If ExcelApp.Sheets(ws).Name = Toleranzlage Then
                For tol = 4 To 28
                    If istmass <= CDbl(ExcelApp.Sheets(ws).Cells(tol, 2)) And istmass > CDbl(ExcelApp.Sheets(ws).Cells(tol, 1)) Then
                        UTG = ExcelApp.Sheets(ws).Cells(tol, 2 * Val(Toleranzgrad) + 1)
                        OTG = ExcelApp.Sheets(ws).Cells(tol, 2 * Val(Toleranzgrad) + 2)
                        GoTo Ausstieg
                    End If
                Next tol
            End If
        Next ws
    End With

Ausstieg:
    Excel_Terminate
End Sub

Zuerst wird das Excel Objekt instanziert und die Arbeitsmappe PassMassTabelle.xls geöffnet.
In der äußeren Schleife werden alle 69 Arbeitsblätter durchsucht nach dem, welches der entsprechenden Toleranzlage entspricht. Ist das Abeitsblatt gefunden werden in einer inneren Schleife die Zeilen 4 bis 28 durchlaufen, und nach dem Nennmassbereich gesucht, in diesen das Istmass gehört. Ist der richtige Bereich gefunden werden die Toleranzen ausgelesen. die richtigen Zellen findet man über den Toleranzgrad. Beispielsweise ergibt Toleranzgrad 7 die Zellen 15 und 16 der entsprechenden Zeile. So wird auf eine zusätzliche Schleife verzichtet. Sind die Toleranzen gefunden erfolgt der Ausstieg über eine Sprungmarke.
Was man bei der Excel Automation immer machen sollte ist eine Prüfung ob Excel schon geöffnet ist oder nicht, damit die Instanzierung des Excel Objektes auch funktioniert.
Die Funktion Excel_Terminate dient dazu, Excel zu schließen oder nur die Arbeitsmappe zu schließen, je nach dem ob beim Start Excel schon geöffent war.
Zu beidem gibts in den Newsgroups bzw. einschlägige Foren genug Beispiele.

UTG und OTG sind unteres und oberes Abmass in µm. das bedeutet, dass das Istmass du beiden hinzuzuaddieren ist, um die Toleranzgrenzen zu erhalten.

Zur Auswahl einer Passung kann man sich z.B. ein kleines Popup-Formular erstellen, das beim schließen die gefundenen Toleranzgrenzen in das Eingabeformular eintragen. Nachfolgend noch ein paar Screenshots wie das aussehen könnte.

AV 2010

Kategorie: VBA Code | Keine Kommentare »

Plausibilitätsprüfung von Messwerten

Dienstag 6. Oktober 2009 von Andreas Vogt

Bei der manuellen Messwerterfassung hat man immer die Unsicherheit des Faktors “Mensch” zu berücksichtigen. Zahlendreher oder zuviele Nullen sind da schnell mal eingegeben, und im Nachhinein schwer zu finden. Da ist es besser man macht eine Plausibilitätsprüfung indem man das Formular ungebunden macht und bei klick auf den Speicherbutton die Eingabewerte überprüft.

Z.B. auf die Anzahl der Stellen, ob positiv oder negativ, ob größer oder kleiner von einem bestimmten Wert, oder ob in einem bestimmten Zahlenbereich liegend.

Das Problem daran ist, dass sich diese Begrenzungen ständig ändern können. Dann muss man den VBA-Code durchsuchen wo man diese Plausibilitätsprüfung gemacht hat. Besser wäre das doch wenn man in einer Tabelle alle Plausibilitäten einfach ablegen könnte von wo aus sie einfach zu administrieren sind. Und genau das wollen wir jetzt machen.

Zuerst die Tabelle.
Jeder Messwert hat eine bestimmte Nummer oder Namen. Außerdem benötigen wird ein Vergleichsmuster, und eine Werteliste mit den einzelnen Werten gegen den der Messwert abgeprüft wird.

Ein Datensatz in dieser Tabelle sieht z.B. so aus:

ID Bezeichner Muster Werteliste
1 MP1 > {1} AND < = {2} AND <> {3} 2;5;4

Im Muster sieht man Platzhalter in geschweiften Klammern stehen, diese werden dann mit den Werten aus der Werteliste ergänzt.
Den ganzen Beitrag lesen »

Kategorie: VBA Code | Keine Kommentare »

XML Dokumente parsen

Mittwoch 2. September 2009 von Andreas Vogt

XML Dokumente sind hirachisch strukturierte Dokumente die aus einzelnen Knoten bestehen, in denen sich Informationen und weitere Unterknoten befinden können. Um dies zu verdeutlichen habe ich eine einfache Struktur erstellt, eine Bücherliste mit 3 Einträgen:

xml1

Um Informationen aus XML Dokumenten per VBA einzulesen bietet sich das DOM-XML an. Genaue Informationen zum DOM-XML findet man z.B. auf dieser MSDN-Seite: http://msdn.microsoft.com/de-de/library/aa468547.aspx

Um die benötigten Objekte zu erstellen benötigt man bei early-Binding einen Verweiss auf die XML Bibliothek. Dazu den Verweis Microsoft XML, v3.0 einbinden. Es gibt auch neuere Versionen dieser Bibliothek, doch die 3.0 genügt vollkommen für diese Zwecke und hat sich bewährt.

Danach kann man das benötigte Objekt deklarieren:
Dim objDomDoc As New DOMDocument

Um auf die Knoten zugreifen zu können benötigt man ein weiteres Objekt:
Dim objNode As IXMLDOMNode

Zuerst wird die XML-Datei geöffnet:

Dim FileName As String
Filename = "c:\test\myXMLFile.xml"
objDomDoc.async = False
objDomDoc.Load Filename

Dann das Objekt für den Wurzel-Knoten gesetzt:
Set objNode = objDomDoc.documentElement
Den ganzen Beitrag lesen »

Kategorie: VBA Code | Keine Kommentare »

SQL/Access Anwendertage

Freitag 17. Juli 2009 von Andreas Vogt

In Fulda finden vom 22. bis 24. November 2009 die SQL/Access Anwendertage statt.
Die Schwerpunkte liegen diesmal auf:

“Datenmanagement, Reporting und Analyse
Kompetenz für den professionellen Umgang mit SQL Server und Access”

Mit dabei ist auch MVP SQL-Profi Ruprecht Dröge, den die einen oder anderen vieleicht schon von den Microsoft Webcasts her kennen.
Teilnehmen lohnt sich wie immer bei den Anwendertagen, ich habe schon selbst an mehreren Veranstaltungen teilgenommen und rate es jedem der beruflich mit Access/SQL zu tun hat.

Anwendertage_SQL-Access

Link zum Anbieter: www.anwendertage.de/sql09

AV 2009

Kategorie: Events und Trainings | Keine Kommentare »

Grundlagen des Fehlermanagements

Freitag 17. Juli 2009 von Andreas Vogt

Fehlermanagement im VBA-Code ist keine lästige Pflichtübung für den Entwickler, sondern essentiell wichtig für eine funktionierende Access-Anwendung und liefert wichtige Informationen zur Korrektur und Optimierung von VBA-Code.

Softwarefehler
Befassen wir uns erst mal mit dem Begriff des Fehlers. Wie üblich gibts in Deutschland auch dafür eine allgemeine Norm: Nach DIN EN ISO 8402 ist ein Fehler gleichzusetzen mit der Nichterfüllung einer festgelegten Forderung. Man könnte einen Fehler auch als eine Nicht-Konformität bezeichnen.

Und da fängt es an spannend zu werden. Forderungen können z.B. vom Kunden in Form von Lastenheften existieren. Das wäre auch der Idealfall, da dann die Forderungen exakt umrissen sind und der Entwickler zielgerichtet diese erfüllen kann. Was aber wenn kein Lastenheft existiert? Das ist ein Dilemma in das sich dann jeder Entwickler begibt. Er bekommt dann meist scheibchenweise die benötigten Informationen, mal als Email oder per Post und im schlechtesten Fall mündlich per Telefon oder in einem Gespräch mitgeteilt. Da heißt es dann nur: “wer schreibt der bleibt”, also mitprotokollieren und am besten vom Gesprächspartner gegenzeichnen lassen.

Auftretende Fehler bei der VBA Programmierung lassen sich grob in 5 Kategorien einteilen:

  • Fehlerhafter VBA-Code, z.b. ein Überlauf durch falschen Variablentyp
  • Fehlerhafte Interaktion des Benutzers, z.B. fehlende oder fehlerhafte Eingabe
  • Fehler durch Wechselwirkung mit der Hardware, z.B. defekte Speicherbausteine
  • Fehler durch Wechselwirkung mit Software, z.B. Virenscanner, Firewall etc.
  • Und zuletzt noch Fehler durch Versionsänderung benuzter Komponenten, z.B. ActiveX Komponenten

Den ganzen Beitrag lesen »

Kategorie: Datenbankdesign, Software | Keine Kommentare »

prio.conference – die Konzeptkonferenz für .NET-Entwickler

Donnerstag 16. Juli 2009 von Andreas Vogt

Am 28. – 29. Oktober 2009 findet die diesjährige prio.conference mit Schwerpunkt User Interface in München statt.

Vor wenigen Jahren durfte ich mich selbst von der Qualität der Vorträge überzeugen während der prio in BadenBaden. Ein Muss für jeden .NET Entwickler.

Auszug aus der Beschreibung des Veranstalters:

Die Konzeptkonferenz für .NET-Entwickler der

dotnetpro

Thema: User Interface

Architektur. Technologie. Design.

28. – 29. Oktober 2009 in München

Selbst das beste Programm wird zum Alptraum, wenn Oberfläche und Bedienung nicht passen. Unergonomisch aufgebaut, unintuitive Bedienung oder schlicht Fehler in der Architektur machen aus einer hilfreichen Software die absolute Katastrophe.

Dem will die prio.conference 2009 Einhalt gebieten. In rund 30 Sessions erfahren Sie, worauf bei der technischen Architektur und dem Design der Oberfläche zu achten ist. Lernen Sie, welche Technologien sich für welchen Einsatzzweck anbieten. Muss es beispielsweise unbedingt ASP.NET sein, wenn ein Programm über das Web bedient wird, oder kann auch eine WPF-Anwendung die Bedienung sogar noch vereinfachen?

Kommen Sie vom 28. – 29. Oktober 2009 in das Marriott Hotel nach München und holen Sie sich Expertenwissen aus erster Hand, damit Ihre Software künftig noch besser bedienbar ist. Denn nicht vergessen: Programmierer schreiben Programme in den meisten Fällen für Menschen. Und die sollten mit Ihrer Software auch umgehen können.

Link zur Seite: www.prioconference.de

AV 2009

Kategorie: Events und Trainings | Keine Kommentare »

OpenSQL Camp auf der FrOSCon 2009

Mittwoch 8. Juli 2009 von Andreas Vogt

Während der FrOSCon 2009, eine zweitägige Konferenz rund um die Themen Freie Software und Open Source, findet in St. Augustin nahe Bonn eine zweitägige Subkonferenz zum Thema Open-Source Datenbanken und verwandte Technologien statt.

Informieren könnt ihr euch auf dieser Seite:www.froscon.de/…

AV 2009

Kategorie: Events und Trainings | Keine Kommentare »

Office 2010 – kein Undo, kein Return

Samstag 16. Mai 2009 von Andreas Vogt

Jetzt ist es durchsgesickert, Office 2010 wird eine Sparversion.
Es gibt kein Undo mehr, Return soll auch nicht mehr funktionieren, und das Schlimmste: Es gibt keine Controls mehr.

Wie – glaubt ihr nicht? Ihr glaubt ich veräppel euch?

Na dann seht doch mal selbst im aktuellen Trailer zu Office 2010:
http://www.office2010themovie.com/

Ich hatte doch recht oder?
AV 2009

Kategorie: Allgemein | Keine Kommentare »

Update für Microsoft Visual Basic 6.0 SP6

Donnerstag 7. Mai 2009 von Andreas Vogt

Microsoft stellt ein kummulatives Update für Anwender von Visual Basic 6 Service Pack 6 zur Verfügung. Dieses Update schließt eine Sicherheitslücke im besagten Service Pack.

Angreifer könnten Windows basierte Systeme attackieren und die Sicherheit gefährden und sogar die komplette Kontrolle über den Rechner erlangen. Dieses Update trägt zum Schutz vor solchen Angriffen bei.

Link zum Update: http://www.microsoft.com/downloads/details…
Quelle: Microsoft.com

AV 2009

Kategorie: Allgemein | Keine Kommentare »

Cloud-Computing-Lösungen von Microsoft ab sofort verfügbar

Dienstag 28. April 2009 von Andreas Vogt

Wie aus einer Pressemitteilung vor wenigen Tagen zu erfahren war, sind die neuen Cloud-Computing-Anwendungen nun verfügbar. Firmenkunden haben ab sofort die Möglichkeit, Microsoft-Produkte wie Microsoft Office Sharepoint Server oder Microsoft Exchange Server auch als Online-Version zu nutzen für einen monatlichen Beitrag pro Anwender.

Es gibt verschiedene Dienste und Pakete wie z.B.:

  • Microsoft Exchange Online (inklusive Exchange Hosted Filtering und ForeFront for Exchange) ist ein Messaging-Dienst, der auf dem Microsoft Exchange Server 2007 basiert.
  • Microsoft SharePoint Online (inklusive ForeFront for SharePoint), ein Dienst, der dem Anwender eine hoch integrierte, virtuelle Umgebung für die unternehmensweite Zusammenarbeit bereitstellt.
  • Microsoft Office Communications Online ist ein Dienst, der eine sichere Kommunikation über ein textbasiertes Instant Messaging bereitstellt.
  • Microsoft Office Live Meeting, erlaubt Anwendern mit Kollegen und Kunden Webkonferenzen, Trainings und Online-Events abzuhalten.

Weitere Informationen über die Microsoft Online Services können hier abgerufen werden:
www.microsoft.de/online

Quelle: Microsoft Presseservice

AV 2009

Kategorie: Allgemein | Keine Kommentare »

Reguläre Ausdrücke verwenden

Montag 20. April 2009 von Andreas Vogt

Mal angenommen Sie wollen Eingaben in einem ungebundenem Formular auf ihre Richtigkeit prüfen. Eine geläufige Vorgehensweise wäre z.B. den Feldinhalt gegen Null zu prüfen, oder die Länge auf eine bestimmte Mindestanzahl an Zeichen. Das ist alles aber ziemlich ungenau und lässt meist großen Spielraum bei der Falscheingabe.

Eine alternative Möglichkeit ist es sogenannte Reguläre Ausdrücke (Regexp, regular expressions) zu verwenden, welche in vielen Entwicklungssprachen und vorallem in Scriptsprachen wie PHP bekannt sind.

Reguläre Ausdrücke bestehen aus einem Muster, das in Begrenzer eingeschlossen wird, sowie aus verschiedenen Schaltern, den Modifizierern. In VB/VBA wurde allerdings auf die Begrenzer verzichtet, und die Modifizierer sind aus der Zeichenkette – welche dem regulären Ausdruck entspricht – ausgegliedert als Eigenschaft des entsprechenden Objektes.

Wagen wir mal einen Blick über den Tellerand hinüber zur Scriptsprache PHP und definieren wir mal einen regulären Ausdruck:

$pattern = “/^([A-Z]{1,2})?(-| )?([0-9]{5})$/”;

In diesem Muster sind so gut wie alle Techniken von regulären Ausdrücken enthalten, dass nicht kundige schon ins grübeln kommen. Mir ging das nicht anderst. Im obigen Beispiel wollen eine Eingabe einer Postleitzahl auf Ihre Richtigkeit überprüfen. Die Postleitzahl könnte z.B. so aussehen: D-80807 oder D80807 oder nur 80807.
Den ganzen Beitrag lesen »

Kategorie: VBA Code, Visual Basic | 7 Kommentare »

SP2 für Office 2007 in kürze verfügbar

Samstag 18. April 2009 von Andreas Vogt

Im Blog von Office Sustained Engineering ist zu lesen, dass für den 28. April 2009 – also in 10 Tagen – das Update SP2 für Office 2007 verfügbar sein wird.

Dazu die wichtigsten Änderungen im Überblick:

  • Service Pack 2 ermöglicht es, Dokumente im OpenDocument-Format Version 1.1 für Word, Excel, und PowerPoint zu bearbeiten und zu speichern. Es ist also damit möglich Dokumente im Dateityp .ods (OpenDocument Spreadsheet) bzw. .odp (OpenDocument Presentations) zu speichern.
  • Es wird erstmals ein separates Tool geben um diesen Service Pack zu deinstallieren. Das Tool wird ebenfalls als Download wohl ab dem 28. April zur Verfügung stehen. Eine wichtige Neuerung, da bislang das komplette Office deinstalliert und anschließend das Office Paket neu installiert werden musste um ein Service Pack zu entfernen.
  • Ebenfalls eine nützliche und längst überfällige Neuerung ist die eingebaute Funktion “Save AS PDF”, womit man ein Dokument einfach als PDF oder XPS Datei exportieren kann. Bislang musste man dafür ein zusätzliches AddIn herunterladen und installieren.

Viele die noch die Probleme beim SP3 von Office 2003 vor Augen haben fragen sich jetzt vieleicht ob sie das Service Pack sofort installieren sollen. Ich empfehle nach Veröffentlichung des Service Pack erst mal zu Prüfen ob auch gleich am selben Tag das Removal-Tool verfügbar ist. Aber auch dann würde ich eher ein paar Tage abwarten und mal intensiv die Office-Foren bzw. die Newsgroups nach Problemen bei diesem Service Pack zu durchsuchen. Aber letzlich dient SP2 auch der Sicherheit da auch einige Bugs gefixt wurden und früher oder später sollte man es installieren.

AV 2009

Update:
Der Link zum Download des Service Pack 2 ist wie folgt:
http://www.microsoft.com/downloads/details…

Kategorie: Software | Keine Kommentare »

Access Systemobjekte

Donnerstag 16. April 2009 von Andreas Vogt

Haben Sie sich auch schon mal gefragt wo Access die ganzen Informationen über die vorhandenen Objekte, also Tabellen, Formulare, Abfragen, Beziehungen, Module etc., speichert? Access legt zu diesem Zweck bereits zum Zeitpunkt, wo eine neue Datenbankdatei erstellt wird, mehrere Systemtabellen an, die aber ausgeblendet sind. Darin werden die verschiedensten Access Internas gespeichert, wie die Systemobjekte, Abfragen, Makros oder Informationen über die referentielle Integrität. Diese Angaben sind nicht dokumentiert und top secret. Microsoft will sich da nicht in die Karten schauen lassen, da dies einiges an verstecktem Know How darstellt. In diesem Bericht kratzen wir auch nur wenig an der Oberfläche.

Um die Systemtabellen sichtbar zu machen, gehen Sie im Menü Extras auf Optionen und dann auf das Registerblatt Allgemein. In der Gruppe Anzeigen können Sie dann die Option “Systemobjekte” auswählen und mit OK bestätigen.

Unter Access 2007 findet man diese Option wie folgt:
Klick auf Office-Button, dann unter:
Access-Optionen => Aktuelle Datenbank => Bereich Navigation => Navigationsoptionen
Dort die Anzeigeoption “Systemobjekte anzeigen” markieren und 2x mit OK bestätigen.

Jetzt werden mehrere Systemtabellen angezeigt. Man erkennt diese daran dass alle mit “MSys” beginnen. Interessant für den Access Entwickler ist z.B. die Tabelle MSysObjects, in der sämtliche Systemobjekte aufgelistet sind.

Eines vorab: Verändert man die Systemtabellen kann man in den meisten Fällen die Datenbank hinterher wegschmeißen, also nicht darin rumspielen und bei geöffneter Systemtabelle niemals auf Aufforderung speichern, sondern immer Abbrechen!

Die Tabelle MSysObjects besitzt folgende Felder:

Feldname Felddatentyp
Connect Memo
Database Memo
DateCreate Datum/Uhrzeit
DateUpdate Datum/Uhrzeit
Flags Zahl
ForeignName Text
Id Zahl
Lv OLE-Objekt
LvExtra OLE-Objekt
LvModule OLE-Objekt
LvProp OLE-Objekt
Name Text
Owner Binär
ParentID Zahl
RmtInfoLong OLE-Objekt
RmtInfoShort Binär
Type Zahl

Den ganzen Beitrag lesen »

Kategorie: Datenbankdesign | Keine Kommentare »

Anzahl Urlaubstage berechnen

Sonntag 29. März 2009 von Andreas Vogt

Angenommen sie arbeiten in einer Personalabteilung. Bei Ihnen landen fast täglich Urlaubsanträge mit den Angaben Urlaubsbeginn, Urlaubsende, AnzahlTage. Soweit ja easy, aber leider sind über 10% der Anträge ohne die Angabe der Anzahl Urlaubstage. Sie holen den großen Kalender raus, zählen die Werktage, dann den zweiten Kalender mit den Feiertagen raus holen und prüfen ob ein Feiertag dazwischen liegt usw.

Die Lösung: Der Urlaubstage-Rechner.

Man sehe sich erst mal nachfolgenden VBA-Code an, der in einem Modul steht:

Public Function urlaubstage(Startdatum As Date, Enddatum As Date) As Long
    Dim i As Integer
    Dim tempDate As Date

    If Not IsDate(Startdatum) Or Not IsDate(Enddatum) Then
        MsgBox "Bitte gültiges Startdatum und Enddatum eingeben", vbExclamation + vbOKOnly
        Exit Function
    End If

    If DateDiff("d", Startdatum, Enddatum) < 0 Then
        MsgBox "Das Enddatum muss nach dem Startdatum liegen!", vbExclamation + vbOKOnly
        Exit Function
    End If

    For i = 0 To DateDiff("d", Startdatum, Enddatum)
        tempDate = DateAdd("d", i, Startdatum)
        If Weekday(tempDate) <> 1 And Weekday(tempDate) <> 7 Then
            'tempDate ist kein Wochenende
            If Not istFeiertag(tempDate) Then
                'tempDate ist kein Feiertag
                urlaubstage = urlaubstage + 1
            End If
        End If
    Next i
End Function

Den ganzen Beitrag lesen »

Kategorie: VBA Code | Keine Kommentare »

Startformular mit “Countdown” Schaltfläche

Mittwoch 18. März 2009 von Andreas Vogt

Ein Startbildschirm kann verschiedenste Aufgaben erfüllen. Z.B. den Anwender begrüßen oder über Neuigkeiten informieren. Ein weiterer Aspekt ist den Start der eigentlichen Anwendung bewusst zu verzögern um eine Art Barriere aufzubauen. Dies könnte man z.B. dafür Nutzen eine eingeschränkte Anwendung zu erstellen, um die Anwender zu drängen eine entsprechende Lizenz zu kaufen.

Dies zu realisieren ist sogar ziemlich einfach. Man erstelle ein Formular mit einer deaktivierten Befehlsschaltfläche die im Klick-Ereignis das Anwendungs-Formular öffnet. Im Formularmodul dann dieser Code:

Option Compare Database
Option Explicit

Dim Startintervall As Integer

Private Sub cmdApp_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "Anwendungsform"
End Sub

Private Sub Form_Timer()
    If Startintervall <= 10 Then
        Me.TimerInterval = 1000
        Me!cmdApp.Caption = 10 - Startintervall
        Startintervall = Startintervall + 1
    Else
        Me.TimerInterval = 0
        Me!cmdApp.Caption = "Anwendung starten"
        Me!cmdApp.Enabled = True
    End If
End Sub

Den ganzen Beitrag lesen »

Kategorie: Formulardesign, VBA Code | 2 Kommentare »

Microsoft Cloud Computing

Freitag 13. März 2009 von Andreas Vogt

Microsoft präsentierte ihre nicht ganz neuen Pläne für das Cloud Computing auf der letzten Cebit.
Microsoft Cloud Computing bedeutet – um es auf den Punkt zu bringen – dass Daten nicht mehr auf lokalen Datenspeichern wie z.B. Festsplattenlaufwerke gespeichert werden, sondern dass diese in riesigen Rechenzentren von Microsoft gespeichert werden und über Browser weltweit und jederzeit abrufbar sind, sogar über Mobilte Geräte. Der Begriff leitet sich von Cloud = Wolke ab, da in der Modellvorstellung die Daten wie eine Wolke über uns schweben und wir nur noch danach greifen müssen.

Man kann auch davon ausgehen denke ich, dass dann auch Business Anwendungen wie Word, Excel, Outlook und Powerpoint online verfügbar sein werden. Vorbei dann die Zeiten wo man nach einem Kundenbesuch noch lange im Büro saß und die Daten vom Notebook ins Firmennetz übertrug.

Fiktion? Wohl alles eine Frage der Nachfrage, denn machbar ist das allemal. Die Arbeitswelt wird sich den Spielregeln der globalen Welt unterordnen müssen und dabei nach praktikablen Lösungen und Werkzeugen suchen. Dieser Trend ist ja schon einige Jahre zu beobachten.

Und dass Microsoft das ernst meint zeigt ja schon die jüngste Vorstellung des passenden Betriebssystem Windows Azure für das Cloud Computing sowie das Vorhaben in den nächsten Jahren zig Milliarden für 20 neue Rechenzentren auszugeben.

Eigentlich können wir uns jetzt nicht beschweren, das haben wir doch schon lange gewollt – oder?

Diskutieren Sie mit und sagen Sie uns Ihre Meinung zu diesem Thema!

AV 2009

Kategorie: Allgemein | Keine Kommentare »

Office 14 erst 2010

Freitag 13. März 2009 von Andreas Vogt

Microsoft Mitarbeiter Antoine Leblond hat kürzlich der CNET News ein Interview gegeben, wo er Details zur nächsten Office-Version preisgab.
Demnach wird Office 14 (man bemerke auch Microsoft ist abergläubisch) erst 2010 verfügbar sein, und nicht schon Ende 2009. Diese Version wird das OpenDocument Format unterstützen, welches bei Office 2007 mit dem nächsten Service-Pack ebenfalls unterstützt wird.

Einige Neuerungen die Office 14 mit sich bringen wird:

  • Office Web Applications, d.h. die Anwendungen Excel, Word, PowerPoint und OneNote werden dann in einem Browser ausgeführt.
  • Aktualisierte Office Anwendungen für Windows Mobile
  • Verbesserte Unterstützung bei Mobilen Geräten wie z.B. beim IPhone

Insgesamt gehe der Trend hin zum mobilen Arbeiten auf kleinen, vernetzten Geräten. Microsoft arbeitet noch daran wie diese Unterstützung der Mobil Devices letztlich im Detail aussehen wird. Aber sicher ist dass dieser Trend voll auf die Bedürfnisse des großen Heers an Büroarbeiter und Selbstständigen abzielt, und immer weniger auf die Bedürfnisse der Anwendungsentwickler.

Das komplette Interview mit Video ist hier einsehbar: CNET Artikel

Office 14 wird dann nächstes Jahr als Office 2010 in den Regalen stehen.

AV 2009

Kategorie: Allgemein, Software | Keine Kommentare »




Linktip: Tourenfahrer Mittelbaden/Südbaden