Bisher arbeite ich einfach mit einem einfachen *.ini File (mit Huberts Routinen) und das funktioniert soweit auch ganz gut.
Aber: die (Benutzer) Einstellungen werden immer mehr und ich überlege daher alles in der SQL-Datenbank zu speichern und das INI-File auf einen einzigen Eintrag zu reduzieren, den Connection String.
Meine Überlegung wäre nun, in der Tabelle Benutzer ein Memofeld (Textfeld) anzulegen und die ganzen Benutzer INI Werte in diesem Textfeld zu speichern. Analog dazu lege ich auch ein Memofeld in meiner Systemtable an, dort kommen alle Firmenspezifischen Werte rein die für alle Benutzer gelten.
Warum? Naja, INI Files sind nicht mehr ganz zeitgemäß (Rechte, Datensicherheit,...), Registry will ich nicht nehmen weil:
zu wenig flexibel
90-95% meiner Kunden arbeiten im Netzwerk (am Server kann ich mich überall aufschalten und das INI File kontrollieren)
Probleme bei Rechnertausch
Verschiedene Terminalserver (man müsste auf jeden wieder die Registry übernehmen). So kann jederzeit der Terminalserver getauscht werden und alles bleibt erhalten
...
Was möchte ich speichern:
Letzten Suchbegriffe
Farbeinstellungen
Schriftgröße
Schriftart
Sortierfolge
AutoOpen verschiedener Dialoge
verschiedene Standarddrucker für verschiedene Ausdrucke
...
Wie gesagt, mein Plan wäre die Huberts INI-Funktionen so anzupassen (erweitern) das Sie direkt mit der SQL DB arbeiten. XML erscheint mir dann für diesen Anwendungsfall als zu Aufwendig (habe noch keine Routinen dafür).
Mich würde Eure Meinung dazu interessieren.
Speichern diverser Benutzereinstellungen
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Speichern diverser Benutzereinstellungen
Hallo, Markus -
warum setzt Du dann nicht ganz auf ein anderes Pferd?
Dein Ansatz bedeutet doch, weiterhin am INI-Konzept festzuhalten.
Was spricht dagegen, für jeden zu speichendem Wert eine entsprechende Spalte anzulegen und zu befüllen?
warum setzt Du dann nicht ganz auf ein anderes Pferd?
Dein Ansatz bedeutet doch, weiterhin am INI-Konzept festzuhalten.
Was spricht dagegen, für jeden zu speichendem Wert eine entsprechende Spalte anzulegen und zu befüllen?
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Speichern diverser Benutzereinstellungen
Hallo Georg,
der erste Gedanke war, geht nicht weil: die SQL DB von einem anderen Programm / Programmierer erstellt beziehungsweise upgedatete wird (mit Versionskontrolle und so). Das bedeutet aber, mal eben so auf die schnelle ein neues Feld geht nicht, da brauche ich immer meinen Kollegen. Dann zu viele Felder uns so, altes dbf denken... :
Ich habe das jetzt aufgrund Deines Postings nochmals überdacht. Ich erstelle mir selbst eine eigene Tabelle innerhalb unserer SQL-DB und verwalte diese eine Tabelle selbst. Somit kann ich jederzeit ein Feld hinzufügen.
Aber auch hier gibt es wieder eine unzählige Anzahl an Möglichkeiten, hier ein paar Beispiele, aktuell bin ich für Variante 3.
Variante 1
Es gibt für alle Werte nur einen Datentyp
Variante 2 (mit Abschnitt):
Meine bevorzugte Variante 3 (mit Abschnitt) :
Kann einfach eine Gruppe (Section) von Records einlesen oder bearbeiten
Variante 4 alle Werte eines Users in einem Record:
Vorteil: Recordset braucht nur einmal beim Programmstart eingelesen werden.
Nachteil: Jeder neue INI Eintrag braucht ein neues Datenbankfeld
der erste Gedanke war, geht nicht weil: die SQL DB von einem anderen Programm / Programmierer erstellt beziehungsweise upgedatete wird (mit Versionskontrolle und so). Das bedeutet aber, mal eben so auf die schnelle ein neues Feld geht nicht, da brauche ich immer meinen Kollegen. Dann zu viele Felder uns so, altes dbf denken... :
Ich habe das jetzt aufgrund Deines Postings nochmals überdacht. Ich erstelle mir selbst eine eigene Tabelle innerhalb unserer SQL-DB und verwalte diese eine Tabelle selbst. Somit kann ich jederzeit ein Feld hinzufügen.
Aber auch hier gibt es wieder eine unzählige Anzahl an Möglichkeiten, hier ein paar Beispiele, aktuell bin ich für Variante 3.
Code: Alles auswählen
Beispiel INI
[Formulare]
RechnungPfad=Rechnung
Code: Alles auswählen
Tabelle mit folgenden Felder:
Tabelle useroption
_ID PS, int
USERID varchar 20
KEY varchar 50
WERT varchar 255
Immer bei Bedarf hole oder schreibe ich einen Wert mit
SELECT _ID, KEY, WERT from useropt WHERE USERID="USER" AND KEY = "RechnungPfad"
lesen
:fieldGet("KEY")
schreiben
:fieldSet("KEY","Rechnung")
Variante 2 (mit Abschnitt):
Code: Alles auswählen
Tabelle useroption
_ID PS, int
USERID varchar 20
KEY varchar 70
WERT varchar 255
Immer bei Bedarf hole oder schreibe ich einen Wert mit
SELECT _ID, KEY, WERT from useropt WHERE USERID = "USER" AND "KEY = "Formulare.RechnungPfad"
lesen
:fieldGet("KEY")
schreiben
:fieldSet("KEY","Rechnung")
Code: Alles auswählen
Tabelle mit folgenden Felder:
Tabelle useroption
_ID PS, int
USERID varchar 20
SECTION varchar 50
KEY varchar 50
WERT varchar 255
Immer bei Bedarf hole oder schreibe ich einen Wert mit
SELECT _ID, KEY, WERT from useropt WHERE USERID = "USER" AND SECTION="Formulare" AND KEY = "Formulare.RechnungPfad"
lesen
:fieldGet("KEY")
schreiben
:fieldSet("KEY","Rechnung")
Variante 4 alle Werte eines Users in einem Record:
Vorteil: Recordset braucht nur einmal beim Programmstart eingelesen werden.
Nachteil: Jeder neue INI Eintrag braucht ein neues Datenbankfeld
Code: Alles auswählen
Tabelle useroption
_ID PS, int
USERID varchar 20
Formulare_RechnungPfad varchar 70
...100er weitere Felder
SELECT _ID, KEY, WERT from useropt WHERE USERID = "USER
lesen
:fieldGet("Formulare_RechnungPfad")
schreiben
:fieldSet("Formulare_RechnungPfad","Rechnung")
Gruß
Markus
Markus
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Speichern diverser Benutzereinstellungen
Ich habe mich für Variante 3 entschieden, jeder INI Eintrag ein eigener Datensatz. Das ganze ist seit Montag bei einigen Kunden im Einsatz und funktioniert prächtig.
Ich habe mir eine simple Klasse angelegt:
Die Klasse Initialisieren:
Im Programm verwenden:
Wahrscheinlich ist das ganze schneller als ein INI-File. Über einen einfachen Browser kann man die INI-Einträge bequem verwalten.
Danke an Georg der mich auf diese Idee gebracht hat! (jaja, Think SQL)
Ich habe mir eine simple Klasse angelegt:
Code: Alles auswählen
CLASS cSqlUserIni
VAR oConn
VAR oCurs
VAR nIDUser // User ID
VAR cProgrammID // ProgrammID als TEXT
EXPORTED:
// class method initClass
METHOD getIni // Liest einen INI Wert und setzt wenn notwendig den default wert
METHOD setIni // Setzt einen Wert unabhängig ob vorahnden oder nicht
METHOD setDefaults // Setzt alle wichtigen Default Werte wenn db leer
METHOD setDefaultsInit // Reset alles auf default
METHOD getCursor
METHOD init
METHOD destroy
ENDCLASS
Die Klasse Initialisieren:
Code: Alles auswählen
oUsrSetting:=cSqlUserIni():new(nIDUser,"MEINPROGRAMM")
oUsrSetting:setDefaultsInit()
Im Programm verwenden:
Code: Alles auswählen
FarbeWaehlen(oMenu, oUsrSetting:GetIni("Programm","Menüfarbe","Himmel"),.f.)
IF UPPER(oUsrSetting:GetIni("Client", "ToolTippZeigen","JA",))= "JA"
tdSetToolTip2(.T.,0)
ENDIF
Danke an Georg der mich auf diese Idee gebracht hat! (jaja, Think SQL)
Gruß
Markus
Markus