Datenbank-Tabellen-Übertragung vom/zum PsPC
Die automatisierte Übertragung wird mittels zweier API-Funktionen realisisert. Vorraussetzung ist eine funktionierende ActiveSync-Installation. Die Funktionen DESKTOPTODEVICE und DEVICETODESKTOP lassen sich problemlos aus VB, Access-Basic oder anderen VBA-Derivaten aufrufen.
Deklarationsteil:
| Declare Function DESKTOPTODEVICE
Lib "adofiltr.dll" _ (ByVal desktoplocn As String, _ ByVal tablelist As String, _ ByVal sync As Boolean, _ ByVal overwrite As Integer, _ ByVal devicelocn As String) As Long Declare Function DEVICETODESKTOP Lib "adofiltr.dll" _ (ByVal desktoplocn As String, _ ByVal tablelist As String, _ ByVal sync As Boolean, _ ByVal overwrite As Integer, _ ByVal devicelocn As String) As Long |
Der Funktionsaufruf für die Richtung PC nach PPC sieht folgendermaßen aus:
| result = DESKTOPTODEVICE("c:\test.mdb", "tabTest..", False, True, "") |
| desktoplocn | "Desktop-Location", der Ort, an dem die Quelltabelle steht (MDB-Datenbank), der String enthält den vollständigen Pfad zur Datenbank. (Laufwerk:\Verzeichnis\Datenbank.mdb) |
| tableList | Dieser String enthält den oder die zu übertragenden Tabellennamen, mit spezieller Notation ist es möglich, nur ausgesuchte Felder einzelner Tabellen zu übertragen. Mit vorangestelltem Ausrufungszeihen werden die Tabellen als "Read-Only" erstellt. |
| sync | Momentan nicht in Benutzung, Standardwert ist Falsch, gedacht für spätere Erweiterungen |
| overwrite | Flagge, ob die Zieltabellen überschrieben werden sollen oder nicht |
| devicelocn | Ebenfalls für zukünftige Benutzung gedacht, die Tabellen landen immer im Objectstore des PPC, die Angabe eines anderen Ziels ist NICHT möglich. (nur CE2.11) |
Für die umgekehrte Richtung sieht der Code so aus:
| result = ´DEVICETODESKTOP("c:\test.mdb", "tabTest..", False, True, "") |
| desktoplocn | "Desktop-Location", der Ort, an dem die Zieltabelle stehen soll (MDB-Datenbank), der String enthält den vollständigen Pfad zur Datenbank. (Laufwerk:\Verzeichnis\Datenbank.mdb) |
| tableList | Dieser String enthält den oder die zu übertragenden Tabellennamen. |
| sync | Momentan nicht in Benutzung, Standardwert ist Falsch, gedacht für spätere Erweiterungen |
| overwrite | Flagge, ob die Zieltabellen überschrieben werden sollen oder nicht |
| devicelocn | Ebenfalls für zukünftige Benutzung gedacht, die Tabellen stammen immer aus dem Objectstore des PPC, die Angabe einer anderen Quelle ist NICHT möglich.(nur CE2.11) |
Sollte der PPC nicht erreichbar sein, eine Übertragungsstörung vorliegen oder ADO-Fehler (Tabelle in Benutzung, Tabelle nicht vorhanden u.s.w.) auftreten, so wird dies durch Laufzeitfehler angezeigt.
| -2147024894 | Die Gegenstelle ist nicht korrekt angeschlossen oder ADOCE ist nicht korrekt registriert |
| -2146824447 | Die zu übertragende Tabelle existiert bereits im Device und "Overwrite" steht auf "False" |
| -2147217865 | Eine vom PPC zu importierende Tabelle existiert nicht. |
| -2147024891 | Zugriffsverletzung auf ADOCE-Objekt |
Als kleiner Tip: Da sich der Übertragungsmechanismus keiner "normalen" Mechanismen (Anfügen von Daten per SQL-Select, Update von Daten per SQL-Update) bedient, besteht leider die Gefahr einer defekten Datenbank (z.B. Tabelle in der Tables-Auflistung vorhanden, kann jedoch weder geöffnet noch bearbeitet werden...). Aus diesm Grund lasse ich die Daten in eine "quasi"-Wegwerf-Datenbank importieren, teste dann innerhalb dieser DB die Gültigkeit der Daten und erst dann lasse ich die Daten an die "echte" Datenbank (egal ob SQL oder MDB anfügen. Sollte tatsächlich mal ein Defekt in der Übergabe-Datenbank auftreten (schon passiert), dann läßt sich diese ohne weiteres wiederherstellen, ohne sich an den "echten" Daten vergreifen zu müssen.