Перейти к содержанию
  • Регистрация
  • 0
Aleks133

Загрузка настроек приложения из БД

Вопрос

Здравствуйте,

Хочу сохранять настройки приложения, например выбранный индекс tabcontrol'a,список listbox'a и т.п. 

Как можно сделать что то типа такого?

procedure TForm1.Button3Click(Sender: TObject);
var
  s,obj,cap,val: string;
begin
  with FDQuery1 do
  begin
    SQL.Clear;
    SQL.Add('select * from rab');
    OpenOrExecute;
  end;
  while not FDQuery1.Eof do
  begin
    s := FDQuery1.Fields[1].AsString +'.'+ FDQuery1.Fields[2].AsString +':='+
      FDQuery1.Fields[3].AsString+';';
    Memo1.Lines.Add(s);
  obj:=FDQuery1.Fields[1].AsString;
  cap:=FDQuery1.Fields[2].AsString;
  val:=FDQuery1.Fields[3].AsString;
  //"Component"."properties":="value";      <--------что можно здесь придумать  

FDQuery1.Next;
  end; 

в БД поля хранятся так 

image.png.1d69fcee6c9959019847f8118aabd9ae.png

Можно искать значение для каждого компонента через select values from rab components= name, но это же много разных запросов, мне кажется будут лишние "тормоза", а там не знаю, не пробовал. Для начала решил обратиться за советом сюда.Может можно проще.  

Как это сделать с помощью ini я знаю, но хотел чтобы развертывался только один файл(БД ), а с ini придется еще один файл добавлять. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

FDQuery1.Lookup?

или RTTI
c:=FindComponent(FDQuery1.Fields[1].AsString)
if assigned(c)
  SetProp(c,FDQuery1.Fields[2].AsString,TValue.From(FDQuery1.Fields[3].AsString))

 

Изменено пользователем Slym

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

правильный ответ - не делать так ))

нужно хранить настройки приложения в отдельном классе

тогда кроме самого класса нужны методы, которые 

1) читают пишут его из ... файла, БД, интернета и т.д.

2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки

3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки

для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД.

Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе.

Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 часов назад, krapotkin сказал:

правильный ответ - не делать так ))

нужно хранить настройки приложения в отдельном классе

тогда кроме самого класса нужны методы, которые 

1) читают пишут его из ... файла, БД, интернета и т.д.

2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки

3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки

для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД.

Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе.

Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html

Спасибо за совет!Возможно когда-нибудь к этому приду, но пока для меня это сложновато. 

Пока сделал как подсказал Slym. И это работает👍. За что ему, большое спасибо!

procedure TForm1.Button3Click(Sender: TObject);
var
  s: string;
  obj: TObject;
  v:variant;
begin
  with FDQuery1 do
  begin
    SQL.Clear;
    SQL.Add('select * from rab');
    OpenOrExecute;
  end;
  while not FDQuery1.Eof do
  begin
    s := FDQuery1.Fields[1].AsString + '.' + FDQuery1.Fields[2].AsString + ':='
      + FDQuery1.Fields[3].AsString + ';';
    Memo1.Lines.Add(s);
    obj := Form1.FindComponent(FDQuery1.Fields[1].AsString);
    v:=FDQuery1.Fields[3].AsVariant;
    setpropvalue(obj, FDQuery1.Fields[2].AsString,v);
    FDQuery1.Next;
  end;
end; 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...