Archive for April, 2006

Wie man den Status von HTML Forms mit php abfragt zeigt folgendes Beispiel:

Checkbox

HTML:


<input type="checkbox" onclick="do();" name="chkTest" />

php:

// get checkbox status
if (array_key_exists('chkTest', $_POST) && $_POST['chkTest'] != null):
$value = 1;
else:
$value = 0;
endif;

Radiobutton

HTML:


<input type="radio" onclick="do();" value="1" name="radTest" />
<input type="radio" onclick="do();" value="2" name="radTest" />
<input type="radio" onclick="do();" value="3" name="radTest" />

php:

// get checkbox status
if (array_key_exists('radTest', $_POST) && $_POST['radTest'] != null):
$value = $_POST['radTest'];
endif;

Mercedes-Benz Stern

Wie ist eigentlich der Mercedes-Stern (oder auch “Dreizack”) entstanden?

Das Logo, das in drei verschiedene Himmelsrichtungen zeigt, symbolisiert die Idee von Gottfied Daimler, Motorisierungen für Fahrzeuge auf dem Wasser, zu Lande und in der Luft herzustellen; der Überlieferung zufolge malte er den “Dreizackstern” erstmals auf eine an seine Familie gerichtete Postkarte mit dem Zusatz “und dieser Stern wird einmal segenreich über meinem Werke stehen”.

[Quelle: Markenlexikon]

Geogen ist ein interessantes Projekt (von Christoph Stöpel), dass die Verteilung der Familiennamen in Deutschland anhand der Telefonanschlüsse kartiert.

Geogen steht für “geographische Genealogie”, was so viel bedeutet wie ortsbezogene Ahnenforschung. Auf dieser Seite können Sie Landkarten über die Verbreitung von Familiennamen in Deutschland erstellen lassen. Besonders auffällige Konzentrationen können auf den Ursprungsort des Namens oder der Familie hindeuten.

Danach gibt es meinen Familiennamen durchschnittlich häufig in Deutschland – vor allem in Bayern gibt es ein höheres Aufkommen, wie folgende Karte zeigt:

Geogen Familiennamenverteilung
Ist doch ein interessantes Projekt!

Nach dem heutigem Patch-Day (14 Luecken wurden geschlossen) kann ich ploetzlich nicht mehr meine verschluesselten Office-Dokumente oeffnen.

Nach einer kleinen Fehlersuche habe ich entdeckt, dass einige Kryptoprovider nach dem Update nicht mehr in der Liste auftauchen.
Unter Optionen (Menue) -> Sicherheit (Tab) -> Advanced (Button) befindet sich naemlich standardmaessig eine gut gefuellte Liste zur Auswahl der Verschluesselung. Diese hat sich nach dem Update stark verkleinert (auf nur noch 4 Eintraege). Beispielsweise fehlt der “strong encryption”-Provider. Betreffen wird das sicherlich alle Office-Produkte (Word, Excel, Access, Powerpoint, ..)
Fazit: Die Dokumente, die nicht mit einer Standard-Verschluesselung abgespeichert worden sind, koennen nun nicht mehr entschluesselt werden.

Hat jemand daselbe Problem festgestellt?

Ein Versuch, diesen (ich denke doch) Bug an Microsoft zu uebermitteln brachte folgendes Ergebnis:

Microsoft Feedback Error

Schade auch.

UPDATE:

Okay, Ursache und Loesung sind nun gefunden. Das Problem war nicht das Update, sondern eine Aufforderung zum Passwortwechseln der Domaene. Aus irgendeinem unerklaerlichen Grund wurde dieser Wechsel auf dem lokalen System nicht richtig vollzogen. Eine erneute Passwortaenderung hat das Problem nun behoben. Das Loeschen der Microsoft Office Verzeichnisse in lokale Einstellungen und Anwendungsdaten (unter Dokumente und Einstellungen) wuerde das Problem ebenfalls loesen.
Very strange.

Die SQL Server Integration Services erlauben das Zusammenfuehren von Daten aus heterogenen Datenquellen. Um den Ueberblick zu behalten wird der gesamte Datenfluss grafisch dargestellt und modelliert.

Das finde ich klasse, denn gerade wenn man ein Projekt an eine weitere Person uebergeben muss oder selbst an mehreren Projekten arbeitet, behaelt man durch diese kleine Hilfe den Ueberblick besser.

SQL Server Integration Services

