版主呀,是不是Lookup對應的欄位一定要最先輸入呀? |
答題得分者是:T.J.B
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
天外來客
初階會員 發表:22 回覆:199 積分:44 註冊:2001-11-27 發送簡訊給我 |
A表欄位如下:code,scode,usage,unit,;
unit欄位對應B表的id,
B表欄位如下:id,name; ADOQuery1.sql.add('select * from B'); ADODataSet1.commandtext:='select * from A';
雙擊ADODataSet1後,選擇Add all Fields,再加一個New Field,DataSet選擇ADOQuery1,Key Fields選擇unit,Lookup Keys 選擇id,ResultField選擇name 在DBGrid的DataSource為ADODataSet1對應的DataSource1,雙擊DBGrid1,選擇Add all Fields,刪除unit. 運行時如先輸入非name,就出現"未知的錯誤已發生"
引言: 做lookup欄位時 必須做 (i) key Fields (ii)DataSet (iii) lookup keys (iiii) ResultField 這四項設定 而 第(i)(iii)項的value Type 必須是相同的 這樣才能join在一起 不知道你的問題在哪 回首來時路 也無風雨也無晴~~@.@ >>< face="Verdana, Arial, Helvetica"> |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 能不能具體一點,怎樣用Sql join來實現?例如 : Select A.code,A.scode,A.Usage,A.unit,B.name From A Left Join B on B.id=A.unit order by A.unit <---如需要排序的話 這樣 只需要一個ADOQuery的元件 而且 select 出來的 B.name 也等於是lookup的欄位 但要注意的是 如果你只需要A 與B 都符合才秀出來 則在 Left Join 的地方改為 inner join 就可以了 回首來時路 也無風雨也無晴~~@.@
------
天行健 君子當自強不息~~@.@ |
dialog
一般會員 發表:33 回覆:18 積分:10 註冊:2002-09-07 發送簡訊給我 |
ADODataSet1.CommandText:='select A.code,A.scode,A.usage,A.unit,B.name from A left join B on A.unit=B.id';
現在要對A表進行Append,要新增ADODataSet1.FieldByName('name').AsString的值來給unit賦值,或者給unit一個值後,在DBGrid1的name欄位顯示出來. 因為name屬于B表,保存時出錯說:B表的id不能insert Null
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: ADODataSet1.CommandText:='select A.code,A.scode,A.usage,A.unit,B.name from A left join B on A.unit=B.id'; 現在要對A表進行Append,要新增ADODataSet1.FieldByName('name').AsString的值來給unit賦值,或者給unit一個值後,在DBGrid1的name欄位顯示出來. 因為name屬于B表,保存時出錯說:B表的id不能insert Null既然你最初是當做LOOKUP的欄位 你為什麼要去新增一個NAME值呢 從你的錯誤訊息來說 你不應該去新增一個name值 而是要去新增A表所有欄位的值 此時A.unit的值必須在B.id中也找的到 當資料存回資料庫後 自然會帶出對應B.name的值 但是如果A.unit的值在B.id中找不到 而B.id又是KEY值 當然會發生(B表的id不能insert Null)的錯誤 < >< > 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/09/11 11:56:19 發表人 - T.J.B 於 2002/09/11 12:00:59
------
天行健 君子當自強不息~~@.@ |
richcomp
中階會員 發表:18 回覆:66 積分:51 註冊:2002-10-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |