Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2010, 09:16   #1
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию Типы данных

Пишу, что то типа БД. Есть код:
Код:
{ Types of filed }
  pftDate	= String[10];
  pftText	= String[255];
  pftMemo = Text;
  pftNum	= Integer;
  pftMoney = Real;

  FieldType = (ftDate, ftText, ftMemo, ftNum, ftMoney);

  PFieldItem = ^TFieldItem;
  TFieldItem = record
    FName: String[30];
    FType: FieldType;
  end;
Можно ли как то сделать, что бы вместо FieldType = (ftDate, ftText, ftMemo, ftNum, ftMoney); можно было выбрать конкретный тип данных (pftText; pftMemo; pftNum)?
То есть, чтобы не проверять ft*, и не подставлять pft* вместо ft*, или все придется делать через строковые переменные и писать кучу проверок?

Выглядеть должно примерно так: (код нерабочий)
Код:
{ Types of filed }
  pftDate	= String[10];
  ftText = String[255];
  ftMemo = Text;
  ftNum = Integer;
  ftMoney = Real;

  FieldType = (ftDate, ftText, ftMemo, ftNum, ftMoney);

  PFieldItem = ^TFieldItem;
  TFieldItem = record
    FName: String[30];
    FType: FieldType;
  end;
...
begin
  ...
  PFiledItem.Name^ := 'Field1';
  PFieldItem.FType^ := ftData; {тут должен подставится тип ftDate = String[10];}
  ...
end.
psycho-coder вне форума Ответить с цитированием
Старый 04.02.2010, 09:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

м.м.м малость не допонял юмора.Зачем такие страсти?
Я бы сделал класс, по подобию TField и не парился.
Ну еще разве что сделать FType:Variant

Ты подробнее задачу раскрой. Сто пудов есть решение проще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.02.2010, 09:33   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Это не Delphi, а Pascal
Про Variant забыл кстати(( и его нет в Паскале

Задача, при создании таблицы выбрать тип поля.
psycho-coder вне форума Ответить с цитированием
Старый 04.02.2010, 09:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при создании таблицы выбрать тип поля.
Нет ну в принципе та задумка с FieldType = (ftDate, ftText, ftMemo, ftNum, ftMoney); вполне нормальная
Просто ты когда будешь то поле обрабатывать учитывай какой тип стоит в FType.
Для каждой переменной держи запись:
Код:
 TRec=record
  _int:integer;
  _date:String[10];
 ....
 end;
А потом работай с этой записью ака с Variant
Код:
 var rec=TRec;
 if FType =[ftDate] then rec._int:=чему-то
 if FType =[ftNum] then rec._date:=чему-то
Это в стиле вариантных записей.

НУ лично я когда-то так делал
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.02.2010, 10:06   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ммм. Я тоже подумывал над записью, но не знал как ее туда прикрутить.
Спасибо.
Код:
 if FType =[ftDate] then rec._int:=чему-то
 if FType =[ftNum] then rec._date:=чему-то
такой вариант подойдет для
Код:
FieldType=set of (...)
И это поле может содержать несколько типов))
Код:
if FType =[ftDate, ftNum] then rec._int:=чему-то
В моем случае будет так:
Код:
 var rec=TRec;
  case FType of
    ftDate: rec._int:=чему-то;
    ftNum: rec._date:=чему-то;
  end;
psycho-coder вне форума Ответить с цитированием
Старый 04.02.2010, 10:10   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В моем случае будет так:
Тоже логично. Только прикрути еще инициализацию rec, чтоб значение было только в одно поле, а в остальных пустым, или прям в TRec добавть еще поле FieldType дабы работая с записью, можно было узнать какого типа она сейчас.

P.S. я бы это в object все обернул...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.02.2010, 20:03   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Я это в Object и буду заворачивать )) Но позже
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить типы данных Detka Помощь студентам 7 11.02.2009 17:13
Типы данных nedden Помощь студентам 2 12.11.2008 17:18
Типы данных??? Рустам Общие вопросы Delphi 10 08.11.2007 08:03
Про типы данных Smorodin Общие вопросы .NET 1 02.10.2007 15:40