Все основные данные В ОДНОМ ПОЛЕ

Модераторы: kdv, CyberMax

Ответить
Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 25 ноя 2008, 12:21

Здравствуйте. Разработчик отказался сопровождать свой проект. База полисов ОСАГО. На FoxPro. Велено переписать. Решил на FB, на самом родном.
Залез в таблицы, там все по-хитрому.
Главная таблица (я ожидал, что там будет за сотню полей) - ведь в форме заполнения полиса их чуть не столько :shock:
Оказалось, что там 10 полей.

Код: Выделить всё

Field          Type          FieldSize          Decimal
FORM          C              6                       0
ID_REC        N              6                       0
ID_FIELD     C             16                       0
VTYPE         C              1                        0
N                N              18                      4
D                D               8                       0
T                T               8                      0
L                C               10                     0
ENABLED     N               1                      0
C               C               254                    0
ID_REC - понятно. Одно число объединяет записи, относящиеся к одному полису. В поле ID_FIELD хранятся названия полей. То-есть, ожидаемые мной имена столбцов хранятся в одном столбце... :roll:
Type - тип, раз уж все в куче. N, D, T, L - очевидно поля, где хранятся сами данные. В N - цифры, в D и T - дата и время полиса или чего там еще. В последнем поле - все остальное. И "Иванов", и "Иван", и "Иванович", и "Волга-Газ-24", и "Республика Калмыкия", и "легковой автомобиль"
Вопрос: как они все это вытаскивают во вполне человеческий вид на клиенте. В гриде. И главное - как это все отразить в полях ввода? Ведь я привык просматривать и редактировать 1 запись. А тут штук 100 - и все в одной куче.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 25 ноя 2008, 13:46

Например, читаем как есть и уже клиент распихивает в CDS.
Не пойму, в чём беда-то? Ты хочешь один-в-один всё перенести?

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 25 ноя 2008, 14:17

Ну, снаружи клиент желательно чтобы был максимально похож, иначе пользователи скажут, что раньше вверху окошечко было, а теперь внизу. Что такое CDS - я не знаю.
Я не пойму - вот несколько полей ввода на форме. Все они отображают значения полей одной записи
А тут много записей. Какой должен быть SELECT, INSERT и т.п. Или что, последовательно для каждого TDBEdit запрос повторять? Типа для фамилии

Код: Выделить всё

SELECT C FROM MYTABLE WHERE ID_REC = 365 AND ID_FIELD = 'FAM'?
Так их куча же, этих полей!!! Или цикл устраивать? Хм... Можно присвоить компонентам те же имена, что и ID_FIELD, и обходить последовательно все компоненты на форме, подставляя их в один и тот же запрос как параметры?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение kdv » 25 ноя 2008, 14:22

Какой должен быть SELECT, INSERT и т.п. Или что, последовательно для каждого TDBEdit запрос повторять?
именно. похоже, ты не въезжаешь в использованную модель хранения данных.
кстати, тут дбедиты вообще не в кассу.

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 25 ноя 2008, 14:52

kdv писал(а):
Какой должен быть SELECT, INSERT и т.п. Или что, последовательно для каждого TDBEdit запрос повторять?
именно. похоже, ты не въезжаешь в использованную модель хранения данных.
кстати, тут дбедиты вообще не в кассу.
Потому и спрашиваю. Понятно, простые TEditы, я оговорился. Ну хотя бы где можно про это почитать? У меня есть книга Хелен Борри, но что-то там я этого не нашел...
Если последовательно селектить сотню значений, да не с локальной машины, не приведет ли это к долгому заполнению
формы? Насколько оправдан такой подход? Может, проще действительно много полей сделать?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение kdv » 25 ноя 2008, 15:54

это объектная модель. описания есть тут:
http://www.ibase.ru/develop.htm в разделе "древовидные", можешь начать с ООП в РСУБД.

собственно, ты привел структуру центральной таблицы с описанием метаданных.
Данные, как видно, все строковые, и хранятся в одной таблице типа
id_rec, id_field, data

один запрос выбирает одну "запись", в виде пачки записей со строками data. Эта "запись" уже показывается как обычная запись в форме.
набор записей вывести "автоматически "в грид" - это то же самое, только побольше работы, и надо чтобы данные как-то были отсортированы по записям.
вообще нафиг такая схема тут - не знаю, возможно "записи" могут иметь плавающий формат, т.е. разный набор столбцов. Это надо смотреть в базе и знать предметную область (ОСАГО?).
Может быть, у оригинального разработчика просто был какой-то инструмент клепания ПО на этой модели данных. Насколько я в курсе, по той же модели сделана 1С версии 8.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 25 ноя 2008, 15:59

Наверное как-то так:

Код: Выделить всё

while not q.Eof do
begin
  NextControl := Form1.FindChildControl(q.FieldByName('ID_FIELD').AsString);
  if Assigned(NextControl) then
    if NextControl is TEdit then
      TEdit(NextControl).Text := q.FieldByName('C').AsString;
  q.Next;
end;
Это только намёк, конечно.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 25 ноя 2008, 16:01

kdv писал(а):Насколько я в курсе, по той же модели сделана 1С версии 8.
В каком месте?

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 25 ноя 2008, 16:31

kdv писал(а):это объектная модель. описания есть тут:
http://www.ibase.ru/develop.htm в разделе "древовидные", можешь начать с ООП в РСУБД.

собственно, ты привел структуру центральной таблицы с описанием метаданных.
Данные, как видно, все строковые, и хранятся в одной таблице типа
id_rec, id_field, data

один запрос выбирает одну "запись", в виде пачки записей со строками data. Эта "запись" уже показывается как обычная запись в форме.
набор записей вывести "автоматически "в грид" - это то же самое, только побольше работы, и надо чтобы данные как-то были отсортированы по записям.
вообще нафиг такая схема тут - не знаю, возможно "записи" могут иметь плавающий формат, т.е. разный набор столбцов. Это надо смотреть в базе и знать предметную область (ОСАГО?).
Может быть, у оригинального разработчика просто был какой-то инструмент клепания ПО на этой модели данных. Насколько я в курсе, по той же модели сделана 1С версии 8.
По порядку: данные не все строковые. Строковые хранятся в поле C - в последнем, размер 254. Дата хранится в поле D, время - в поле T, числа в N. В шахматном порядке... На деревянную базу это не похоже, я с дерева начинал осваивать FB, то-есть тут не растерялся бы. Да и иерархии нет. Причем количество строк для каждого случая одинаковое. Даже если это юрлицо, там все равно есть в поле ID_FIELD строки P_FAM, P_IM, P_OT (имя, фамилия, отчество). Только не заполненные #-o там где данные должны быть
Статью почитаю. В общем-то я весь сайт прочитал, когда начинал. Но не проникся, видимо :^o

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 25 ноя 2008, 16:42

В общем, так:
ID_REC ID_FIELD VTYPE N D T L C
365 S_FAM C Иванов
365 S_IM C Сергей
365 S_BORN D 12.02.1970
365 S_SUM N 120.32
365...

Блин, не получается выровнять. В общем, дата рождения - в столбце D, деньги - в столбце по имени N (и типы их тоже соответствующие). Ну а строки - все, и люди, и адреса, и номера машин - в столбце C
Матрица...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 25 ноя 2008, 17:14

Solo писал(а):В общем, дата рождения - в столбце D, деньги - в столбце по имени N (и типы их тоже соответствующие).
Что, даже этого не умеешь? :shock:

Код: Выделить всё

  if Assigned(NextControl) then
    case q.FieldByName('ID_FIELD').AsString of
      'D': if NextControl is TDateEdit then
             TDateEdit(NextControl).Date := q.FieldByName('D').AsDateTime;
      'N': if NextControl is TRxCalcEdit then
             TRxCalcEdit(NextControl).Value := q.FieldByName('N').AsDouble;
      else if NextControl is TEdit then
            TEdit(NextControl).Text := q.FieldByName('C').AsString;
    end;
Сдаётся мне, что тебе не на этот форум, а в программирование.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение kdv » 25 ноя 2008, 20:16

По порядку: данные не все строковые. Строковые хранятся в поле C - в последнем, размер 254. Дата хранится в поле D, время - в поле T, числа в N.
ну не в строках, а вот таким экзотическим способом. не легче.
На деревянную базу это не похоже
речь не про деревья, или хранение объектов, а вообще про организацию хранения произвольных структур. Это как раз и есть такая модель. "Запись" можно обозвать объектом. Деревья - ввести, ибо структура легко позволяет.
Считай имеющуюся у тебя базу самым простым вариантом "объектного хранилища".

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 26 ноя 2008, 08:53

