Quellstruktur und Formate
Signatur
<name>.acproj
source/
queries/<name>.query.txt modules/<name>.bas classes/<name>.cls
forms/<name>.form.txt reports/<name>.report.txt macros/<name>.macro.txt
reports/<name>.print.json
tables/<name>.table.json data/<name>.jsonl relations/relations.json
data/<name>.files/<key>/...
references.json application/properties.json
themes/<name>/... resources/images/<name>.png
ribbons/<name>.xml ribbons/ribbon.json navigation/navpane.json
application/app-model.json (+ its icon)
texts/<lang>.json texts/terms.<lang>.json
build/<configuration>/ (results, not sources)
obj/wkl-state.json (change tracking, per workstation, not sources)
Zusammenfassung
Jeder Teil einer Access-Anwendung hat ohne weitere Angabe unterhalb des Quellstammverzeichnisses einen festen Platz,
derselbe für Export, Build, Prüfungen und Änderungsverfolgung. Quellelemente der Projektdatei legen eine Art von
Quellen an einen anderen Ort (Projektdatei: Quellelemente). Jede Quelldatei ist UTF-8-codiert. Objektnamen mit Zeichen, die in
Dateinamen nicht zulässig sind, werden codiert (%2F …).
Formate
| Quelle | Format |
|---|---|
| Abfragen, Formulare, Berichte, Makros | Der Text von SaveAsText aus Access, bereinigt um Werte, die Access bei jedem Speichern neu schreibt (was entfernt wird). |
| Standardmodule, Klassenmodule | Der Text des VBA-Editors. Wird beim Übertragen nach Access in die ANSI-Codepage von Windows umgewandelt, weil Access und der VBA-Editor Module nur in dieser Codepage lesen; ein Zeichen, das sie nicht enthält, bricht den Build ab. |
| Seiteneinstellungen eines Berichts | <report>.print.json (siehe unten). |
| Tabellenschema | tables/<table>.table.json: Felder mit Typ, Größe, AutoWert, Eingabe erforderlich, Standardwert, Gültigkeitsprüfung, Beschriftung, Format, Dezimalstellen, Genauigkeit und Skalierung, Ausdruck eines berechneten Felds und Nachschlageeigenschaften; Indizes; Tabelleneigenschaften. Kanonisch: feste Reihenfolge der Schlüssel, Standardwerte weggelassen, unbekannte Schlüssel abgelehnt. |
| Tabellendaten | data/<table>.jsonl (siehe unten). |
| Beziehungen | relations/relations.json. |
| Verweise | references.json: in Prioritätsreihenfolge, mit GUID und der Version, die die Anwendung benötigt. |
| Datenbankeigenschaften | application/properties.json: typisiert. |
| Design | Die entpackte .thmx in themes/<name>/. |
| Gemeinsam genutzte Bilder | resources/images/<name>.<ext>. |
| Von Hand geschriebene Menübänder | ribbons/<name>.xml (Zeilen von USysRibbons). |
| Modelle der WKL Forms Object Library | ribbons/ribbon.json, navigation/navpane.json, application/app-model.json mit seinem Symbol. |
| Texte der Anwendung | texts/neutral.json und texts/<code>.json je Sprache, in die Tabelle USysWklTexts geschrieben (unten). |
Tabellenschema
tables/<table>.table.json ist ein einzelnes Objekt; jeder andere Schlüssel wird abgelehnt:
| Schlüssel | Bedeutung | Standardwert |
|---|---|---|
version | Formatversion, 1. Eine Datei ohne diesen Schlüssel oder mit einer anderen Nummer wird abgelehnt. | erforderlich |
name | Der Tabellenname. | erforderlich |
description, validationRule, validationText | Beschreibung und Gültigkeitsregel der Tabelle mit ihrer Meldung. | keiner |
fields | Die Felder in ihrer Reihenfolge (siehe unten). | erforderlich |
indexes | Die Indizes (siehe unten). | keiner |
properties | Weitere Tabelleneigenschaften nach Namen, Werte als Text (Unterdatenblatt: SubdatasheetName, LinkMasterFields …; Datenblatt: HideNewField). HideNewField blendet in der Datenblattansicht die Spalte zum Hinzufügen neuer Felder aus. | keiner |
{
"version": 1,
"name": "tblKunde",
"fields": [
{ "name": "Id", "type": "Long", "autoNumber": true },
{ "name": "Name", "type": "Text", "size": 80, "required": true, "allowZeroLength": true },
{ "name": "Credit", "type": "Decimal", "precision": 12, "scale": 2 },
{ "name": "Active", "type": "Boolean", "properties": { "DisplayControl": "106" } }
],
"indexes": [
{ "name": "PrimaryKey", "fields": [ "Id" ], "primary": true },
{ "name": "ByName", "fields": [ "Name", { "name": "Id", "descending": true } ], "unique": true }
]
}
Ein Index besteht aus name, fields (ein Feldname für aufsteigende Reihenfolge oder
{ "name": ..., "descending": true }) und den Kennzeichen primary, unique (bei einem Primärschlüssel weggelassen,
der ohnehin eindeutig ist) und ignoreNulls, jeweils standardmäßig false.
Felder eines Tabellenschemas
Jeder Eintrag von fields ist ein Objekt mit diesen Schlüsseln; ein Schlüssel mit seinem Standardwert wird weggelassen.
| Schlüssel | Bedeutung | Standardwert |
|---|---|---|
name | Der Feldname. | erforderlich |
type | Boolean, Byte, Integer, Long, Currency, Single, Double, Date, Binary, Text (Kurzer Text), LongBinary (OLE-Objekt), Memo (Langer Text), Guid, BigInt, Decimal, Attachment, ComplexLong, ComplexText (mehrwertige Felder). | erforderlich |
size | Zeichenanzahl eines Text-Felds (1–255); erforderlich für Text, bei jedem anderen Typ abgelehnt. | erforderlich für Text |
precision, scale | Stellen eines Decimal-Felds (1–28, erforderlich) und Nachkommastellen (0 bis precision); bei anderen Typen abgelehnt. | erforderlich für Decimal |
autoNumber | true: ein von Access nummeriertes Long oder eine von Access gefüllte Guid (AutoWert, Replikations-ID); bei anderen Typen abgelehnt. | false |
required | true: Es muss ein Wert eingegeben werden. | false |
allowZeroLength | true: Ein Text- oder Memo-Feld akzeptiert einen leeren Text (""); mit false weist Access ihn mit Fehler 3315 zurück. Der Tabellenentwurf in Access setzt den Wert für neue Textfelder; ein mit CREATE TABLE angelegtes Feld verhält sich, als wäre er gesetzt, obwohl DAO ihn als nicht gesetzt meldet. | false |
defaultValue | Der Standardwert so, wie Access ihn speichert, ein Ausdruck (0, "neu", =Date()). | keiner |
validationRule, validationText | Die Gültigkeitsregel des Felds und ihre Meldung. | keiner |
caption, description | Die Beschriftung, die anstelle des Namens angezeigt wird, und die Beschreibung im Tabellenentwurf. | keiner |
format, inputMask, decimalPlaces | Anzeigeformat, Eingabeformat, Dezimalstellen (255 = automatisch). | keiner |
expression | Der Ausdruck eines berechneten Felds. | keiner |
properties | Weitere Feldeigenschaften nach Namen mit ihrem Wert, wie Access ihn als Text liefert (Nachschlagen: DisplayControl, RowSource, BoundColumn, AllowValueListEdits …; Text: UnicodeCompression, IMEMode …). | keiner |
Nachschlageeigenschaften haben keine eigenen Schlüssel; sie stehen unter properties mit dem Namen, den Access
verwendet, und dem Wert als Text. Ein Ja/Nein-Feld, das Access in den Datenblättern von Tabellen und Abfragen als
Kontrollkästchen anzeigt:
{ "name": "Assigned", "type": "Boolean", "properties": { "DisplayControl": "106" } }
DisplayControl nimmt die Nummer des Access-Steuerelementtyps an (106 Kontrollkästchen, 109 Textfeld, 110
Listenfeld, 111 Kombinationsfeld). Ein Schlüssel displayControl neben type wird als unbekannt abgelehnt.
Die Migrationen setzen allowZeroLength für jedes Textfeld der übernommenen Tabellen auf true (DATEC SDK,
Build-Werkzeug der WKL Forms Object Library), weil die alten Builds Felder erzeugten, die leere Texte akzeptieren.
Tabellendaten
Ein JSON-Objekt je Datensatz, die Schlüssel in der Reihenfolge des Tabellenschemas, die Datensätze nach dem Primärschlüssel sortiert. Jedes Feld des Schemas muss in jedem Datensatz vorkommen; ein fehlendes Feld ist ein Fehler. Jeder Wert trägt seinen Typ, ohne von den Ländereinstellungen des Rechners abzuhängen:
| Access-Typ | In der Datendatei |
|---|---|
| jeder, kein Wert | null (zu unterscheiden vom leeren Text "") |
| Kurzer Text, Langer Text | Zeichenfolge |
| Ja/Nein | true / false |
| Byte, Integer, Long Integer, Große Zahl | Ganzzahl |
| Single, Double | Zahl in der kürzesten Form, die beim Zurücklesen denselben Wert ergibt; NaN und Unendlich werden abgelehnt |
| Währung, Dezimal | Zeichenfolge mit Punkt als Dezimaltrennzeichen, exakt |
| Datum/Uhrzeit | yyyy-MM-ddTHH:mm:ss, Sekundenbruchteile nur, wenn vorhanden, keine Zeitzone |
| GUID | {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} |
| Binär (bis 510 Byte) | { "base64": "..." } |
| OLE-Objekt | { "file": "<path>" } |
| Anlage | [ { "name": "<file name>", "file": "<path>" }, ... ] |
| Mehrwertig | Array seiner Werte, sortiert |
Nicht-ASCII-Zeichen werden unverändert (UTF-8) geschrieben, nicht als Escapesequenzen.
Lange Binärdaten (OLE-Objekt) und Anlagen sind eigene Dateien, ein Ordner je Datensatz, benannt nach seinem
Primärschlüssel: data/<table>.files/<key>/<field>.bin und data/<table>.files/<key>/<field>/<file name>. Eine
Anlagedatei enthält genau die Bytes der angefügten Datei. Ein mehrwertiges Feld ist ein Array seiner Werte, sortiert,
weil Access sie als Menge führt. Eine Tabelle ohne Primärschlüssel verwendet die Position des Datensatzes
(row000001), die sich verschiebt, wenn davor Datensätze eingefügt werden. Eine Datendatei kann keine Datei außerhalb
des Datenordners benennen.
Verweise, Datenbankeigenschaften, Beziehungen
references.json ist ein Array in der Prioritätsreihenfolge des VBA-Projekts; jeder Eintrag hat genau name, guid
(in geschweiften Klammern, Großbuchstaben), major und minor (die Version, die die Anwendung benötigt):
[ { "name": "WklForms", "guid": "{A37D549E-FCD0-48EC-8B14-C7323B747E4F}", "major": 2, "minor": 0 } ]
Der Bau legt jeden Verweis mit dieser Version an. Access trägt die höchste auf dem Bau-PC registrierte Version der
Typbibliothek mit demselben major ein: Mit registrierter WKL Forms Object Library 2.3 ergibt "minor": 0 in ACCDB
und ACCDE einen Verweis auf 2.3. export behält das minor der Quellen, solange die Datenbank dasselbe major und kein
niedrigeres minor führt; sonst schreibt er die Version der Datenbank. So nennt references.json weiter, was die
Anwendung braucht, während die gebaute Datenbank die Version braucht, die auf dem Bau-PC registriert war.
application/properties.json ist ein nach Namen sortiertes Array; jeder Eintrag hat name, value (immer eine
Zeichenfolge) und bei jedem Typ außer Text type mit dem Namen des DAO-Eigenschaftstyps (Boolean, Byte,
Integer, Long, …):
[ { "name": "AppTitle", "value": "Kunden" }, { "name": "AllowBypassKey", "value": "False", "type": "Boolean" } ]
relations/relations.json ist ein Objekt mit version (1) und relations, nach Namen sortiert; jede Beziehung hat
name, table (die Primärtabelle), foreignTable, fields (Paare aus field und foreignField) und attributes,
die Namen der gesetzten DAO-Beziehungskennzeichen (Unique, DontEnforce, Inherited, UpdateCascade,
DeleteCascade, Left, Right); eine leere Liste ist eine Beziehung mit referenzieller Integrität ohne Weitergabe.
In allen drei Dateien wird jeder andere Schlüssel abgelehnt.
Anwendungstexte
Die Texte, die eine Anwendung über WklTexts der WKL Forms Object Library (1.67 oder höher) zeigt – Meldungen,
Beschriftungen, Rückfragen –, liegen als eine Datei je Sprache in texts/. neutral.json enthält sie in der Sprache,
in der die Anwendung geschrieben ist; zur Laufzeit zeigt ein Schlüssel ohne Text in der Sprache der Sitzung den
neutralen Text, danach den englischen. <code>.json enthält eine Übersetzung, für jeden Sprachcode aus zwei oder drei
Buchstaben (de.json, fr.json, pl.json). neutral.json oder en.json ist Pflicht, sobald es eine Textdatei gibt;
die erste vorhandene ist die Vorlage der Prüfungen. Jede Datei ist ein flaches JSON-Objekt aus Schlüssel und Text, die
Schlüssel ordinal sortiert, UTF-8 ohne Bytereihenfolgemarke:
{
"orders.count": "{0} orders",
"orders.title": "Orders"
}
- Schlüssel sind klein geschrieben und nach Formular oder Thema gegliedert (
orders.title); sie werden ohne Rücksicht auf Groß- und Kleinschreibung verglichen, ein Schlüssel zweimal in einer Datei hält den Build an. Schlüssel, die mitwkl.beginnen, sind die Standardtexte der Komponenten und lassen sich von der Anwendung nicht festlegen. - Platzhalter
{0},{1:N2}werden aus den Argumenten vonWklTexts.Textgefüllt. - Der Build schreibt die Texte in die erzeugte Tabelle
USysWklTexts(ID,TextKey,Language,TextValue) der ACCDB und der ACCDE; der Export schreibt die Tabelle nie zurück. Eine TabelleUSysWklTextsintables/neben Textdateien hält den Build an. - Die neutrale Sprache (optional): Die Projekteigenschaft
NeutralLanguage(Projektdatei) nennt die Sprache vonneutral.json, zum Beispielsl. Diese Sprache braucht dann keine eigene Datei, und Schlüssel, die in ihr fehlen, werden nicht gemeldet. - Prüfungen (Warnungen, der Build läuft weiter): Schlüssel der Vorlage, die in einer anderen Sprache fehlen, Schlüssel ohne neutralen oder englischen Text, Übersetzungen mit anderen Platzhaltern als in der Vorlage, Schlüssel, die der VBA-Code ohne neutralen oder englischen Text verlangt, zur Prüfung markierte Übersetzungen und Textdateien einer Sprache, die außerhalb von
texts/liegen (der Build liest sie nicht; es zählen nur Dateien namensneutraloder nach einem Code nach ISO 639-1, die ein Objekt aus Texten enthalten, und Ordner, deren Name mit einem Punkt beginnt, werden nicht durchsucht). - Schlüssel, die der Code verlangt, werden in Modulen, Klassenmodulen, Formularen und Berichten in zwei Formen gefunden:
.Text("a.b")an einem beliebigen Objekt (WklTextsoder einer Hilfsfunktion der Anwendung wieTx.Text("a.b", n)) undText("a.b")oderTexts("a.b")(das Standardmitglied), in beliebiger Schreibweise. Es zählt nur ein wörtlicher Schlüssel mit mindestens einem Punkt; ein zur Laufzeit gebildeter Schlüssel (texts.Text(prefix & ".title")) wird nicht geprüft. Kommentare werden übersprungen: ein Apostroph außerhalb einer Zeichenfolge,Remund Kommentarzeilen, die mit_fortgesetzt werden. - Terminologie (optional):
texts/terms.<lang>.jsonordnet einem bevorzugten Begriff Varianten zu, die nicht verwendet werden sollen,{ "podatkovna zbirka": [ "zbirka podatkov" ] }; ein Text mit einer Variante ist eine Warnung. - Prüfmarken:
texts/review.<code>.jsonordnet einem Schlüssel den neutralen (oder englischen) Text zu, nach dem seine Übersetzung entstand, wenn sich dieser Text inzwischen geändert hat.texts importschreibt und entfernt die Marken; jede ist eine Warnung, bis eine Übersetzung des aktuellen Texts zurückkommt. - Für Übersetzer schreibt
wkl-office texts export --language <code>das Übersetzungspaket einer Sprache, undtexts importführt beliebig viele zurückgekommene Pakete auf einmal zusammen (Befehlszeile).
Seiteneinstellungen von Berichten
SaveAsText schreibt den Drucker eines Berichts als Binärblöcke (PrtMip, PrtDevMode, PrtDevNames und ihre W-Formen). Sie enthalten Name, Treiber und private Treiberdaten des Druckers auf dem Rechner, der den Bericht gespeichert hat, und unterscheiden sich auf jedem Rechner; Access liest einen gekürzten Block mit unbrauchbaren Zeichen im Geräte- und Formularnamen, daher lassen sie sich nicht bereinigen. Der Export lässt sie aus dem Text des Berichts weg und schreibt die Seiteneinstellungen daneben:
{
"useDefaultPrinter": true,
"orientation": 2,
"paperSize": 11,
"leftMargin": 1440,
"topMargin": 1440,
"rightMargin": 1440,
"bottomMargin": 1440,
"itemsAcross": 2,
"columnSpacing": 360,
"rowSpacing": 0,
"defaultSize": true,
"itemSizeWidth": 0,
"itemSizeHeight": 0,
"itemLayout": 1953,
"dataOnly": false
}
Die Werte sind die des Printer-Objekts von Access: Ränder, Abstände und Elementgröße in Twips (1440 je Zoll);
orientation 1 Hochformat, 2 Querformat; paperSize als AcPrintPaperSize (9 A4, 11 A5, 1 Letter); itemLayout 1953
erst quer, dann nach unten, 1954 erst nach unten, dann quer. Der Build setzt sie über das Printer-Objekt des Berichts.
Der Name eines bestimmten Druckers wird nicht erhalten, weil er zu einem Rechner gehört. Mit "useDefaultPrinter": true
druckt der Bericht auf dem jeweiligen Standarddrucker; mit false speichert der Build ihn mit einem festen Drucker,
nämlich dem Standarddrucker des bauenden Rechners. Ein Bericht ohne diese Datei
wird mit den Standardwerten von Access gebaut. check meldet ungültiges JSON als Fehler und eine .print.json ohne
ihren Bericht als Warnung.
Was ein Build tut
check(Quellen und Rechner); findet es einen Fehler, wird nichts erzeugt.- Eine neue Datenbank unter ihrem endgültigen Namen in
build/<configuration>/.building/, die erst dann nachbuild/<configuration>/verschoben wird, wenn jeder Schritt erfolgreich war. - Verweise in der Reihenfolge von
references.json, Datenbankeigenschaften mit ihren Typen, Tabellen mit Indizes, die Daten der Tabellen mit SeedData und FullData, die Anwendungstexte (USysWklTexts), Beziehungen. - Das Design (die Datenbank wird erneut geöffnet, weil Access ein Design nur an danach erstellte Formulare vergibt), gemeinsam genutzte Bilder, von Hand geschriebene Menübänder, das Menübandmodell mit seinem Callback-Modul.
- Abfragen, Standardmodule, Klassenmodule, Formulare (Platzhalter ersetzt), Berichte (Seiteneinstellungen angewendet), Makros.
- Zuordnungen der Kontextmenüs, das Modell des Navigationsbereichs, die Starteigenschaften, das Anwendungsmodell, die Verknüpfungen des Verbindungsprofils der Konfiguration, die Abschlussfunktion.
- Kompilieren und prüfen: Das VBA-Projekt lässt sich kompilieren, kein Verweis ist defekt, jede Tabelle und jedes Objekt der Quellen ist in der Datenbank vorhanden.
- Die ACCDE, wenn die Konfiguration eine vorsieht, mit den Starteigenschaften von
AppMode.
Die Modelle wendet die WKL Forms Object Library selbst an (über ihre Methoden Save und Apply), und zwar über ein Hilfsmodul, das nur während des Builds in der Datenbank existiert.
Was der Export schreibt
- Tabellen: das Schema jeder lokalen Tabelle (keine System-, temporären oder verknüpften Tabellen; zu verknüpften Tabellen gibt es keine Warnung) und die Daten der Tabellen mit der Richtlinie SeedData oder FullData; Ignore lässt die Tabelle aus. Der Datenblattzustand des Benutzers (Spaltenbreiten und -reihenfolge, Sortierung, Filter, Schriftarten) wird ausgelassen. Eine Tabellen- oder Feldeigenschaft, die weder auf der Liste der Quelleigenschaften steht noch als Benutzerzustand bekannt ist, wird nicht exportiert: Der Export meldet sie als Warnung („Die Eigenschaft ist noch keine Quelle und wurde nicht exportiert“), und eine aus den Quellen gebaute Datenbank hat sie nicht. Dasselbe gilt für eine Datenbankeigenschaft eines DAO-Typs, den
properties.jsonnicht aufnehmen kann. Diese Warnungen lassen weder Export noch Build noch Rundlaufprüfung fehlschlagen; behandeln Sie jede als Verlust, der zu melden ist. - Kennwörter (
PWD,Password) in den Parametern der Verbindungszeilen des Linked Tables Managers werden entfernt, jedes mit einer Warnung. - Verweise: Ein Verweis behält die Version, die
references.jsonbereits verlangt, wenn die Datenbank dieselbe Hauptversion und eine nicht ältere Version bindet. Access bindet einen Verweis an die auf dem Rechner registrierte Version; deren Nummer zu übernehmen, würde die Anforderung mit jeder Aktualisierung des Build-Rechners anheben. - Datenbankeigenschaften: Werte des Datenbankmoduls, Benutzerzustand des Navigationsbereichs, Standardwerte jeder neuen Datenbank sowie Werte, die zum Design gehören oder von einem Modell gesetzt werden, werden ausgelassen.
- Design: das Design, das die Datenbank nennt (nicht „Office“, das jede Datenbank hat).
- Modelle: Die Modelldateien sind die einzige Quelle; die Tabellen, die sie enthalten (
USysWklApp,USysWklNavPane,USysWklRibbon,USysRibbons), werden nicht als Tabellen exportiert, ebenso wenigUSysWklTexts, das der Build aus den Textdateien schreibt.USysWklLayout(die Anordnung, die jeder Benutzer gewählt hat) und das generierte ModulbasWklRibbonsind ebenfalls keine Quellen.
Eine Datei wird nur neu geschrieben, wenn sich ihr Inhalt geändert hat. Dateien der verwalteten Ordner, deren Objekt nicht mehr existiert, werden gelöscht und aufgelistet; andere Dateien (eine README neben den Formularen) bleiben erhalten. Nach einem Fehler wird nichts gelöscht.
Der erste Export nach migrate schreibt Formulare und Module einmalig so neu, wie Access sie schreibt: VBA schreibt
jeden Bezeichner im ganzen Projekt gleich, und Access ergänzt Formulareigenschaften wie PublishOption. Ab dann
schreibt ein build mit anschließendem export keine Datei mehr.
Was der Export weglässt
| Wert | Grund |
|---|---|
GUID | Access vergibt dem Objekt eine neue, wenn es das Objekt aus Text lädt. |
NameMap, RecSrcDt, NoSaveCTIWhenDisabled | Von Access bei jedem Speichern neu geschrieben; der Rundlauf ohne sie ist bytegleich. |
Checksum | Von Access nach dem Laden neu berechnet. |
Erstell- und Änderungszeit im OleData eines ActiveX-Steuerelements (auf 0 gesetzt) | Access schreibt die Änderungszeit bei jedem Speichern in der Entwurfsansicht neu, auch ohne Änderung am Steuerelement. |
Right, Bottom eines Formulars oder Berichts | Größe des Entwurfsfensters; Access schreibt sie nach dem Laden nicht zurück. |
PrtMip, PrtDevMode, PrtDevNames (und W-Formen) eines Berichts | Der Drucker des Rechners; als Seiteneinstellungen erhalten. |
Werte, die wie Rauschen aussehen, aber Zustand des Objekts sind, bleiben erhalten: LayoutCached* (Access schreibt sie
nach dem Laden nicht erneut) und PublishOption (Access schreibt wieder denselben Wert).
OleData eines ActiveX-Steuerelements (seine gespeicherten Eigenschaften) ist ein OLE-Speicher und bleibt bis auf
seine beiden Zeitstempel Byte für Byte erhalten; diese setzt der Export auf 0 (siehe Tabelle). Ein Formular, das aus
seinem Text neu erzeugt wird, ergibt so beim nächsten Export denselben Text. Access lädt einen solchen Text ohne Fehler,
behält die Eigenschaften des Steuerelements und gibt die Nullen beim nächsten Export unverändert aus.
Was der Export nicht erhält
Neben den oben genannten Werten, die der Export bewusst entfernt, gelangen diese Teile einer Access-Anwendung nie in die
Quellen. Eine aus den Quellen gebaute Datenbank hat sie nicht, und roundtrip kann ihr Fehlen nicht bemerken.
| Teil | Was geschieht | Ausweg |
|---|---|---|
| Verknüpfte Tabellen | Nicht exportiert, keine Warnung | Die Verknüpfungen im Linked Tables Manager der WKL Forms Object Library führen: Tabellen USysConnection und USysLinkedTable mit der Richtlinie SeedData sowie ConnectionProfile in der Projektdatei |
| Tabellen-, Feld- und Datenbankeigenschaften, die das SDK nicht kennt | Nicht exportiert; eine Warnung nennt jede einzelne | In der Abschlussfunktion neu anlegen |
| Datenmakros von Tabellen | Nicht exportiert, keine Warnung | In der Abschlussfunktion neu anlegen |
| Import- und Exportspezifikationen, gespeicherte Importe und Exporte | Nicht exportiert, keine Warnung | In der Abschlussfunktion neu anlegen |
| Gruppen des Navigationsbereichs ohne Navigationsmodell | Nicht exportiert | Das Navigationsmodell der WKL Forms Object Library verwenden |
| Beschreibung und Attribut „Ausgeblendet“ von Objekten | Nicht exportiert | - |
| Verweise auf Access-Bibliotheksdatenbanken (Verweise ohne GUID) | Nicht exportiert | In der Abschlussfunktion neu anlegen |
| Argumente für die bedingte Kompilierung, Beschreibung und Kennwortschutz des VBA-Projekts | Nicht exportiert | Soweit möglich in der Abschlussfunktion setzen |
| Andere Designs als das, das die Datenbank verwendet | Nicht exportiert | - |
Daten von Tabellen mit der Richtlinie SchemaOnly (Standard) | Nur das Schema, so vorgesehen | SeedData oder FullData wählen |
| Druckereigenschaften von Berichten außer den Seiteneinstellungen (Exemplare, Duplex, Papierquelle, Farbe, Druckqualität) | Nicht exportiert; Druckerblöcke werden nur aus Berichten entfernt | Im Ereignis „Beim Öffnen“ des Berichts setzen |
Was das SDK mit Unbekanntem tut
| Fall | Verhalten |
|---|---|
| Unbekannte Schlüssel in den JSON-Quellen | Von check abgelehnt |
| Unerwartete Dateien in den Objektordnern | Von check gemeldet |
| Unbekannte Zeilen in dem Text, den Access für ein Objekt schreibt | Unverändert übernommen |
| Unbekannte Tabellen-, Feld- und Datenbankeigenschaften | Nicht exportiert, eine Warnung je Eigenschaft |
| Andere Objektarten als Abfrage, Modul, Klasse, Formular, Bericht und Makro | Nicht gelesen, keine Warnung |
| Eine neue Access-Version, die ändert, was SaveAsText schreibt | Zeigt sich als Unterschiede in roundtrip, nicht früher |
Hinweise
- Öffnen Sie eine gebaute Datenbank mit Startformular nicht aus einem Skript über
OpenCurrentDatabase, um sie anzusehen: Das Startformular läuft, selbst wennAutomationSecurityMakros deaktiviert. Lesen Sie sie mitDBEngine.OpenDatabase. - Ein mehrwertiges Textfeld hat in den Quellen keine Größe: DAO meldet 4 (die Breite seines Schlüssels), und seine Werte fassen 255 Zeichen, gleich mit welcher Größe es angelegt wurde.
Verwandte Themen
- Projektordner – welche Datei wo liegt und was versioniert wird