chinesisch - vereinfacht   deutsch   Englisch (USA)   französisch   holländisch   portugiesisch - iberisch   spanisch  

Home




Usenet Posting #17 -- Trigeminal Software, Inc.(German)


Betreff: INFO: Kann man sich auf Systemtabellen verlassen? Wie steht es mit DAO?
(ursprünglich gepostet 6.10.99)

(DIE FOLGENDEN INFORMATIONEN SIND VON MICROSOFT NICHT GEDULDET)

Das ist nur ein einfaches Info-Posting, aber ich dachte, ich sollte eine Frage behandeln, die dauernd gestellt wird. Sollten Sie sich bei Ihrer Arbeit auf Systemtabellen verlassen? Diese Frage ist besonders wichtig bei der Replikation, weil ohne den TSI Synchronizer die Systemtabellen die einzige Möglichkeit darstellen, bestimmte Informationen zu bekommen, und ich schreibe gerade eine Artikelserie für den Access/Office/VB Advisor über die Verwendung der Replikations-Systemtabellen, aber es kann auch für andere Dinge wichtig sein (Ken Getz und Mike Gilbert haben z.B. eine hervorragende dreiteilige Artikelserie für Informants Microsoft Office Developer über den Zugriff auf MSysQueries geschrieben).

In einem wichtigen Gespräch mit Kevin Collins, einem Program Manager für Microsoft Jet, erklärte er unmissverständlich, dass das Jet-Team die TCO (Total Cost of Ownership) Initiativen von Microsoft sehr ernst nimmt, und ging sogar soweit, zu sagen, dass sie das Dateiformat überhaupt nicht verändert hätten, wenn es nicht für den Umstieg auf Unicode notwendig gewesen wäre (das für eine andere Initiative Microsofts wichtig war, nämlich jene der internationalen Unterstützung, besonders mit all den neuen "Unicode-only" Sprachen).

Um diese TCO-Richtlinien zu erfüllen müssen alle vorherigen Versionen der Jet-Engine alle zukünftigen Versionen lesen können. Einfach gesagt heißt dies, dass Jet nicht das Dateiformat ändern darf oder solche Änderungen erfahren darf, die irgendeine Microsoft-Anwendung, die ein Feature in einer älteren Jet-Version nutzt, beinträchtigen könnte, wenn eine neuere Jet-Version verwendet wird. Das bedeutet, solange sich *jemand* bei Microsoft auf ein Feature in einer Systemtabelle verlässt, können sie die Systemtabelle nicht ändern!

Das bedeutet auch, während es klar ist, dass sie in Zukunft ADO und Jet OLE DB-Provider für den Zugriff auf Jet-Datenbanken zu verwenden gedenken und während es unwahrscheinlich ist, dass es künftig noch mehr als kleine "Bugfix"-Versionen von DAO geben wird, ist es in Stein gemeißelt, dass DAO 3.6 mit jeder Datenbank arbeiten wird, die mit irgendeiner zukünftigen Jet-Version erstellt wurde, sei es eine Haupt- oder Nebenversion. Sie werden keine neuen Features bekommen, aber Sie brauchen sich keine Sorgen über die Konvertierung bestehenden Codes zu machen, der mit Jet-Datenbanken unter Verwendung von DAO 3.6/Jet 4.0 läuft. Solange es eine Jet-Engine gibt, wird DAO 3.6 damit funktionieren.

Was heißt das? Naja, in der Praxis stellen die Informationen und Wraper-Funktionen, die Ken und Mike für Informant geschrieben haben, eine sichere Methode dar, Abfragen zu analysieren, die auch in künftigen Versionen funktionieren wird, weil, falls Sie jemandem eine Jet 8.0 (hypothetische Versionsnummer zwecks Argumentation) Datenbank zur Verwendung geben, und alles, was Sie haben, ist Jet 4.0, dann muss diese Jet 4.0 Datenbank in der Lage sein, die Jet 8.0 Datenbank zu lesen. Und wenn sie das Format von MSysQueries geändert hätten, würde das nicht funktionieren.

Ebenso bei der Replikation. Der Konflikt-Manager und der Code in der msrepl40.dll hängen ab vom Schema der Replikations-Systemtabellen. Also können Sie nicht in einer Weise geändert werden, die evtl. eine ältere Jet-Version zum Abstürzen bringt, wenn man versucht, Datenbanken zu lesen, die mit Jet 6.0 oder so erzeugt wurden.

Werden wir eine Jet 6.0 oder Jet 8.0 zu sehen bekommen? Wer weiß? Ich bin kein Hellseher. Ich zweifle sogar, ob Microsoft eine Antwort für *diese* Frage hat. Die Kernaussage dieses Postings ist, dass alle früheren Hinweise wie "keine Garantie, dass dies in zukünftigen Versionen funktionieren wird" in Hinblick auf die Jet-Systemtabellen jetzt null und nichtig sind.

Aber überlegen Sie sich: Würde eine Änderung die alte Version beeinträchtigen? Ich gebe ein paar einfache Beispiele, die Ihnen dabei helfen sollen, festzustellen, ob Ihre Abhängigkeit von den Systemtabellen eine ist, die beeinträchtigt werden kann oder nicht.

  1. Nehmen wir an, Sie haben eine Anwendung, die davon abhängt, wieviele Spalten es in der Tabelle MSysQueries gibt. Können Sie sich darauf verlassen? Die Antwort lautet NEIN, weil Jet eine Spalte hinzufügen könnte, ohne die bestehende Jet 4.0 in Mitleidenschaft zu ziehen.
  2. Was ist, wenn Ihre Anwendung von einem Datentyp oder Wert in einer bestimmten Spalte abhängt? Können Sie sich darauf verlassen? Die Antwort lautet JA, weil eine in dieser Hinsicht veränderte Jet > 4.0 die Jet 4.0 abstürzen liesse, beim Versuch eine solche Datenbank zu öffnen.
  3. *Was ist, wenn Ihre Anwendung von Features abhängt, die NYI (not yet implemented) sind, z.B. der Nullwert der "InvolvedObjects" Spalte in MSysConflicts? Können Sie sich darauf verlassen? Die Antwort ist NEIN, weil niemand in Jet oder sonstwo derzeit von diesem Wert abhängig ist. Hoffentlich werden sie dem in zukünftigen Versionen eine Funktionalität geben.

Wenn Sie also ein solches Feature in einer Jet-Systemtabelle verwenden, unterziehen Sie es diesem einfachen Test und stellen Sie fest, ob es auch sicher in zukünftigen Versionen verwendet werden kann. Am besten lässt sich die Sache zusammenfassen, indem man sagt, dass die Verwendung der Systemtabellen weiterhin undokumentiert ist, aber aus unabhängigen Gründen (TCO) auch in künftigen Jet-Versionen fuktionieren wird.

Back to Usenet Musings


Probleme mit dieser Seite? Bitte kontaktieren Sie den webmaster@trigeminal.com
mit Ihren Kommentaren, Fragen oder Vorschlägen.