2KDV:Да, спасибо. Нашел кое-что на эту тему. Просто я действительно с этим не сталкивался раньше.

2WildSery
Что, даже этого не умеешь? :shock:
Код: Выделить всё
if Assigned(NextControl) then
case q.FieldByName('ID_FIELD').AsString of
'D': if NextControl is TDateEdit then
TDateEdit(NextControl).Date := q.FieldByName('D').AsDateTime;
'N': if NextControl is TRxCalcEdit then
TRxCalcEdit(NextControl).Value := q.FieldByName('N').AsDouble;
else if NextControl is TEdit then
TEdit(NextControl).Text := q.FieldByName('C').AsString;
end;
Что-то Python 2.5.2 не принимает твой пример :( Может, оттого, что первая строка по-русски

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение kdv » 26 ноя 2008, 11:20

Что-то Python 2.5.2 не принимает твой пример
??? этот пример на дельфях. у меня появляются нехорошие подозрения...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 26 ноя 2008, 11:37

Solo писал(а):Что-то Python 2.5.2 не принимает твой пример :( Может, оттого, что первая строка по-русски
Он и не будет работать. И не потому, что он на Дельфи, а потому, что он не полный, и только показывает примерный алгоритм, как бы я обрабатывал список контролов.
(На самом деле, я бы их вообще динамически создавал, пожалуй, и дополнительной суперфункцией форматировал их красиво на форме)
На питоне же такие вещи вообще "на раз" делаются. Я не изучаю питон пока, но видел его возможности. Куда проще чем на Дельфях.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Dimitry Sibiryakov » 26 ноя 2008, 12:11

Что-то я не пойму: старый разработчик что, исходников не оставил? FoxPro, конечно, та ещё зверушка, но всё-же не rocket science, как сказал бы Джим... В Дельфи код можно переносить практически один-к-одному.

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 26 ноя 2008, 12:19

Это шутка была. В ответ на "даже этого не можешь". Я ж сказал, что русскую строчку не пропускает.
Могу я этого, могу. И компоненты динамически, и универсальную форму на разные структуры таблиц с определением типа, и нормализацию забитых вручную адресов по КЛАДРу (процент попадания около 80) при помощи регулярных выражений и хранимых процедур. Осталось только Delphi от Pythonа по коду научиться отличать.
Просто у меня вовсе не программистское образование, и поэтому знания не систематизированные, а now and then

2Dmitry Sibiryakov
Да нет конечно. Это ж фирма по прог. продуктам. Это же их хлеб. У себя на сайте держат наш баннер как партнеры, а сами хамят по телефону. Но прога прилично сделанная, даже подсказки на gdi+ прорисовывают с градиентами да стрелочками.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение WildSery » 26 ноя 2008, 14:07

Solo писал(а):даже подсказки на gdi+ прорисовывают с градиентами да стрелочками.
Вот оно что, Петрович... Теперь это показатель приличности проги :mrgreen:

Solo
Сообщения: 108
Зарегистрирован: 18 апр 2005, 04:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Solo » 26 ноя 2008, 15:40

WildSery писал(а):
Solo писал(а):даже подсказки на gdi+ прорисовывают с градиентами да стрелочками.
Вот оно что, Петрович... Теперь это показатель приличности проги :mrgreen:
Подсказки не хинты, а контекстные объяснения по ходу заполнения. Там очень много условностей.
Ну... могу добавить дружественный интерфейс, логичность ожидания действий пользователя, не раздражающую цветовую гамму, взаимодействие с главной корпоративной базой... Но вот логику базы никак не мог просечь. Сейчас читаю вот про объектный подход.
А что, надо было, чтобы она с шелла управлялась?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Все основные данные В ОДНОМ ПОЛЕ

Сообщение Dimitry Sibiryakov » 26 ноя 2008, 20:16

Solo писал(а):Да нет конечно. Это ж фирма по прог. продуктам. Это же их хлеб.
Я - тоже фирма по прог.продуктам, но мне одиночного заказчика проще скинуть вместе с исходниками. Типа, "вот вам ваше дерьмо, наслаждайтесь и забудьте мой телефон".

Помнится, в моё время для фокса были декомпиляторы...

Ответить