Seite wählen

Alles erfolgreiche in der Programmierwelt bekommt von Microsoft eine eigene Antwort. Meist völlig unnötigerweise, aber das soll nicht Kern dieses Artikels werden.

So war Microsofts Antwort auf das SQLite Datenbankformat die „SQL Server Compact Edition„, die .sdf Dateien ausspuckt. Vor allem in der .NET Welt soll dieses Format zum Einsatz kommen und erste Anwendungen enstehen, die statt auf Access Dateien die sdf Datenbanken verwenden. Auch ich bekam neulich eine Anfrage bei divelogs.de ob ich nicht die neue Mares Software „Dive Organizer“ unterstützen könne. Kurz ein Blick darauf geworfen und das sdf Format entdeckt. Mares hatte bisher nur Access .mdb Dateien verwendet.

Die lange Suche nach einer Auslesemöglichkeit von SQL Compact Edition Dateien mit PHP brachte keine Ergebnisse, aber viele Fragen danach. Eine PHP Erweiterung dafür gibt es (bisher) nicht, daher musste eine andere Lösung her. Ich habe die Klasse class_mdb von Peter Klauer (knito.de), die Datenbankanfragen an mdb Dateien an die COM Schnittstelle von Windows weiterreicht umgeschrieben, damit die mit sdf Dateien umgehen kann. Dies bedeutet allerdings auch, daß die Lösung nur auf Windows Servern mit installierter SQL Server Compact Edition funktioniert. Dazu muss die Datenbankengine von diesem Link noch installiert werden. Danach steht die SQL Compact Edition als Data Provider zur Verfügung.

Ist die Klasse eingebunden, ist die Abfrage denkbar einfach:

<!--?php 
 
// Example script for class_sdf
 
include("class_sdf.php");
 
$sdf = new sdf("testdatabase.sdf", "password@1"); 
 
$sdf--->execute("SELECT id, text FROM test");
 
while( !$sdf->eof() )
{
    echo "The row with the id 
	".$sdf->fieldvalue('id')." 
	has the value:
	".$sdf->fieldvalue('text');
    $sdf->movenext();
}
 
$sdf->close();
 
?>;

Damit auch andere davon profitieren, stelle ich die Klasse class_sdf mit Beispielskript und Beispieldatenbank hier zum Download zur Verfügung:

class_sdf.zip

Die Verwendung erfolgt auf eigene Gefahr, ohne jegliche Gewähr und ohne Support meinerseits. Wenn es jemandem hilft, freue ich mich über einen Kommentar auf dieser Seite 🙂