Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Как вывести название типа?   Найти похожие ветки 

 
DmitryNekl   (2004-06-01 11:03) [0]

Смешной такой вопрос. У типа TField есть свойство DataType, которое представляет собой перечисление (ftUnknown, ftString и т.д.)
Вопрос: как вывести название типа без кучи конструкций типа
if (ADOQuery.Fields.Fields[i].DataType = ftString) then ShowMessage("ftString");
и без сase?


 
Anatoly Podgoretsky ©   (2004-06-01 11:14) [1]

Создай константный массив сток, где размерность тип


 
Sandman25 ©   (2004-06-01 11:18) [2]

uses db, typinfo;

procedure TForm1.Button1Click(Sender: TObject);
var
 f: TFieldType;
begin
 f := ftString;
 ShowMessage(GetEnumName(TypeInfo(TFieldType), Ord(f)));
end;


 
DmitryNekl   (2004-06-01 11:26) [3]

Как вариант это подходит. Но чисто теоретически: нет ли такой "встроенной" конструкции языка, которая возвращает нужное значение?

И еще вопрос: на основании информации о datatype принимается решение о создании переменной:

case ...
  ftString:  T:=TStringField.Create(Self);
  ftInteger: T:=TIntegerField.Create(Self);
  ...
  Длинный список
  ...
end;

Может, есть какой-нибудь элегантный способ отказаться от этой длинной конструкции и заменить ее чем-то более коротким и изящным?


 
DmitryNekl   (2004-06-01 11:30) [4]

2 Sandman25:

Спасибо! Пошел разбираться :)


 
default ©   (2004-06-01 11:34) [5]

есть...нужно создать массив соотв-ия знач-ий переч-ого типа с ссылками на соотв-ие классы и всё...


 
default ©   (2004-06-01 11:35) [6]

есть...нужно создать массив соотв-ия знач-ий переч-ого типа с ссылками на соотв-ие классы и всё...


 
Sandman25 ©   (2004-06-01 11:38) [7]

[3] DmitryNekl   (01.06.04 11:26)
type
 TFieldClass = class of TField;
var
 FieldArr: array[TFieldType] of TFieldClass;

begin
...
 T := FieldArr[MyFieldType].Create(Self);
...

initialization
 FieldArr[ftString] := TStringField;
 ...


 
jack128 ©   (2004-06-01 15:50) [8]


> type
>  TFieldClass = class of TField;
> var
>  FieldArr: array[TFieldType] of TFieldClass;

кстати говоря такой список уже существует - cм. db.DefaultFieldClasses


 
jack128 ©   (2004-06-01 15:50) [9]


> кстати говоря такой список
не список, а массив, разумеется..


 
Sandman25 ©   (2004-06-01 16:10) [10]

[8] jack128 ©   (01.06.04 15:50)

Логично. Свой массив нужен только при необходимости изменить классы по умолчанию.



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.428 c
6-1082888713
Khvalera
2004-04-25 14:25
2004.06.13
NMStrmServ и NMStrm


1-1085989896
Andrei
2004-05-31 11:51
2004.06.13
TfileStream


1-1086087813
Dysan
2004-06-01 15:03
2004.06.13
проблема с динимическики массивами


3-1085140264
Пубертанец
2004-05-21 15:51
2004.06.13
Проблема выполнения одной хранимой процедуры для разных таблиц


4-1083775339
RTWolf
2004-05-05 20:42
2004.06.13
Как Baloon-подсказку сделать поверх всех окон?