yanyyx

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

到处复制的,做个记号吧。

TFieldKind   =   (fkData,   fkCalculated,   fkLookup,   fkInternalCalc,   fkAggregate);   
  fkData Field   represents   a   physical   field   in   a   database   table  
  fkCalculated Field   is   calculated   in   an   OnCalcFields   event   handler  
  fkLookup Field   is   a   lookup   field.  
  fkInternalCalc Field   is   calculated   but   values   are   stored   in   the   dataset.  
  fkAggregate Field   represents   a   maintained   aggregate   in   a   client   dataset.

 

ftData:就是Table目前的實際欄位

ftCalculated:這是一個計算欄位,是動態產生,是一個虛擬欄位,這個欄位都是寫在TDataSet(TTabel,TQuery) OnCalcFields事件。例如要計算合計金額 = 單價*數量,但資料庫未訂合計欄位,此時您便可以新增一個CalculatedField,在OnCalcFields事件寫上DataSet.FieldByName('合計').AsInteger := DataSet.FieldByName('單價').AsInteger*DataSet.FieldByName;('數量').AsInteger;即可以動態取得合計金額

ftLookup:這也是動態產生,是一個虛擬欄位。使用方法您可以參考
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25137我所寫的解答

 

fkInternalCalc:這也是動態產生,是一個虛擬欄位,與ftCalculated類似,不過是用在TClientDataSet這個元件。

fkAggregate:這也是動態產生,是一個虛擬欄位,不過也是用在TClientDataSet這個元件。它可以做一些數字的運算,例Sum,Avg,Count,Min,Max等。

---------------------------------

附贴子

表結構如下:
貨品資料(mis001):貨品編碼,品名規格,單位等等。
出庫單身(mis002):出庫單號,貨品編碼,數量等等。
單位(mis003):序號,單位。

Form1用DBGrid编辑出库单身资料,ADOQuery的SQL文本如下:

Select mis002.*,mis001.品名规格,mis003.单位
From mis003 inner join (mis001 inner join mis002 on mis001.货品编码=mis002.货品编码) on mis003.序号=mis001.单位

新增修改都没问题但无法删除,
错误提示:
delete语句与column reference 约束‘FK_mis001_mis003’冲突,

如果表间不建立关联,输出库单身资料时无法即时看到品名规格和单位资料,
--

您可以使用Lookup Field或Calculated Field來解決在出庫單身即時看到品名、規格及單位資料。
以Lookup Field為例:
1、在Form1增加一個ADOQuery,SQL: Select 貨品編碼、品名規格,單位 From mis001。
2、對原本的ADOQuery DblClick 叫出Fields Editor,按右鍵New Field。
3、New Field的設定如下:(以品名為例)

[Field Properties]
Name:Product_Name        Component:系統給定
Type:選擇Product_Name的型態    Size:給Product_Name的大小
[Field Type]
選擇Lookup
[Lookup Definition]
Key Fields:指定貨品編碼的欄位名稱 DataSet:指要Lookup的DataSet指剛新增的ADOQuery
Lookup Keys:指定貨品編碼的欄位名稱 Result Field:指從剛新增的ADOQuery要回傳的欄位,指定品名欄位名稱



以上是回傳品名的例子,規格及單位必須依照以上步驟,再新增兩個欄位
如此是用Delphi取代用資料庫產生關連取得其他Table(表格)欄位的方法,你可以試試看…

這一個錯誤是由於表格有設foreign key所造成的,主要是MASTER-DETIAL的原因,當你要刪除MASTER時,一定要先將DETAIL刪除資料才會讓你刪除MASTER

---------------------------------


 

posted on 2009-02-02 16:21  Yanyyx  阅读(1135)  评论(0编辑  收藏  举报