powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как бы хранить дефолтные значения для карточки… поделитесь навыками
6 сообщений из 6, страница 1 из 1
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32199626
Alto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть «условно» карточка с 40 полями… из которых скажем 20 являются обязательными… остальные заточены под аналитику по хранилищу в дальнейшем.
Из всех полей есть, скажем, 30 основанных на справочниках.
Идея в следующем не заставлять пользователя колотить все поля а проставлять дефолтные значения уже на стадии открытия формы карточки. Подставляя значения для простых полей из некой таблицы дефолтных значений… а для полей основанных на справочниках сажать id… для части полей нужна поддержка формул (типа: значение = текущая дата + две недели)
Как удобнее всего всё это дело организовать… кто уже делал нечто подобное поделитесь навыками …
...
Рейтинг: 0 / 0
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32199717
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например для BDE приблизительно так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure Form1.DataSetNewRecord(DataSet: TDataSet);
begin
    Q: = TQuery.Create(nil);
    with Q do
    try 
         DataBaseName := TQuery(DataSet).DataBaseName;
         SQL.Add('select field from Defaults;');
         Prepare;
         Open;
         TQuery(DataSet).FieldByName('Field1').AsString := Fields[ 0 ].AsString;
    finally
         Free;
    end;

    TQuery(DataSet).FieldByName('Field2').AsString := 'по умолчанию';
    ......

end;
...
Рейтинг: 0 / 0
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32199740
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то, что это где-то в OnNewRecord делать надо - это ты понял, я думаю.
Что до дефолтных значений - так так и сделай, как написал. Создай таблицу с полями <имя таблицы><имя поля><значение по умолчанию (строковое)> ну и в этом самом OnNewRecord вызывай специально созданнюю процедурку, в которую будешь передавать набор данных и имя таблицы. А там эта процедурка пускай в цикле перебирает имена полей и вытаскивает их значения из таблицы.
А вот что до фрмул - не знаю. Слышал про средства для разбора математ. выражений, но никогда не видел и думать над этим не приходилось.
...
Рейтинг: 0 / 0
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32199925
Alto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем хочется универсальности кода, чтобы мог пригодиться для работы и в дальнейшем.. пока состряпал на скорую руку такое… без формул пока.. буду размышлять.. я сейчас сижу на db’ных infopower… очень уж мне милы их TwwDBLookUpDlg… с выпадающим окошечком при выборе из справочника и строкой быстрого поиска… прям как lov’ки в oracle forms… только красивые ;)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Таблица:
Name  varchar2( 256 )
Type  number( 1 )
Value varchar2( 256 )
procedure DM.SetDefaultValues(Form : TForm);
Var
  Ed : TCustomEdit;
Begin
  Query.SQL.Text := 'select SUBSTR (dv.name, INSTR (dv.name, ''#'') + 1, 256), dv.type, dv.value from cmp.default_values dv';
  Query.Execute;
  while (Not DM.Query.Eof) do
  Begin
    Ed := TCustomEdit( Form.FindComponent(Query.FieldAsString( 0 )));
    case ( DM.Query.FieldAsInteger( 1 ) ) of
       0 : TwwDBEdit( Ed ).DataSource.DataSet.FieldByName( TwwDBEdit( Ed ).DataField ).AsString := Query.FieldAsString( 2 );
       1 : TwwDBCustomLookupCombo( Ed ).DataSource.DataSet.FieldByName( TwwDBCustomLookupCombo( Ed ).DataField ).AsInteger := StrToInt(Query.FieldAsString( 2 ));
    end;
    Query.Next;
  End;
  Query.Close;
End;

Заполняю данными таблицу:
‘Form1#Component1’,  0 , ‘ 1 ’
‘Form1#Component2’,  1 , ‘ 200


DM.SetDefaultValues(Form1)
Приведет к заполнению значениями Component1 и Component2 на форме Form1

Но… как всегда есть эти _НО_
Как сохранить ссылочную целостность на справочники в таблице дефолтных значений? Ведь там в одной колонке сядятся теперь значения id от разных справочников и меняется тип с целого числа на строку..
Как отлавливам мертвые дефолтные значения???
Как поступить с формулами? Особенно с типизацией возвращаемого значения… парсить самому в принципе не проблема головы а проблема времени.. опыт работы со стандартным TParser есть и приличная… кто еще конструктивно выскажется?
...
Рейтинг: 0 / 0
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32199944
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и нафиг оно надо хранить где в какой форме какой компонент? Лучше уж сделать наследника от TDataSet (добавить свойство имени изменяемой таблицы и дубликат события OnNewRecord), а в цикле в конструкторе модуля данных пройтись по всем компонентам и поназначать всем этим компонентам обработчики автоматом ... а то изменишь ты имя формы и чё? Опять руками править данные в этой твоей таблице.
Ещё сомнительна полезность хранения типа поля, т.к. он в данном случае бесполезен абсолютно ...
...
Рейтинг: 0 / 0
Как бы хранить дефолтные значения для карточки… поделитесь навыками
    #32200275
Posco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал так:
есть таблица с переменными (VARS), поля ID (код переменной), NAME (Caption переменной), DEF (значение по умолчанию, причём тип символьный!), LSQL(символьное поле, где хранится запрос, если нужно выбирать из справочника. Причём, выборка по двум полям, коду и наименованию (использовал AS)) и как было замечено EDITTYPE - тип контрола.
При криейте формы, в зависимости от типа редактора (EDITTYPE), создаётся соответствующий контрол, если это, к примеру лукап - используется запрос из LSQL....... принцип такой. При хорошей отладке работает как часы! ;)

Что касается формул, использую парсер. Не помню где его взял, но если нужно могу кинуть. Там и примерчики есть.
Кстати, очень удобно пользоваться такой структурой - при добавлении новых параметров не нужно лопатить код, всё настраивается на уровне таблиц БД.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как бы хранить дефолтные значения для карточки… поделитесь навыками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]