Allgemeines - SQL-Registry #
Die SQL-Registry ist ein hierarchischer Schlüssel/Wert-Speicher innerhalb der EULANDA-SQL-Server-Datenbank. Sie dient zur Konfiguration aller Programmmodule, Datenobjekte, Berichte, Menübefehle und Benutzereinstellungen.
Baumstruktur #
Die SQL-Registry ist hierarchisch aufgebaut. Das folgende Diagramm zeigt die vollständige Struktur bis zur dritten Ebene:
graph LR
ROOT["ROOT"]
ROOT --- MACHINE["MACHINE
Arbeitsplätze"]
MACHINE --- MACHINE_PC["{pcname}"]
MACHINE_PC --- MACHINE_PP["PrinterProfiles"]
MACHINE --- MACHINE_ALL[".ALLMACHINE"]
ROOT --- MODULES["MODULES
Programmmodule"]
MODULES --- MOD_AW["Auftragswesen"]
MODULES --- MOD_DV["Datev"]
MODULES --- MOD_FB["Fibunorm"]
MODULES --- MOD_GW["Grundwerte"]
MODULES --- MOD_KA["Kasse"]
MODULES --- MOD_SE["SEPA"]
MODULES --- MOD_EX["Excel"]
MODULES --- MOD_XX["..."]
ROOT --- OBJECTS["OBJECTS
Datenobjekte"]
OBJECTS --- OBJ_ACT["ACTIONS"]
OBJECTS --- OBJ_BND["BANDS"]
OBJECTS --- OBJ_DO["DATAOBJECTS"]
OBJECTS --- OBJ_FC["FIELDCLASSES"]
OBJECTS --- OBJ_FM["FORMS"]
OBJECTS --- OBJ_TB["TABLES"]
OBJECTS --- OBJ_SP["SQLPROCS"]
OBJ_DO --- DO_ALL["Eulanda.Allgemein"]
OBJ_DO --- DO_ADR["Eulanda.Adresse"]
OBJ_DO --- DO_ART["Eulanda.Artikel"]
OBJ_DO --- DO_ANG["Eulanda.Angebot"]
OBJ_DO --- DO_AFT["Eulanda.Auftrag"]
OBJ_DO --- DO_LFS["Eulanda.Lieferschein"]
OBJ_DO --- DO_RCH["Eulanda.Rechnung"]
OBJ_DO --- DO_XXX["..."]
DO_RCH --- RCH_ACT["Actions"]
DO_RCH --- RCH_FLD["Fields"]
DO_RCH --- RCH_INF["InfoSystem"]
DO_RCH --- RCH_LNK["Links"]
DO_RCH --- RCH_OBJ["Objects"]
DO_RCH --- RCH_REP["Reports"]
ROOT --- SYSTEM["SYSTEM
Systemweit"]
SYSTEM --- SYS_DEV["Devices"]
SYSTEM --- SYS_LIB["LIBS"]
SYSTEM --- SYS_PP["PrinterProfiles"]
SYSTEM --- SYS_SQL["SQL"]
SYSTEM --- SYS_RA["ReportArchive"]
SYSTEM --- SYS_EVT["EVENTS"]
SYS_DEV --- DEV_MAIL["EMail"]
SYS_DEV --- DEV_FAX["Fax"]
SYS_DEV --- DEV_PDF["PDF"]
SYS_DEV --- DEV_HTML["HTML"]
SYS_DEV --- DEV_XLS["XLS"]
SYS_DEV --- DEV_XXX["..."]
ROOT --- USER["USER
Benutzer"]
USER --- USR_ALL[".ALLUSER"]
USER --- USR_DEF[".DEFAULT"]
USER --- USR_USR["{benutzername}"]
USR_ALL --- USR_OBJ["OBJECTS"]
ROOT --- SESSION["SESSION
Sitzung (flüchtig)"]
ROOT --- VENDOR["VENDOR
Drittanbieter"]
VENDOR --- VND_ESOL["esol"]
Hauptbereiche #
| Bereich | Beschreibung | Details |
|---|---|---|
| MACHINE | Arbeitsplatzspezifische Einstellungen (Drucker, TAPI) | Pro PC ein Schlüssel |
| MODULES | Programmmodul-Einstellungen (Datev, SEPA, Lager etc.) | Über Einstellungsdialog pflegbar |
| OBJECTS | Datenobjekte, Felder, Menübefehle, Berichte | Wird bei Updates überschrieben |
| SYSTEM | Geräte, Exportformate, Skript-Bibliotheken | Systemweit gültig |
| USER | Benutzereinstellungen und Überschreibungen | .ALLUSER als Vorgabe |
| SESSION | Flüchtige Sitzungsdaten | Werden beim Beenden verworfen |
| VENDOR | Bereich für Drittanbieter-Plugins | Auf Neuinstallation leer |
Datenbank-Schema #
Die Registry wird in der Tabelle cnRegKey (Schlüssel) und cnRegValue (Werte) gespeichert. In älteren Versionen heißt die gemeinsame Tabelle Registry.
Tabellenstruktur #
| Spalte | Typ | Beschreibung |
|---|---|---|
ID | int | Primärschlüssel |
ParentID | int | Übergeordneter Schlüssel (Baumstruktur) |
Name | nvarchar(200) | Name des Schlüssels oder Werts |
IsKey | bit | 1 = Schlüssel (Ordner), 0 = Wert |
ValType | tinyint | Datentyp des Werts (siehe unten) |
ValString | nvarchar(max) | Zeichenketten-Wert |
ValText | nvarchar(max) | Mehrzeiliger Text |
ValInt | int | Ganzzahl-Wert |
ValFloat | float | Gleitkomma-Wert |
ValBin | varbinary(max) | Binärdaten |
ChangeDate | datetime | Letzte Änderung |
Werttypen (ValType) #
| ValType | Konstante | Beschreibung |
|---|---|---|
| 2 | String | Zeichenkette (wird intern als Text=4 gespeichert) |
| 3 | Int | Ganzzahl |
| 4 | Text | Mehrzeiliger Text |
| 5 | Float | Gleitkommazahl |
| 6 | Binary | Binärdaten (z.B. eingebettete Dateien) |
SQL-Prozeduren #
Für den Zugriff auf die SQL-Registry stehen folgende Stored Procedures zur Verfügung:
Schlüsselverwaltung #
| Prozedur | Beschreibung |
|---|---|
cn_RegCreateKey | Neuen Schlüssel anlegen |
cn_RegDelKey | Schlüssel löschen |
cn_RegOpenPath | Schlüssel über Pfad öffnen (optional anlegen) |
cn_RegKeyExists | Prüfen, ob ein Schlüssel existiert |
cn_RegKeyRename | Schlüssel umbenennen |
cn_RegCopyKey | Schlüssel kopieren |
cn_RegSubKeys | Unterschlüssel auflisten |
cn_RegKeyInfo | Informationen zu einem Schlüssel |
cn_RegKeyNames | Namen aller Unterschlüssel |
Werte lesen #
| Prozedur | Beschreibung |
|---|---|
cn_RegReadString | String-Wert lesen |
cn_RegReadInt | Integer-Wert lesen |
cn_RegReadBlobById | Binärdaten lesen |
cn_RegBulkRead | Mehrere Werte auf einmal lesen |
Werte schreiben #
| Prozedur | Beschreibung |
|---|---|
cn_RegWriteValue | Wert schreiben (allgemein) |
cn_RegWriteString | String-Wert schreiben |
cn_RegWriteTextValue | Text-Wert schreiben |
cn_RegWriteBlobValue | Binärdaten schreiben |
cn_RegCopyValues | Werte kopieren |
cn_RegValueDelete | Wert löschen |
cn_RegValueRename | Wert umbenennen |
Abfrage und Navigation #
| Prozedur | Beschreibung |
|---|---|
cn_RegValueExists | Prüfen, ob ein Wert existiert |
cn_RegValueInfo | Informationen zu einem Wert |
cn_RegValueNames | Namen aller Werte eines Schlüssels |
cn_RegList | Gesamte Registry-Struktur auflisten |
cn_RegShowPath | Pfad eines Schlüssels anzeigen |
cn_RegGetVersion | Registry-Version abfragen |
Beispiel: Wert lesen und schreiben #
-- Wert lesen
DECLARE @value nvarchar(max)
EXEC cn_RegReadString '\MODULES\Datev', 'AusgabeOrdner', @value OUT
SELECT @value
-- Schlüssel anlegen und Wert schreiben
DECLARE @keyid int
EXEC cn_RegOpenPath 0, '\VENDOR\MeinPlugin', @keyid OUT, 1 -- 1 = anlegen
EXEC cn_RegWriteString @keyid, 'Version', '2.0'
CNREG-Importformat #
Registry-Einträge können als CNREG-Textdatei exportiert und importiert werden. Das Format ähnelt dem Windows-Registry-Exportformat:
CnRegEdit1
[\PFAD\ZUM\SCHLUESSEL]
"Eigenschaft1"="Wert1"
"Eigenschaft2"=dword:00000001
"MehrzeiligerText"="Zeile 1
Zeile 2"
Der Import erfolgt über die Zwischenablage (Rechte Maustaste auf ROOT > “Einfügen”) oder programmgesteuert.