EDM: Backend ändern

Unsere aktuellen Beispieldatenbanken haben ein WPF/C#-Frontend, ein SQLite-Backend und das Entity Data Model als Zwischenschicht. Was geschieht nun, wenn wir einmal die Datenbank ändern wollen – etwa, weil wir neue Tabellen oder neue Felder in bestehenden Tabellen benötigen? Wie ist die genaue Vorgehensweise, die auch berücksichtigt, dass der Benutzer eine neue Version installieren möchte, ohne die bereits im vorhandenen Backend gespeicherten Daten zu verlieren? Wie dies gelingt, zeigt der vorliegende Artikel.

EDM: SQLite aktuell halten

SQLite erscheint regelmäßig in neuen Versionen. Das betrifft sowohl die NuGet-Pakete als auch die Komponenten, die für die Arbeit in Visual Studio wichtig sind. Wenn Sie nicht beide auf dem gleichen Stand halten, sind Probleme vorprogrammiert. Dieser Artikel beschreibt, welche Schritte zu beachten sind.
LINQ to Entities ist die Abfragesprache für den Zugriff auf Daten in den Entitäten eines Entity Data Models. Im vorliegenden Artikel sehen wir uns einige Beispiele für den Zugriff per LINQ auf die Daten unserer Beispielanwendung »Bestellverwaltung« an. Dabei verwenden wir in diesem Artikel die Methoden-Syntax von LINQ.

m:n-Beziehung mit Listenfeld

Wir haben in der Beispieldatenbank Bestellverwaltung bereits eine m:n-Beziehung über ein Fenster realisiert, das an eine Tabelle gebunden ist und ein DataGrid enthält, das die verknüpfte Elemente anzeigt. Dabei handelt es sich um die Abbildung von Bestellungen, Bestelldetails und Produkte, wo zusätzlich zur Verknüpfung noch weitere Daten wie der Einzelpreis für die Bestellposition gespeichert werden. Im vorliegenden Artikel werden wir uns ansehen, wie wir eine m:n-Beziehung ohne weitere Daten in der Verknüpfungstabelle verwalten können. Dazu wollen wir Kunden über eine Verknüpfungstabelle einer Tabelle mit Versendungen etwa zu Werbe- oder Informationszwecken verknüpfen.

Neuer Eintrag in ComboBox

Manchmal zeigen Kombinationsfelder einfach nur die verknüpften Werte einer Lookup-Tabelle an – wie beispielsweise bei der Kategorie eines Produktes. Die Tabelle mit den Produkten ist dann über ein Fremdschlüsselfeld mit der Lookup-Tabelle mit den Kategorien verknüpft, worüber dann die gewünschte Kategorie ausgewählt wird. Was aber, wenn man mal eben einen neuen Wert in die Lookup-Tabelle schreiben will? Lässt sich das überhaupt erledigen, ohne dass der Benutzer einen Dialog zur Eingabe der Daten der neuen Kategorie öffnet? Dieser Artikel bringt die Antwort auf diese Frage.

Fehlerhafte Bindungen prüfen

Wenn Sie mit C# programmieren, können Sie beim Debuggen bequem herausfinden, warum etwas nicht so funktioniert, wie Sie es sich vorstellen. Bei der Datenbindung von WPF-Elementen wird es komplizierter: Wenn etwa ein an ein Feld eines Objekts gebundenes Steuerelement nicht den gewünschten Wert anzeigt, kann dies verschiedene Gründe haben. Wenn das gebundene Element nicht gefunden werden kann, gibt es keine Fehlermeldung, und es wird auch schwierig, herauszufinden, woran es liegt. Dieser Artikel stellt ein paar Möglichkeiten vor, Licht ins Dunkel der Bindung zu bringen.

Type Converter in WPF/C#

Manche Eigenschaften eines .xaml-Dokuments sind sehr flexibel. Für die Eigenschaft Margin beispielsweise können Sie ganz verschiedenen Werte angeben – zum Beispiel einfach den Wert 5, um Abstände in alle vier Richtungen zu erhalten oder auch die Zeichenkette 5,0,5,0, um nur einen linken und einen rechten Abstand abzubilden. Auch andere Eigenschaften nehmen durchaus unterschiedliche Werte entgegen, zum Beispiel solche zur Angabe von Farben. Wenn man genauer hinsieht, stellt man schnell fest, dass man da Attributen, die völlig anderen Typs sind, ein String-Literal zuweist. Warum das hier gelingt, beschreibt der vorliegende Artikel.

Basics: ObservableCollection

Unter WPF gibt es einige Mechanismen, welche die Bindung der Steuerelemente an die zugrunde liegenden Daten in einem gewissen Rahmen automatisieren. Diese werden durch die Programmierung bestimmt – entweder durch die Verwendung bestimmter Schnittstellen für Eigenschaften oder auch durch entsprechende Auflistungstypen, die dann als Datenquelle etwa für Listen-Elemente verwendet werden. Mit der PropertyChanged-Schnittstelle haben wir schon die Synchronisierung zwischen den Attributen der XAML-Definition und Eigenschaften in den Code-Klassen besprochen (siehe Artikel »Basics: PropertyChanged«). In diesem Artikel schauen wir uns nun den Auflistungstyp ObservableCollection an.
Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]