Office 2010 Update

By , 21. April 2011

Microsoft veröffentlichte jüngst den Fahrplan für das Service Pack 1 für Microsoft Office 2010. Wie das Unternehmen im Office Sustained Engineering Blog bekanntgab, wird gegen Mitte des Sommers 2011 das SP1 für Microsoft Office 2010 erwartet.
Das ersten Service Pack für Office 2010 wird wie üblich alle bisherigen veröffentlichten Updates beinhalten. Es werden nur wenige neue Updates mit dem Service Pack mitgeliefert.
Anwender die alle Updates immer fleisig installiert haben, benötigen nach Angabe im Blog das ServicePack gar nicht, worauf ich mich aber nicht verlassen würde.

Da die Access-Gemeinde mit Updates, die nicht so laufen wie gedacht, leidlich geprüft sind, ist vor Installation eine gesunde Vorsicht angebracht – was nicht heißen soll das Service Pack sollte nicht installiert werden, ganz im Gegenteil.
Ich für meinen Teil werde nach Erscheinen erst mal die einschlägigen Foren und Newsgroups absuchen nach Beiträgen die von Problemen mit dem Service Pack berichten.

Bis dahin
Andreas Vogt ©2011

Formatierte Hilfeseiten erstellen

By , 16. April 2011

Es mag oft eine lästige Arbeit sein am Ende eines Projektes oder mitten drin ein Hilfesystem zu implementieren.
Für einfache Anwendungen genügt auch meist 1 Hilfeseite pro Formular. Ich bin dabei auf eine verblüffend einfache Methode gestoßen:
Man erstelle ein neues Formular, und plaziere darauf genau 1 Steuerelement, nämlich das ActiveX Webbrowser Control. Vor dem Speichern des Formulares das Steuerelement in die Ausgangsgröße positionieren, weil spätere Änderungen nicht möglich sind. Am besten man wähle ein möglichst großes Format, das aber noch auf allen Bildschirmen im ganzen sichtbar sind.
Der Name des Controls sei jetzt „Webbrowser1″.

Die weitere Vorgehensweise ist die folgende:
1. Man erstellt man die gewünschte Hilfeseite mit einem HTML-Editor seiner Wahl.
2. Kopiert den Quelltext und überträgt diesen in das Formularmodul in eine neue Prozedur.
3. Der eingefügte HTML-Quelltext wird bearbeitet, alle Anführungszeichen müssen ersetzt werden (Copy/Paste) durch die folgende Zeichenfolge: “ & chr(34) & “
4. Jede einzelne Zeile wird wie folgt eingeschlossen: Print #1, „Hier kommt die Quelltextzeile“

Ich verwende für die einzelne Hilfeseiten Prozeduren die fortlaufend nummeriert sind, also z.B. Public Sub help1():

Public Sub help1()
Open CurrentProject.Path & "/index.html" For Output As #1
Print #1, "<!DOCTYPE html PUBLIC " & Chr(34) & "-//W3C//DTD XHTML 1.0 Transitional//EN" & Chr(34) & " " & Chr(34) & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" & Chr(34) & ">"
Print #1, "<html xmlns=" & Chr(34) & "http://www.w3.org/1999/xhtml" & Chr(34) & ">"
Print #1, "<head>"
Print #1, "<style type=" & Chr(34) & "text/css" & Chr(34) & ">"
Print #1, "    body{background:#fff;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;font-style:normal;font-weight:400;margin:5;width:95%}"
Print #1, "    dl{margin-top:0;padding-left:1px}"
Print #1, "    dd p{margin-left:0;margin-top:0;padding-right:20px}"
Print #1, "</style>"
Print #1, "Verbindung mit Server herstellen (Datenbankmodul)"
Print #1, "<title>Verbindung mit Server herstellen (Datenbankmodul)"
Print #1, "</head>"
Print #1, "<body>"
Print #1, "<div style=" & Chr(34) & "margin:5px;width:100%" & Chr(34) & ">"
Print #1, "<div style=" & Chr(34) & "margin-bottom: 20px" & Chr(34) & "><b><font size=" & Chr(34) & "+1" & Chr(34) & ">Verbindung mit Server herstellen (Datenbankmodul)</font></b></div>"Print #1, "<div><p>Verwenden Sie dieses Dialogfeld, um Optionen für Verbindungen zu Computern mit MicrosoftSQL Server Database Engine (Datenbankmodul) anzuzeigen oder anzugeben. In den meisten Fällen können Sie eine Verbindung herstellen, indem Sie im Feld <b>Servername</b> den Computernamen des Datenbankservers eingeben, und dann auf <b>Verbinden</b> klicken. Verwenden Sie beim Herstellen der Verbindung mit SQL Server Express den Computernamen gefolgt von <b>\sqlexpress</b>.</p><p>Viele Faktoren können Auswirkungen auf die Möglichkeit zum Herstellen der Verbindung mit SQL Server haben. Ein kurzes Lernprogramm zum Herstellen der Verbindung mit SQL Server finden Sie unter <span><a id=" & Chr(34) & "ctl00_MainContent_ctl01" & Chr(34) & " href=" & Chr(34) & "http://....." & Chr(34) & " onclick=" & Chr(34) & "javascript:Track('ctl00_MainContent_ctl00|ctl00_MainContent_ctl01',this);" & Chr(34) & ">Lernprogramm: Erste Schritte mit dem Datenbankmodul</a></span>.</p></div>"
Print #1, "<span>"
Print #1, "<div><b><font size=" & Chr(34) & "2" & Chr(34) & ">Optionen:</font></b></div>"
Print #1, "<div style=" & Chr(34) & "display:block;" & Chr(34) & " >"
...... usw.
Print #1, "</body>"
Print #1, "</html>"
Close #1
Me!WebBrowser1.Navigate CurrentProject.Path & "/index.html"
End Sub

Read more »

Tips & Tricks zu Gespeicherte Prozeduren in Access

By , 9. April 2011

Im zweiten Artikel in dieser Serien ging es darum wie man Gespeicherte Prozeduren in Access aufrufen kann, welche Parameter wie übergeben werden, und wie man gleichartige Gespeicherte Prozeduren mit einem universellen VBA-Prozedur aufruft. In diesem dritten und vorerst letzten Teil geht es nur noch um Feinheiten und Vereinfachungen.

Beispielsweise kann man für Gespeicherte Prozeduren die genau einen Rückgabewert liefern, eine universelle Prozedur schreiben.
Eine solche Prozedur in Access benötigt auf jedenfall ID-Feld und ID-Wert, welche beide zusammen das Abfragekriterium bilden.
Ist die Gespeicherte Prozedur universell gehalten (siehe 4. Codelisting im zweiten Teil der Serie), wird zusätzlich der Tabellennamen benötigt.
Bzw. bei einer speziell gehaltenen Gespeicherten Prozedur wird der Name der Gespeicherten Prozedur benötigt.

Ich verwende für letztere Zwecke die nachfolgende VBA-Prozedur:

Public Function singleProc(idWert As Double, idFeld As String, outputFeld As String, strProcname As String) As Variant
    ConnectionString = "Driver={SQL Server};Server=?;Database=?;Uid=?;Pwd=?;"
    Set cnn = OpenConnection(ConnectionString)
    Set cmdObj = New ADODB.Command
    With cmdObj
        .ActiveConnection = cnn
        .CommandText = strProcname
        .CommandType = adCmdStoredProc
        .CommandTimeout = 60
        .Parameters.Refresh
        .Parameters("@" & idFeld) = idWert
        .Execute
        singleProc = .Parameters("@" & outputFeld).Value
    End With
    Set cmdObj = Nothing
    Set cnn = Nothing
End Function

Damit kann jede gespeicherte Prozedur aufgerufen werden die genau 1 Inputvariable und genau 1 Outputvariable verlangt.
Der Namen beider Variablen können Variieren, sie werden ja als idFeld und outputFeld übergeben.
Read more »

Gespeicherte Prozeduren in Access aufrufen

By , 8. April 2011

