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

版主呀,是不是Lookup對應的欄位一定要最先輸入呀?

答題得分者是:T.J.B
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-10 09:47:27 IP:61.141.xxx.xxx 未訂閱
謝謝您的回復, 在DBGrid中做Lookup時,當我先輸入其它欄位的值時出現"未知的錯誤已發生",只有先輸入了Lookup對應欄位的值后,再輸入其它欄位就不會出現這個錯誤了. 但這樣很不合理呀,請問有什麼解決方法?
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-10 10:44:06 IP:61.220.xxx.xxx 未訂閱
做lookup欄位時 必須做 (i) key Fields (ii)DataSet   (iii) lookup keys (iiii) ResultField    這四項設定  而 第(i)(iii)項的value Type 必須是相同的   這樣才能join在一起   不知道你的問題在哪 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
天外來客
初階會員


發表:22
回覆:199
積分:44
註冊:2001-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-10 11:44:24 IP:61.141.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-10 13:47:57 IP:61.220.xxx.xxx 未訂閱
因為你把作為key值的unit給刪除了  所以會發生錯誤 而且就算不發生錯誤 你DbGrid裡的資料也會重複 進一步出現不正確的資料    所以不要把unit刪除應該就可以了 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-10 15:22:59 IP:61.141.xxx.xxx 未訂閱
只是刪除了DBGrid1中的Unit,在ADODataSet1中Unit還是存在的,改變DBGrid1中的Name時,ADODataSet1中的unit會一起改變,在表A中,主鍵是Code Scode,Unit是允許重復的,
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-10 15:56:31 IP:61.220.xxx.xxx 未訂閱
我用Ado元件照著做一遍 沒有問題ㄚ 但是你說要修改lookup 的欄位值 也就是 name的值 因為是無法改的 所以沒辦法動lookup欄位值 但是其他的都可以ㄝ 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-10 16:07:57 IP:61.141.xxx.xxx 未訂閱
那就奇怪. 并不是要改變Lookup的值,只是在name中選擇不同的值. 您在新增時先輸入別的值(未選擇name,或unit以前),不會出現"未知的錯誤已發生"嗎?
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-10 16:21:18 IP:61.141.xxx.xxx 未訂閱
可能是我的數據庫有問題,剛用另一台機的數據庫作過測試,可能通過. 謝謝您的回復
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-10 17:00:21 IP:61.141.xxx.xxx 未訂閱
我找到了真正的問題所在,那就是B表中的id是Sql Server2000自動維護,即id定義為:create table B(id int Identity(1,1),name varchar(30) not null); 再作Lookup時,在DBGrid中先錄入其它欄時就出現"未知的錯誤已發生". 在不改變表的定義的情況下,我不知道怎麼解決這個問題
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-10 17:21:57 IP:61.220.xxx.xxx 未訂閱
不要用lookup取值  改用SQL Join語法來做 試試看 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-11 08:26:09 IP:61.141.xxx.xxx 未訂閱
能不能具體一點,怎樣用Sql join來實現?
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-09-11 09:20:48 IP:61.220.xxx.xxx 未訂閱
引言: 能不能具體一點,怎樣用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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-09-11 09:58:35 IP:61.141.xxx.xxx 未訂閱
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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-09-11 11:44:26 IP:61.220.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-10-18 14:34:05 IP:61.177.xxx.xxx 未訂閱
我以前也遇到這問題,只要將計算欄位lookupcache設為true即可!但在DBgrid中,只有把欄位輸滿才可自動顯示(如欄位20碼,資料10碼,需補空格),否則需在下筆資料或保存後才可自動顯示
系統時間:2024-05-14 5:27:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!