![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Приветствую
В проге есть 2 кнопки: Рассчитать и Сохранить, это некий калькулятор затрат для заявки на услуги При нажатии "Рассчитать" берутся данные из БД для текущей выбранной заявки (назову их константами в данном контексте). Констант 10 штук, с помощью них осуществляется пересчет по формулам (константы для удобства пихаю в глобальные переменные), выводится сумма. Если пользователя все устраивает, он жмет сохранить - константы (т.е. глобальные переменные) сохраняются в БД. Как мне уйти от использования глобальных переменных? Есть мысль создать класс (в первый раз, не судите строго), например такой: Код:
...
TMyConst = Class
private
FDlina: double;
FShirina: double;
// и т.д.
public
function SetDlina(Value: string): double;
function SetShirina(Value: string): double;
property Dlina: double
read FDlina write SetDlina;
property Shirina: double
read FShirina write SetShirina;
//....
end;
...
implementation
function SetDlina(Value: string): double;
begin
ADOQuery.SQL.Text:='SELECT BDlina FROM const WHERE nomer = "' + value + '"';
ADOQuery.Open;
Result:=ADOQuery.FieldByName('BDlina').asfloat;
end;
// Аналогично с остальными константамиНО! Получается, что для каждой переменной-поля будет отдельный запрос! Как то неправильно выходит - 10 запросов вместо одного Нельзя ли как-то сделать так, чтобы установить все константы одним запросом ('SELECT BDlina, BShirina, ...... FROM const WHERE nomer = "' + value + '"' ![]() |
|
#2
|
||||
|
||||
|
Приведенная функция SetDlina не подходит. Если она должна менять конфигурацию - нужно что-то в этом роде:
Код:
procedure GetSettings(Value: string);
begin
ADOQuery.SQL.Text:='<запрос на все параметры>';
ADOQuery.Open;
FDlina := ADOQuery.FieldByName('BDlina').asfloat;
FShirina := ADOQuery.FieldByName('BShirina').asfloat;
...
end;З.Ы. с пропертями почти не работал, не люблю их. Но насколько помню, для установки значения функция должна не возвращать double, а явно записывать в поле. Последний раз редактировалось Bargest, 29.01.2014 в 20:12. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Mrak (29.01.2014)
| ||
|
#3
|
||||
|
||||
|
а еще есть способы избавления от глобальных переменных?
|
|
#4
|
||||
|
||||
|
Цитата:
Запись (record) -- самый простой способ передачи окружения. Если окружение разрастается во что-то сложное и становится конфигурацией со своей собственной моделью, его реализуют в виде класса или набора классов. Пока рано, как мне кажется. ![]() |
| Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
Mrak (30.01.2014)
| ||