到处复制的,做个记号吧。
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
---------------------------------