for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Обсуждаем проекты
  

xFields: изменяемая структура таблицы
Prudivus
Автор

Сообщений: 4283
Откуда: Кишинев
Дата: 14.12.06 19:06:18
Здравствуйте, господа и дамы (фокспрошники и фокспрошницы)!

Наконец-то дошли у меня руки сделать интересную для меня вещь, каковой и хочу поделиться. Если это уже было (а все уже когда-то было ) - просьба ногами не пинать.

Постановка задачи: есть некая базовая таблица с фиксированной структурой (для наглядности - Документы), к которой по необходимости, скажем в зависимости от типа записи (Тип Документа), нужно добавлять дополнительные поля. Причем необходимо иметь возможность делать это "на ходу", то есть в рантайме, у заказчика. Речь идет о неких дополнительных, малозначащих, необязательных, но тем не менее необходимых полях (реквизитах Документов). Например номер и дата доверенности для накладной и т.п.

Решение: хранить дополнительные данные в текстовом поле в виде чего-то наподобие XML, предварительно описав для каждого Типа Документа свою схему данных и некоторые дополнительные атрибуты для каждого "расширенного поля". Эти "расширенные поля" могут выводиться в отдельный фрейм (контейнер), где они и будут выводиться и редактироваться. Дополнительные атрибуты будут такими:
caption - пояснительная надпись к полю
type - тип данных (string,char,varchar,integer,decimal,boolean и т.п.)
по умолчанию - string
controltype - тип контрола (editbox,textbox,checkbox,combobox,listbox...)
по умолчанию определяется автоматически по типу
default – значение по умолчанию
по умолчанию определяется автоматически по типу, для дат - текущая
length – длина поля в символах
height – высота контрола в «строках» (24 пиксела)
valid – проверка валидности – вызов скрипта… (очень опционально)

Для контролов можно задавать дополнительные специфичные атрибуты как:
Textbox.width
combobox.RowSource
и т.п.

Теперь примеры.
Схема 1:
<двн caption="Номер доверенности" length="10"/>
<двд caption="Дата выдачи" type="date"/>
<двк caption="Кому выдана"/>

Пример данных 1:
<двн>2341116</двн>
<двд>2006-12-14</двд>
<двк> Иванов И.И.</двк>


Если какое-либо поле не заполнено, то оно не записывается в хранилище.

Схема 2:
<пп caption="Пункт погрузки" default="Кишинев"/>

<пр caption="Пункт разгрузки"
default="Москва"
controltype="combobox"
combobox.RowSource="[Москва,Киев,Минск]"
combobox.RowSourceType="1"
/>

Пример данных 2:
<пр>Киев</пр >

Ну а как это реализовано на практике можно посмотреть в прилагаемом зипе. Там есть пример ис valid'ом.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 8 PaulWist  (Гостей: 7)

© 2000-2021 Fox Club 
Яндекс.Метрика