Ich versuche mal, mein Vorhaben in logische Schritte zu gliedern:
In einer (mehr oder weniger) Adressverwaltung haben die Nutzer die Möglichkeit, bis zu 50 Felder für Eingaben zu nutzen. Wenn es einem User reicht, nur 2 Felder z. B. für Vor- und Nachnamen zu nutzen, dann sind es 2 Felder und die restlichen 48 sind nicht enabled, wenn aber noch weitere Informationen benötigt werden (z. B. für die Adresse, den Ansprechpartner bei einem Unternehmen oder ähnliches), dann können es bis zu 50 Felder sein.
Jedes Feld kann entweder als Combo oder als Edit angezeigt werden. Möchte der User z. B. ein Feld für den Nachnamen nutzen, dann wird er es wahrscheinlich als Edit anzeigen lassen, möchte er es hingegen für das Land nutzen, dann kann er es als Combo anzeigen lassen und Länder als Items hinterlegen, damit diese nicht jedesmal wieder auf's Neue eingegeben werden müssen.
Somit gibt es für die Felder schon einmal drei Parameter: Einen für den Status (enabled true/false), einen für den Typ des Feldes (Combo/Edit) und einen für hinterlegte Items.
Darüber hinaus kann pro Feld auch ein Standardtext vorgegeben werden (also z. B. ein vorgegebener Ort im dazugehörigen Feld oder ähnliches). Dies wäre der vierte Parameter.
Alle Felder sind mit Labels versehen, die dann natürlich anzeigen sollen, was im jeweiligen Feld angegeben werden soll. Die Captions dieser Labels stellen den fünften Parameter dar.
Ein weiterer Parameter wird intern verwendet, aber ist ja jetzt auch nicht sooo wichtig.
Ich habe also pro Feld 6 Parameter, bei 50 Feldern macht das 300 Angaben, die jeweils variieren können.
Darüber hinaus bietet das Programm die Möglichkeit, die "Feldergruppen" in eigenständigen Kategorien abzuspeichern. Wenn ich also z. B. die Kategorie "Nur Name" aufrufe, würden also nur Vor- und Nachname aktiviert, der Rest bleibt deaktiviert. Wenn ich hingegen "Kundenansprachen" aufrufe, werden die dafür relevanten Felder wie "Firma", "Ansprechpartner", "Erstkontakt", ... aktiviert. Diese Kategorien sind unabhängig voneinander und ermöglichen eine flexiblere Handhabung des Programms.
Die Feldparameter werden, um es ein wenig einfacher zu handhaben, in einem Stringgrid abgelegt, das dann je nach Kategorie neu befüllt wird und aus dem die relevanten Informationen für die Felder gezogen werden. Rufe ich also die Kategorie "Nur Name" auf, lädt das Programm die dazu gehörigen Informationen in das Grid, geht sie durch und verteilt sie anschließend auf die jeweiligen Felder. Rufe ich die Kategorie "Kundenansprachen" auf, wird das Stringgrid gelöscht, die Informationen zu dieser Kategorie werden eingelesen und das Ganze fängt wieder von vorne an.
Um das in einer INI-Lösung auszudrücken, würde das bedeuten, dass ich einfach jedem INI-File einen Namen gebe und mit den Daten aus diesem File alle Felder "befülle". Wäre sicherlich machbar, würde in meinen Augen aber folgende Nachteile bedeuten:
- es sind zusätzliche Dateien zu berücksichtigen, wenn es Backups zu machen gilt
- wahrscheinlich müsste ich auf BigINI oder ähnliches schwenken, da die Daten mitunter doch recht umfangreich sein können (so zum Beispiel wenn ich alle Länder in einer Combo vorgeben will)
- ich würde zusätzlich zur Datenbank, in der die Eingaben in den Feldern verwaltet werden, noch eine zusätzliche Speichermöglichkeit nutzen, was mir persönlich unlogisch erscheint
- wenn längere Informationen vorgegeben werden sollen (zusätzlich gibt es noch ein Memo für Bemerkungen), muss ich mich nicht darum kümmern, diese im Ini-File entsprechend unterzubringen
Insofern scheint es mir sinnvoller, die Daten aus dem Stringgrid in einer Tabelle in der Datenbank abzulegen. Es gibt also eine Tabelle, z. B. "Kategorien", in der die einzelnen Datensätze für jede Kategorie enthalten sind, in denen wiederum neben dem Titel der Kategorie auch der Inhalt des jeweiligen Stringgrids (wahrscheinlich dann wohl in einem Blob) enthalten ist. Zusätzlich gibt es noch eine Tabelle, in der alle Eingaben, die in den Feldern gemacht wurden, gehandhabt werden (ansonsten würde es ja keinen Sinn machen
) sowie weitere Tabellen, da dieses Projekt nur ein Teil eines etwas größeren Vorhabens ist.
Meiner Meinung nach ist das wesentlich performanter, vor allem habe ich den Vorteil, schnell mal ein Backup (halt nur für das Datenbankfile und nicht noch zusätzlich für die ganzen Ini-Dateien) machen zu können und nutze dabei die Gegebenheiten (Datenbank), die ich sowieso für den Rest des Ganzen (sprich die Eingaben) benötige.
Wenn jemand eine Idee hätte, wie ich das Ganze einfacher und trotzdem mit den gleichen Inhalten bewerkstelligen kann, bin ich natürlich für Tipps dankbar. Ich denke aber mal, dass es sich dabei dann wahrscheinlich nicht um INIs handeln würde.
Insofern brauche ich dringend einen Tipp, wie ich das Stringgrid in die Datenbank bringe (wie geschrieben z. B. als Stream in ein Blobfeld), ohne dabei in der Datenbanktabelle erst einmal 300 Felder definieren zu müssen (was das Ganze dann wieder ziemlich aufwändig machen würde).
Danke und Gruß
Opa