線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3835
推到 Plurk!
推到 Facebook!

請問:如何將取得字串轉為datatype

尚未結案
danajn
一般會員


發表:14
回覆:29
積分:8
註冊:2002-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-17 21:31:41 IP:218.162.xxx.xxx 未訂閱
如: 1.'ftstring'要如何轉成 ftstring 2.'ftInteger'要如何轉成 ftInteger . . . thx....
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-17 23:10:27 IP:218.163.xxx.xxx 未訂閱
引言: 如: 1.'ftstring'要如何轉成 ftstring 2.'ftInteger'要如何轉成 ftInteger . . . thx....
您的意思是要給Field或Param的DataType嗎? ftString、ftInteger…等在Delphi DB這個Unit就有定義宣告,所以您可以直接用,不需轉換如: Query1.ParamByName('xxx').DataType := ftString; 不知這是不是您要的。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-18 00:37:35 IP:61.221.xxx.xxx 未訂閱
Hi, 因為這是 ordinal 的 type , 並不是 String 的格式, 所以一般你若是要自行取得的話, 要自己利用 case of 的語法來取得, 如下:    
    function TFieldTypeToStr(FFieldType: TFieldType): String;
begin
  case FFieldType of
    ftUnknown:     Result :='ftUnknown';
    ftString:      Result :='ftString';
    ftSmallint:    Result :='ftSmallint';
    ftInteger:     Result :='ftInteger';
    ftWord:        Result :='ftWord';
    ftBoolean:     Result :='ftBoolean';
    ftFloat:       Result :='ftFloat';
    ftCurrency:    Result :='ftCurrency';
    ftBCD:         Result :='ftBCD';
    ftDate:        Result :='ftDate';       
    ftTime:        Result :='ftTime';      
    ftDateTime:    Result :='ftDateTime';
    ftBytes:       Result :='ftBytes';      
    ftVarBytes:    Result :='ftVarBytes';   
    ftAutoInc:     Result :='ftAutoInc';    
    ftBlob:        Result :='ftBlob';       
    ftMemo:        Result :='ftMemo';       
    ftGraphic:     Result :='ftGraphic';    
    ftFmtMemo:     Result :='ftFmtMemo';   
    ftParadoxOle:  Result :='ftParadoxOle'; 
    ftDBaseOle:    Result :='ftDBaseOle';
    ftTypedBinary: Result :='ftTypedBinary';
    ftCursor:      Result :='ftCursor';     
    ftFixedChar:   Result :='ftFixedChar';  
    ftWideString:  Result :='ftWideString'; 
    ftLargeint:    Result :='ftLargeint';   
    ftADT:         Result :='ftADT';        
    ftArray:       Result :='ftArray';      
    ftReference:   Result :='ftReference';  
    ftDataSet:     Result :='ftDataSet';    
    ftOraBlob:     Result :='ftOraBlob';    
    ftOraClob:     Result :='ftOraClob';    
    ftVariant:     Result :='ftVariant';    
    ftInterface:   Result :='ftInterface';  
    ftIDispatch:   Result :='ftIDispatch';  
    ftGuid:        Result :='ftGuid';       
    ftTimeStamp:   Result :='ftTimeStamp';  
    ftFMTBcd:      Result :='ftFMTBcd';
    else           Result :='';
  end;