Im ersten Teil der Serie „Gespeicherte Prozeduren“ ging es darum wie im SQL Management Studio von Microsoft gespeicherte Prozeduren angelegt werden können. Es wurden zwei verschiedene Möglichkeiten einen SQL-String auszuführen erörtert, sowie zwischen „Getter“ und „Setter“ Prozeduren unterschieden. In diesem zweiten Teil geht es nun darum wie man diese Gespeicherten Prozeduren (SP für Stored Procedures) in Access nutzen kann um ausgewählte Daten zu erhalten bzw. um Daten in der SQL Server Datenbank zu speichern.

Ich erstelle zu diesem Zweck immer ein separates Modul mdlStoredProcedures worin ich verschiedene Prozeduren erstelle, je nach Anwendungszweck.
Ich unterscheide dabei zwischen Universellen Prozeduren und Speziellen Prozeduren.

Universelle Prozeduren bedienen immer mehrere gleichartige Gespeicherte Prozeduren im SQL Server. Beispiel dazu sind z.B. Prozeduren wo ein Status geändert wird. Nachfolgend als Generelles Beispiel für eine Setter-Prozedur in Access:

Deklarationsteil:

Dim cmdObj As ADODB.Command
Dim cnn As ADODB.Connection
Dim ConnectionString As String

Prozedur:

Public Function setStatus1(idWert As String, Prozedurname As String, Status As Long) As Boolean
    ConnectionString = "Driver={SQL Server};Server=?;Database=?;Uid=?????;Pwd=?;"
    Set cnn = OpenConnection(ConnectionString)
    Set cmdObj = New ADODB.Command
    With cmdObj
        .ActiveConnection = cnn
        .CommandType = adCmdStoredProc
        .Parameters.Append .CreateParameter("@indent", adVarChar, adParamInput, 10, idWert)
        .Parameters.Append .CreateParameter("@status", adVarChar, adParamInput, 2, CStr(Status))
        .CommandText = Prozedurname
        .Execute
    End With
    Set cmdObj = Nothing
    Set cnn = Nothing
End Function

Der Prozedurname wird als Parameter übergeben und der Eigenschaft CommandText des ADODB Objektes zugewiesen.
An dieser Stelle sei erwähnt, dass wir mit ADO arbeiten, und daher den Verweis „Microsoft ActiveX Data Objects 2.1 Library“ benötigen.
Die Übergabeparameter müssen in der richtigen Reihenfolge stehen wie in der SP definiert. Die Parameter der Funktion CreateParameter() sind folgende:
Parametername, Datentyp, Input/Output-Typ, Zeichenlänge, Wert
Read more »

Gespeicherte Prozeduren im MS SQL Server

By , 2. April 2011

Wer seine Access-Anwendung auf ein MS SQL Server (Express) umstellt, also migriert, stellt sich irgendwann sicherlich die Frage wie man die Performance von Abfragen erhöhen kann. Nach dem man die Abfragen optimiert hat –
Siehe z.B. Script zur 8. AEK: http://www.donkarl.com/AEK/AEK_Downloads.htm
– und sich immer noch nicht die gewünschte kurze Laufzeit von Abfragen einstellt, dann helfen zumeist sogenannte gespeicherte Prozeduren die man im SQL Server Management Studio von Microsoft anlegen kann.

Ich möchte diese nur kurz vorstellen anhand von 2 Beispielen, eines wo ein oder mehrere Feldwerte geändert werden (Setter-Funktion), und eine wo eine wo ein oder mehrere Feldwerte ausgelesen werden (Getter-Funktion).

gespeicherte Prozedur zur Änderung eines Feldwertes

Bild 1, gespeicherte Prozedur zur Änderung eines Feldwertes

Zu übergebende Parameter sind „ident“ und „Status“. Die Reihenfolge dieser Parameter ist später beim Aufruf der Gespeicherten Prozedur (engl. Kurzform = SP) von Bedeutung.
In der Prozedur lassen sich auch lokale Variablen deklarieren, wie z.B. sql als Platzhalter für den SQL-String.
Read more »

OfficeFolders theme by Themocracy