Dann ist der
MSSQL dein Freund ...
Entweder in der kostenlosen Version (
MSDE) oder aber die Standard- bzw. Enterprise Edition.
Wenn die Mitarbeiter primar mit ihren "Offline-Kopien" arbeiten, und der Server selbst nur zum Download der Daten gedacht ist, und wenn die
DB (incl Transaktionsprotokoll nie grüßer als 2 GB wird, dann reicht die
MSDE.
Wichtg ist das die
MSDE auf 5 Workerthreads beschränkt ist.
Dadurch landen die Anforderungen, die über zeitgleich 5 Abfragen hinausgehen, in einer Warteschlange.
Somit geht die Performance stark in die Knie, wenn die Anzahl der parallelen Anforderungen relativ hoch ist.
Was geht ?
Ich habe für meinen Arbeitgeber ein kleines Störungsmanagement-System entwickelt in dem Kundenanfragen aufgenommen, Technikern zugewiesen und letztendlich abgearbeitet werden. Das ganze basiert auf der
MSDE.
Abhängig von den Benutzernamen erstelle ich beim Beenden des Programms eine Offline-Kopie der
DB
(AdoTable bzw. AdoQuery > SaveToFile ()). So verteile ich "Snapshots der Datenbank" auf die Notebooks von uns Technikern.
Wenn der Programm gestartet wird, überprüfe ich, ob eine Verbindung zum Datenbankserver hergestellt werden kann oder nicht. Wenn ja, connecte ich micht mir der
DB, ansonsten lade ich die Daten aus der Offline-Kopie.
So weiss unterwegs jeder, welche Termine anstehen, hat Zugriff auf vorhergehende Einträge zu seinen Kunden, hat Infos über bestehende Wartungsverträge, ist informiert was die Kollegen auf dem Zettel haben etc.
Wenn jetzt ein Auftrag erledigt wurde, kann man ihn entweder in der Firma auf "erledigt" , oder man macht das in seiner Offline-Kopie.
Beim erneuten Connect mit dem
DB-Server vergleiche ich dann die Datensätze des Mitarbeiters mit der
DB und aktualisiere die
SQL-Datenbank gegebenenfalls.
Das funktioniert gut. Die Offline-Kopien sind verhältnismäßig klein, das Speichern geht angenehm schnell und alle sind imformiert.
Was geht nicht ?
Die gespeicherten AdoDatasets sind "dumme Dateien". Die können keinen
SQL-Server ersetzen.
Es gibt keine Beziehungen, keine Integritätsprüfungen, keine
SQL-Abfragen, keine Sicherheit. Die ganzen netten Features die dir ein
DB-Server bietet kannst du vergessen. Die Datenintegrität muss man durch eigene Programmierarbeit sicherstellen.
Anstatt einen Kunden via
SQL (SELECT bla FROM Kunde WHERE ...) zu suchen, kannst du im Offline-Mode nur den kompletten Kundenbestand aus der Offline-Kundendatei laden und zur manuellen Auswahl anbieten.
Berechnete- oder virtuelle Felder sind in den Offline-Files (egal ob im
XML oder im
ADTG Format) generell ReadOnly.
Diese können Offline nicht editiert werden. Das selbe gilt für Offline-Koipen von Views und SP's.
Am Besten verwendet man so viele Offline-Daten wie möglich im ReadOnly-Mode und nur die Felder, die wirklich geändert werden sollen ( bei uns halt Status, Notitzen, Restarbeiten ) im Schreib-Lese-Modus.
Es ist eine je nach Komplexität der
DB (bzw. der mobil benötigten Daten) eine Menge Entwickliungsaufwand nötig, und alles sauber zum Laufen zu bekommen.
Alternativen ?
Die
MSDE unterstützt Merge Replikationen.
Warum also nicht einfach auf Identities verzichten, stattdessen GUIDS als Unique-Key verwenden und auf jeden mobilen Client eine Replikation der
DB legen... ?
Die Idee ist generell gut.
Man hat absolute Freiheit und muss auf keinerlei Features verzichten.
Du kannst die
DB dann sogar von extern replizieren (über eine VPN Verbindung, notfalls übers Internet).
Riskant daran ist nur, das der User dafür Sorge tragen muss, das seine
DB nicht über 2 GB groß wird.
Zur Größe zählen auch die Transaktionsprotokolle.
Wenn z.B. jeden Sonntag eine Datensicherung geplant ist (bei der die Transaktionsprotokolle je nach Recovery Modell geleert werden), der User sein Notebook sonntags aber nie einschaltet, wird die Lösung nicht lange funktionieren.
Noch schlimmer wird es, wenn die
DB irgendwann mehr als 2GB benötigte Nutzdaten enthält. Dann must du auf Schlag 10-100
SQL-Server Lizenzen kaufen... Dein Händler wird sich freuen ....
Falls deine
DB nur ein paar Tabellen hat und die von den mobilen User optimaler Weise nur lesend verwendet werden sollen, dann löse es mit der Offline-Datasets.
Datenbanken mit vielen Tabellenbeziehungen, vielen "mobilen" Änderungen usw. würde ich lieber über eine Replikation lösen.
Auf eine gut programmierte
SQL-Datenbank kann man in der Regel auch über eine Internetverbindung arbeiten.
Falls deine mobilen Clients von Homeoffices arbeiten, dann connecte diese doch einfach (über eine VPN-Lösung) mit deinem
SQL-Server in der Firma. Dann brauchst du keine mobile Kopie der
DB und hast immer aktuelle Daten ...
Ich hoffe es bringt dich etwas nach vorn,
Schöne Grüße,
Jens