An manchen Stellen wird es trotzdem notwendig sein, Programmierfaehigkeiten mitzubringen. Dazu kann dann die Scriptkomponente benutzt werden. Mit folgendem Script kann man auf die Datenquellen in seinem Projekt zugreifen. Aber Achtung es muss eine OLEDB-Verbindung definiert werden!


' initialize connection
Me.myConnection = DirectCast(Dts.Connections("SERVER.Database.root.ADO").AcquireConnection(Dts.Transaction), SqlClient.SqlConnection)
' -- open connection to database --
Try
If Not (myConnection.State.Open = ConnectionState.Open) Then
myConnection.Open()
End If
Catch ex As Exception
MsgBox("Could not open connection to DataBase: " & ex.Message.ToString)
End Try
' -- define data tables --
Dim tblTabelle As New Data.DataTable
' -- define SQL-commands --
Dim cmdSQLTblTabelle As New SqlClient.SqlCommand
cmdSQLTblTabelle.CommandText = "SELECT * FROM tblTabelle;"
cmdSQLTblTabelle.Connection() = myConnection
' -- define DataAdapters --
Dim myDATblTabelle As SqlClient.SqlDataAdapter(cmdSQLTblTabelle)
' -- get data from tables --
myDATblTabelle.FillSchema(tblTabelle, SchemaType.Mapped)
myDATblTabelle.Fill(tblTabelle)
' generate InsertCommand automatically with Commandbuilder
Dim myCommandBuilder As New SqlClient.SqlCommandBuilder(myDATblTabelle)
' show rows of query
msgbox("rows: " & tblTabelle.Rows.Count)

Eben bin ich über einen kurzen Artikel (bei CW) über DRM gestolpert, wo überlegt wird ob DRM sinnvoll ist oder nicht:

Anlass war die Rede eines RealNetworks-Managers auf der Linuxworld in Boston. Er warnte, Linux werde als Medienplattform außen vor bleiben, falls es nicht ebenfalls auf DRM-Kurs einschwenke.

Georg Greve von der Free Software Foundation Europe (FSFE) sieht das ganz anders und glaubt eher, dass die Nutzer DRM überhaupt nicht wollen und gerade deswegen verstärkt auf Linux wechseln werden, wo es ihnen erspart bleibt.

Also meine Meinung ist, dass die Musik- und Filmindustrie am Ende mehr Einnahmen hätte, wenn sie die Preise für ihre Produkte senken würde. Denn dann würden viele Leute eher mal eine CD kaufen, als sie sich aus dem Netz zu “besorgen” oder gar nicht zu kaufen. Und die viele Negativpresse um die Kopierschutzmechanismen, die einfache Anwender verärgern und Brenn-Profis trotzdem nicht stören, hätte es gar nicht erst gegeben.
Eigentlich reguliert sich vieles von selbst – so auch die Medienpreise glaube ich. Das sollte man hier mal andenken, als wie mit komplizierten Methoden, Beschränkungen zu setzen..
Es wurden Gesetze und Strafen bestimmt – das sollte reichen. Jeder kann entscheiden, ob er ein Risiko eingeht. Aber dem ehrlichen Anwender werden mit DRM einfach nur die Fesseln angelegt und diese Entscheidung verwehrt.

Ein wichtiger Faktor im Tagesgeschäft ist die angemessene und nützliche Berichtserstattung. Oftmals gibt es gerade hier noch viel Optimierungspotential, einfach durch den Einsatz neuer Softwaretechnologien oder -produkte.
Hier kommt der SQL Server 2005 ins Spiel. Für mich ist er eine echte Benchmarkentwicklung aus dem Microsoft-Imperium.
Gerade wenn vorher viel Reporting über Excel-Sheets oder gar Datenbanken verteilt über Excel-Sheets Einsatz gefunden haben, ist der SQL Server eine gute Alternative.

