ich arbeite mit Zeos8 und SQLite3
Ich möchte in meinem Programm 2 Checkboxen anhand von Werten aus einer Datenbank setzen. Wenn diese Checkboxen geändert werden, soll auch der entsprechende Wert in der DB geändert werden.
Die DB Verbindung besteht. Dann SELECTe ich die Werte der Tabelle und durchlaufe die Ergebnisse und setze die Eigenschaften der CheckBox entsprechend. Nun wird aber, wenn ich die Eigenschaft "checked" der Box ändere, auch das Event "OnChange" der Checkbox gefeuert, welches dann ein "UPDATE" auf die Tabelle macht. Wenn ich dann das nächste Ergebnis mit "Query.next" durchlaufen will bekomme ich die Fehlermeldung "Operation cannot be performed on an inactive datase."
Ich habe dann bei der Checkbox die Zuweisung der Prozedur von "OnChange" zu "OnClick" geändert -> Gleicher Fehler
Erst nach dem Einbau einer "Sperrvariable" die ich beim OnCreate der Form auf TRUE setze und erst auf FALSE nachdem die CB auf die Werte der DB angepasst wurden, konnte ich die Verschachtelung auflösen.
Mache ich hier evtl einen grundlegenden Fehler in der Vorgehensweise? Oder ist die Variante mit der "Sperrvariable" ein akzeptable Lösung?
Hoffe das jemand das nachvollziehen kann. Komme mir gerade vor als wenn ich einen Knoten im Hirn habe.
Hier die betreffenden Prozeduren.
Code: Alles auswählen
procedure TForm1.getSetup();
var
  LComponent: TComponent;
begin
  Query.SQL.Text := 'SELECT name,value_integer FROM setup';
  Query.Open;
  while not Query.EOF do
  begin
    LComponent := FindComponent(Query.FieldByName('name').AsString);
    if assigned(LComponent) then
    begin
      if Query.FieldByName('value_integer').AsInteger <> 0 then
        TCheckBox(LComponent).Checked := True;
    end;
    Query.Next;
  end;
  Query.Close;
  Query.SQL.Clear;
  Config.FirstRun := FALSE;
end;Code: Alles auswählen
procedure TForm1.LimitDishChange(Sender: TObject);
var
  sql: string;
  i: integer;
begin
  if Config.FirstRun then exit;
  i := 0;
  if LimitDish.Checked then i := 1;
  sql := 'UPDATE setup SET value_integer = ' + IntToStr(i) +
    ' WHERE name = ''LimitDish''';
  try
    Query.SQL.Text := sql;
    Query.ExecSQL;
  except
    on E: Exception do
      ShowMessage('1: Fehler beim ändern des SetupWert: ' + E.Message);
  end;
end;Win10Pro 22H2



 
 

 Jetzt geben ihm 5 Leute Stoff -- der Arme
 Jetzt geben ihm 5 Leute Stoff -- der Arme 
   Verein
Verein 
 Links
Links Suche
Suche