end;
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-18 01:34:48 IP:211.76.xxx.xxx 未訂閱
引言: 如: 1.'ftstring'要如何轉成 ftstring 2.'ftInteger'要如何轉成 ftInteger . . . thx....
妳是要把DataType String轉成DataType 重點在於 1.建立DataType String和DataType之對應順序 2.如何尋找DataType String之位置 3.如何轉換DataType String位置為DataType之形態 提供下列程式參考
    unit FieldType1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,DB, StdCtrls;    type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;      //Delphi 7之TFieldType之定義,其他版本請參考該版之HELP
  FTypeStr:array[TFieldType] of string=('ftUnknown', 'ftString', 'ftSmallint',
  'ftInteger', 'ftWord', 'ftBoolean', 'ftFloat', 'ftCurrency', 'ftBCD',
  'ftDate', 'ftTime', 'ftDateTime', 'ftBytes', 'ftVarBytes', 'ftAutoInc',
  'ftBlob', 'ftMemo', 'ftGraphic', 'ftFmtMemo', 'ftParadoxOle', 'ftDBaseOle',
  'ftTypedBinary', 'ftCursor', 'ftFixedChar', 'ftWideString', 'ftLargeint',
  'ftADT', 'ftArray', 'ftReference', 'ftDataSet', 'ftOraBlob', 'ftOraClob',
  'ftVariant', 'ftInterface', 'ftIDispatch', 'ftGuid', 'ftTimeStamp', 'ftFMTBcd');       TS:TStringList; 
implementation    {$R *.dfm}    procedure TForm1.FormCreate(Sender: TObject);
var i:TFieldType;
begin
  Ts:=TStringList.Create;
  for i:=ftUnknown to ftFMTBcd do //DataType String置入Ts
      Ts.Add(FTypeStr[i]);
  //以下為測試
  i:=TFieldType( Ts.IndexOf('ftInteger') ); //搜尋DataType String並轉為TFieldType形態
  if i=ftInteger then
     showmessage('i is ftInteger')
  else
     showmessage('i is not ftInteger');      i:=TFieldType( Ts.IndexOf('ftString') );
  if i=ftString then
     showmessage('i is ftString')
  else
     showmessage('i is not ftString');      //非DataType String測試
  i:=TFieldType( Ts.IndexOf('Test') ); 
  if ord(i)=255 then 
     showmessage('i is not TFieldType')
  else
     showmessage('i is  TFieldType');
end;    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Ts.Free;
end;    end.
另外若要顯示DataType String 如 showmessage( FTypeStr[ftInteger] ); 發表人 - cmj 於 2003/05/18 01:39:26
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-18 10:48:16 IP:218.32.xxx.xxx 未訂閱
試試 : 先 use TypInfo unit. 範例如下:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  i := GetEnumValue( TypeInfo(TFieldType)  , 'ftString' );
  showmessage( GetEnumName( TypeInfo(TFieldType)  , i ) );
end;
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-18 11:43:31 IP:61.221.xxx.xxx 未訂閱
讚... Mickey 兄的解法是正確的.. 這才是正解.. 利用 RTTI 的方式來查詢所有的 Enumerated types 的 ordinal 後再進行查詢.. 完全正解... 這樣就不會有版本差異或是漏列的問題發生了..
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-18 11:48:15 IP:218.32.xxx.xxx 未訂閱
< >< > 瞎貓碰到死老鼠的...哈哈.
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-18 12:18:11 IP:61.221.xxx.xxx 未訂閱
幫 Mickey 兄將此功能寫為 function 如下:    
uses TypInfo, DB;
..
..
function StrToTFieldType(FTypeStr: String): TFieldType;
var
  i : integer;
begin
  i := GetEnumValue( TypeInfo(TFieldType)  , FTypeStr );
  Result := TFieldType(i);
end;
. .
. .
function TFieldTypeToStr(FFieldType: TFieldType): String;
begin
  Result := GetEnumName( TypeInfo(TFieldType)  , Ord(FFieldType));
end;
如此一來就可以利用 StrToTFieldType 來進行由字串轉為 TFieldType 了. 用法: StrToTFieldType('ftString') 會傳回(TFieldType的) ftString .. 並利用 TFieldTypeToStr 來進行由 TFieldType 轉為字串, 用法: TFieldTypeToStr(ftString) 會傳回字串的 'ftString' .. 更詳細的說明及範例在: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30630 發表人 -
danajn
一般會員


發表:14
回覆:29
積分:8
註冊:2002-08-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-18 13:07:53 IP:218.162.xxx.xxx 未訂閱
不知道該把分數給那位高手....>"<.... 謝謝大家熱心的回答....
系統時間:2024-06-29 16:01:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!