Hat man das Ziel, einen Bericht zu erstellen, dann beginnt man zunächst mit der Anbindung der Datenquellen. MSSQL bietet dazu viele Möglichkeiten (beispielsweise OLEDB, ODBC, Flat Files, Excel Sheets, CSV Files). Greift man auf Daten aus heterogenen Datenquellen zurück, finden die sog. Integration Services ihren Einsatz. Ein großartiges Tool, da zahlreiche Elemente zur Vefügung stehen, um auch sehr verwüstete Files in den Data-Flow einzubinden.
Hat man die Daten in der Datenbank bietet MSSQL die Analysis Services an, mit denen man (auch grafisch) Abfragen formulieren kann und sich dann automatisch den passenden Berichts erzeugen lassen kann. Außerdem werden Data Mining Methoden zur Verfügung gestellt, die nach Mustern in den Datensätzen suchen können.
Als nächstes legt man das Layout und die Art des Berichts fest: MSSQL bietet dazu entweder den Report Builder oder direkt Visual Studio an, wobei immer zahlreiche Tools und Kontrollelemente zur Verfügung gestellt werden. Es gibt außerdem verschiedene Berichts-Arten (Listen, Charts, Matrizen und multidimensionale Berichte).
Die Verteilung der Berichte wird durch die Reporting Services unterstützt. Dabei können Berichte auf einen sogenannten Reporting Server (unter IIS) geladen und von Benutzern abgerufen werden. Diese Berichte können dann dynamisch (ad hoc) vom Benutzer verändert werden und in vielen Formaten (html, pdf, xls) heruntergeladen werden.

Alles in allem ist der neue SQL Server eine gelungene und runde Sache, die einen sehr kompletten Funktionsumfang aufweist. Gerade für kleinere Firmen oder Niederlassungen kann der SQL Server eine Alternative zu komplexeren und kostenintensiveren Varianten (beispielsweise SAP, ORACLE) sein.

Ist selbst der SQL Server zu groß bemessen, sollte man entweder auf MS Access (ein sehr gutes Tool für kleinere Anforderungen) zurückgreifen, bei seinen Excel Sheets bleiben oder mal im Open-Source Bereich Ausschau halten.

OpenSource: sehr gute Software sind für mich Pentaho (enterprise-class reporting, analysis, dashboard, data mining and workflow capabilities) und BIRT (Business Intelligence and Reporting Tools von Eclipse und Actuate).
:-)

In MS Access verwendet man in den Benutzerschnittstellen gern Listen mit Multiselect-Funktion, um dem Anwender flexiblere Auswahlmöglichkeiten zu bieten.

In Queries ist es jedoch etwas schwierig diese Optionen abzufragen. Folgende VBA-Funktion schafft da Abhilfe:

Function InMultiSelect(frms, ctrl As String, col As Integer, data As Variant, ParamArray OtherArgs()) As Boolean
'Checks whether a Variant (data or OtherArgs) is included in the specified column (col) of a ListBox (ctrl)
'in a certain Form (frms)
On Error GoTo Error_InMultiSelect
Dim varItm As Variant
Dim index As Integer
Dim ctl As Control
Dim frm As Form
Set frm = Forms(frms)
Set ctl = frm.Controls(ctrl)
InMultiSelect = False
For Each varItm In ctl.ItemsSelected
If InMultiSelect = True Then Exit For
If CStr(data) = CStr(ctl.Column(col, varItm)) Then InMultiSelect = True
For index = LBound(OtherArgs) To UBound(OtherArgs)
If InMultiSelect = True Then Exit For
If CStr(OtherArgs(index)) = CStr(ctl.Column(col, varItm)) Then InMultiSelect = True
Next index
Next varItm
Exit Function
Error_InMultiSelect:
InMultiSelect = False
Exit Function
End Function

In den Abfragen (Queries) selbst wird diese Funktion dann beispielsweise so aufgerufen:


SELECT *
FROM [tblTabelle]
WHERE InMultiSelect("[frmFormMitMultiSelectAuswahl]","[lstListeMitMultiSelectAuswahl]",0,[tblTabelle].[Spalte]))<>False);

Leider ist es in MS Access nicht ohne weiteres möglich das Vorhandensein einer Tabelle abzufragen.

Dies wird gerade wenn man mit temporären Tabellen arbeitet zum Problem.

Eine Abhilfe liefert folgende VBA-Funktion:

' check if a table exists
Function tableExists(tableName As String) As Boolean
On Error GoTo Error_tableExists
Dim strTableName
' assign tableName to String
strTableName = CurrentDb.TableDefs(tableName)
' if no error occurs then set tableExists to true
tableExists = True
Exit_tableExists:
On Error Resume Next
Exit Function
Error_tableExists:
Select Case Err.Number
Case 3265 'Item not found in this collection
tableExists = False
Resume Exit_tableExists
Case Else
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical
Resume Exit_tableExists
End Select
End Function