![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
можно получить элемент set'а по строке?
alo © (2004-11-27 11:43:00)другими словами, :
type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, .....
у меня есть
sFieldType := 'ftFloat'
мне нужно
DataSet.Parameters.ParamByName(sParamName).DataType := _сюда_тип_который_соответствует_sFieldType_
Anatoly Podgoretsky (2004-11-27 14:50:00) [1]А ты то тут причем, вопрос то от alo
tchn (2004-11-27 14:43:00) [2]
> VMcL ©
ок, спасибо
> Piter ©
бывает нужно. в данном случае мне нужно приводить значение variant к типу, ссылка на который хранится в БД в виде строки
VMcL (2004-11-27 13:48:00) [3]Можно. Для этого используется Run-time Type Information (RTTI).
Пример.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TEnum = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency);
procedure TForm1.Button1Click(Sender: TObject);
var
A: TEnum;
begin
A := TEnum( GetEnumValue(TypeInfo(TEnum), 'ftSmallint'));
if A = ftSmallint then
ShowMessage('OK')
else
ShowMessage('Failed!');
end;
end.
Piter (2004-11-27 12:43:00) [4]Имхо, никак нельзя, кроме такого:
function StrToFieldType(s: string): TFieldType;
begin
if s = 'ftFloat' then Result := ftFloat
else if s = 'ftString' then Result := ftString
else if ...
else Result := ftUnknow;
end;
один вопрос - зачем такое нужно? Какая-то неправильная логика в приложении...