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

取得ADO資料表欄位型態和長度之函數撰寫問題

答題得分者是:eaglewolf
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-22 03:35:54 IP:220.134.xxx.xxx 訂閱

取得ADO資料表欄位型態和長度之函數撰寫問題

各為前輩:

想請教ADO取得資料表欄位型態和長度的問題,
想撰寫一個函數可以簡單傳回資料表欄位型態和長度
預撰寫的目標是 GetFieldType(連線元件,資料表,欄位名稱,傳回型態type/Size):String
可是我只找到範例利用ComboBox和tfield與DataSource來取得欄位資訊,但是想簡化,不知道要如何
下手,因為若能解決這個問題,對sql查詢字串的判別撰寫與一些元件如DBGRID顯示欄位長度的調整,
一定有很大的助益的,請前輩們提供思路!


procedure GetFieldType(Sender: TObject);
var
i: integer;
s: string;
v: Variant;
keyfield: tfield;

begin
inherited;
with qry1.DataSource do
begin
//先取得所有欄位名稱, 並以;間隔
for i := 0 to (ds1.dataset.FieldCount - 1) do
begin
// s := s ';' dataset.Fields[i].FieldName;
self.ComboBox1.items.Add(ds1.DataSet.Fields[i].FieldName);
end;
end;


keyfield := tfield(TComboBox(SendObject).Items.Objects[TComboBox(SendObject).ItemIndex]);

case keyfield.DataType of
ftstring, ftWideString:
begin
// result := 'String';
result := 1
end;
ftsmallint, ftinteger, ftbcd, ftfloat, ftcurrency:
begin
// result := 'Number';
result := 2;
end;
ftdatetime, ftdate, fttime:
begin
// result := 'Date';
result := 3;
end;
end;

end;

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-02 23:32:44 IP:220.138.xxx.xxx 未訂閱

參考如下:

private
{ Private declarations }
function GetFieldType(ds: TDataSet;fn:String;out ft:TFieldType; out fs:Integer):Boolean;

function TForm1.GetFieldType(ds: TDataSet; fn: String; out ft:TFieldType; out fs:Integer):Boolean;
var
f:TField;
begin
f := ds.FindField(fn);
if f = nil then
Result:=False
else
begin
ft:=f.DataType;
fs:=f.Size;
Result:=True;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
FieldType:TFieldType;
FieldSize:Integer;
s:String;
begin
memo1.lines.clear;
if GetFieldType(self.ADOTable1,'商品名稱',FieldType,FieldSize) then
begin
case FieldType of
ftstring, ftWideString:
begin
s:='String';
end;
ftsmallint, ftinteger, ftbcd, ftfloat, ftcurrency:
begin
s:='Number';
end;
ftdatetime, ftdate, fttime:
begin
s:='Date';
end;
else
begin
s:='Others';
end;
end;
memo1.Lines.Add(s #9 IntToStr(FieldSize));
end
else
ShowMessage('找不到欄位[商品名稱]');
end;

------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
系統時間:2024-05-06 0:52:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!