AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konfigurationen speichern in DB

Ein Thema von Igotcha · begonnen am 18. Mär 2005 · letzter Beitrag vom 18. Mär 2005
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Konfigurationen speichern in DB

  Alt 18. Mär 2005, 10:58
Hallo zusammen,

ich suche einen Lösungsansatz für folgende Problemstellung:

Es gibt mehrere Formen, die Systemeinstellungen meines Programms durch den User zulassen. Ich möchte unabhängig von der jeweiligen Form alle vom User eingestellten Anwendungsparameter in einer Datenbank speichern.

Alle Controls, die Usereingabe ermöglichen beginnen im Namen mit "SV_". Z.B. Ein Edit für einen Laufwerkspfad heisst dann "SV_DRIVE_A". Jedes Control besitzt von Hause aus einen Eintrag in einer Tabelle (sys_vars) in der Form:

Delphi-Quellcode:
ID VAR VALUE FORM
10 SV_DRIVE_A 'c:\'        frmTest
FindComponent ist mir natürlich ein Begriff, nur muss ich dazu immer den entsprechenden Container angeben, in dem gesucht wird. Ein Edit in einer GroupBox finde ich so nicht, wenn ich von der Form aus suche.

Ich suche jetzt einenWeg, mir zwei Proceduren erstellen, die mir a) beim Öffnen der Form alle Werte aller "SV"-Controls dieser Form einlesen und in die entsprechenden Controls eintragen und b) beim Speichern, alle Werte alle "SV"-Controls wieder in die DB schreiben.

Also sowas wie:

Delphi-Quellcode:
ReadVars(aForm: TForm) und
SaveVars(aForm: TForm)
Habt ihr da eine Idee?

Danke und Gruß
Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Konfigurationen speichern in DB

  Alt 18. Mär 2005, 11:21
Hallo IGotcha,

versuch mal die Komponenten hiermit zu finden:
Delphi-Quellcode:
function AdvFindComponent(ParentC: TComponent; const AName: string): TComponent;
var
  i: Integer;
begin
  Result := nil;
  if (ParentC <> nil) and (AName <> '') then
    for i := 0 to ParentC.Count - 1 do
    begin
      if AName = ParentC.Components[i].Name then begin
        Result := ParentC.Components[I];
      end
      else if (ParentC.Components[i] is TGroupBox) or (ParentC.Components[i] is TPanel) {or ...} then
        Result := AdvFindComponent(ParentC.Components[i], AName);
      if Result <> nil then
       Exit;
    end;
end;
Nicht getestet, sollte aber funktionieren.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Konfigurationen speichern in DB

  Alt 18. Mär 2005, 12:11
Danke, aber bei Deiner Funktion muss ich ja einen vollständigen Namen angeben.

Was ich möchte, sind die Funktionen:

1. "Hole mir alle Komponentennamen von der Form X, deren Namen mit "SV_" beginnen und schreibe deren Werte in die DB" (bzw. update den Wert in der DB, wo sich der Name "SV_XXXXXX" befindet).

2. "Hole mir alle Komponentennamen mit dem Namen und dem Wert aus der DB, die zum Form X gehören, suche diese Komponenten auf der Form x und trage bei den gefundenen Komponenten den entsprechenden Wert ein."

Hintergrund ist, dass ich Komponenten mit System-Parametern einfach auf einer Form platzieren möchte (der Komponentenname beginnt immer mit "SV_") und ich nicht jedesmal die Einlese- bzw. Speichernfunktion anpassen muss.

Gruß Igotcha
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Konfigurationen speichern in DB

  Alt 18. Mär 2005, 14:11
Ich habe mir jetzt mal testweise etwas gebastelt und alle WinControls einer Form zu finden. Eine Testform und eine zweite mit 2 Listboxen (1. alle Controls, 2. nur die mit Namen "SV_") zur Anzeige(da werde ich später Stringlisten draus machen).

Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
var
  ix: Integer;
begin
  Form2.LB1.Items.Add('PageControl1'); // Initialisierung, wo welchem WinControl aus gestartet werden soll
  ix:=0;
  bbreak:=false;
  While bbreak<>True do
  begin
  ListControls(Form2.LB1.Items[ix]);
  inc(ix);
  if ix > Form2.LB1.Items.Count-1 then
    bbreak:=true;
  end;
end;
Delphi-Quellcode:
procedure TForm1.ListControls(aComponent: String);
var
  ic: Integer;
begin
 for ic:=0 to TWinControl(FindComponent(aComponent)).ControlCount-1 do
  begin
    if Pos('SV_',TWinControl(FindComponent(aComponent)).Controls[ic].Name)>0 then
       Form2.LB2.Items.Add(TWinControl(FindComponent(aComponent)).Controls[ic].Name)
    else
       Form2.LB1.Items.Add(TWinControl(FindComponent(aComponent)).Controls[ic].Name);
  end;
end;
In LB2 stehen dann nur die Controls, die mit "SV_" beginnen und Systemwerte beinhalten. Zum Schreiben in die DB wird diese Liste dann noch einmal durchlaufen, die Werte geholt und in die DB geschrieben.

Delphi-Quellcode:
// Werte holen
  for ix:=0 to Form2.LB2.Items.Count-1 do
  begin
  if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TEdit then
    ShowMessage((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TEdit).Text);
  if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TCheckBox then
    ShowMessage(booltostr((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TCheckBox).Checked));
  if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TRadioButton then
    ShowMessage(booltostr((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TRadioButton).Checked));
  end;
Wenn jemand eine Idee hat, wie ich das noch "schöner" machen kann, bitte immer her damit

Gruß Igotcha
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz