全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1629
推到 Plurk!
推到 Facebook!

dbcombobox無法顯示問題

答題得分者是:Fishman
Fen
一般會員


發表:18
回覆:17
積分:7
註冊:2003-10-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-03 12:08:12 IP:61.219.xxx.xxx 未訂閱
各位大大,請幫我看一下我的程式是否有誤:我再維護情況時,是用MoldIssueNotice ,MoldIssueNoticePartsDetail ,Detail2D 這3個table跩娶明細資料,但新增時只用detail2d抓取明細,因為在detail2d中沒有MoldPurpose , MoldCycle , CompleteDate_Tag這3個欄位,故用空值帶入,而 MoldPurpose , MoldCycle 這2個欄位是dbcombobox型態,可讓使用者自行選取,但是很奇怪的是,在新增的情況,這2個欄位只能看到選項,卻不行選,想請各位大大幫忙一下,看是否我的程式有誤,感恩! if not QueryCheck.Eof then if tableDetail2D.Active then tableDetail2D.Active := False; try begin tableDetail2D.SQL.Clear; tableDetail2D.SQL.Add('SELECT C.PrtId , C.NKPRTNM , C.FTPrtNm,C.MoldId,C.MCSNo,C.MaterialDesc,C.CfmMold,C.MMCfmFile as cfmFileName,C.PartMoldNo,B.CompleteDate_Tag,B.MoldPurpose,B.MoldCycle'); tableDetail2D.SQL.Add('FROM MoldIssueNotice A,MoldIssueNoticePartsDetail B,Detail2D C'); tableDetail2D.SQL.Add('Where A.IssueNotice=B.IssueNotice AND A.DevCode=C.DevCode AND A.Gender=C.Gender AND A.Size=C.Size AND B.PrtId=C.PrtId'); tableDetail2D.SQL.Add('AND (A.DevCode = :Para1) AND (A.Gender = :Para2) AND (A.Size = :Para3) AND (C.MoldType = :Para4)'); tableDetail2D.Parameters.ParamByName('Para1').Value := txtDevCode.Text; tableDetail2D.Parameters.ParamByName('Para2').Value := txtGender.Text; tableDetail2D.Parameters.ParamByName('Para3').Value := txtSize.Text; tableDetail2D.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1); tableDetail2D.Active := True; if tableDetail2D.FieldValues['MoldPurpose'] = Null then begin if tableDetail2D.Active = True then tableDetail2D.Active := False; tableDetail2D.SQL.Clear; tableDetail2D.SQL.Add('SELECT PrtId , NKPRTNM , FTPrtNm , MoldId , MCSNo , '); tableDetail2D.SQL.Add(' MaterialDesc , CfmMold , MMCfmFile as cfmFileName ,PartMoldNo'); tableDetail2D.SQL.Add(' , '''' as MoldPurpose , '''' as MoldCycle , '''' as CompleteDate_Tag '); tableDetail2D.SQL.Add('FROM Detail2D WHERE DevCode = :Para1 AND Gender = :Para2 AND Size = :Para3 AND MoldType = :Para4'); tableDetail2D.Parameters.ParamByName('Para1').Value := txtDevCode.Text; tableDetail2D.Parameters.ParamByName('Para2').Value := txtGender.Text; tableDetail2D.Parameters.ParamByName('Para3').Value := txtSize.Text; tableDetail2D.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1); tableDetail2D.Active := True; tableDetail2D.Next; end; tableDetail2D.Next; end; except end;
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-03 13:39:53 IP:210.65.xxx.xxx 未訂閱
Hi:    
引言:
if not QueryCheck.Eof then
    if tableDetail2D.Active then
        tableDetail2D.Active := False;
    try
        begin
            tableDetail2D.SQL.Clear;
            tableDetail2D.SQL.Add('SELECT C.PrtId , C.NKPRTNM , C.FTPrtNm,C.MoldId,C.MCSNo,C.MaterialDesc,C.CfmMold,C.MMCfmFile as cfmFileName,C.PartMoldNo,B.CompleteDate_Tag,B.MoldPurpose,B.MoldCycle');
            tableDetail2D.SQL.Add('FROM MoldIssueNotice A,MoldIssueNoticePartsDetail B,Detail2D C');
            tableDetail2D.SQL.Add('Where A.IssueNotice=B.IssueNotice AND A.DevCode=C.DevCode AND A.Gender=C.Gender AND A.Size=C.Size AND B.PrtId=C.PrtId');
            tableDetail2D.SQL.Add('AND (A.DevCode = :Para1) AND (A.Gender = :Para2) AND (A.Size = :Para3) AND (C.MoldType = :Para4)');
            tableDetail2D.Parameters.ParamByName('Para1').Value := txtDevCode.Text;
            tableDetail2D.Parameters.ParamByName('Para2').Value := txtGender.Text;
            tableDetail2D.Parameters.ParamByName('Para3').Value := txtSize.Text;
            tableDetail2D.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1);
            tableDetail2D.Active := True;
            if tableDetail2D.FieldValues['MoldPurpose'] = Null then
                begin
                    if tableDetail2D.Active = True then
                    tableDetail2D.Active := False;
                    tableDetail2D.SQL.Clear;
                    tableDetail2D.SQL.Add('SELECT PrtId , NKPRTNM , FTPrtNm , MoldId , MCSNo , ');
                    tableDetail2D.SQL.Add(' MaterialDesc , CfmMold , MMCfmFile as cfmFileName ,PartMoldNo');
                    tableDetail2D.SQL.Add(' , '''' as MoldPurpose , '''' as MoldCycle , '''' as CompleteDate_Tag ');
                    tableDetail2D.SQL.Add('FROM Detail2D WHERE DevCode = :Para1 AND Gender = :Para2 AND Size = :Para3 AND MoldType = :Para4');
                    tableDetail2D.Parameters.ParamByName('Para1').Value := txtDevCode.Text;
                    tableDetail2D.Parameters.ParamByName('Para2').Value := txtGender.Text;
                    tableDetail2D.Parameters.ParamByName('Para3').Value := txtSize.Text;
                    tableDetail2D.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1);
                    tableDetail2D.Active := True;
                    tableDetail2D.Next;
                end;
            tableDetail2D.Next;
        end;
    except
end;
看起來你在新增時,用的是標示紅色這一段 SQL Command,因有將 Null 值 Assign 給 Field 動作,基本上,此 Query 為 ReadOnly,並無法進行新增、修改、刪除之動作 我嘗試用在 C/S 架構下用 BDE & TQuery 試過(DB 為 Oracle),如此寫法,並沒有辦法將 Request Live 屬性設為 True,亦即該 DataSet 為 ReadOnly -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Fen
一般會員


發表:18
回覆:17
積分:7
註冊:2003-10-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-03 13:47:54 IP:61.219.xxx.xxx 未訂閱
恩,沒錯,再這段程式之後我試圖要把一些值都進去,可是都出現不能修改的訊息,那我應該怎麼改比較好ㄋ?能不能請前輩們給點意見。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-03 14:23:37 IP:210.65.xxx.xxx 未訂閱
Hi:    那建議你使用 UpdateSQL 元件搭配 TQuery 來試試,因為以你的程式碼看來,你修改的 DataSet 來源有三個 Table,該 DataSet 也應該是 ReadOnly,搜尋一下網站,應該可以找到關於 UpdateSQL 的用法 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Fen
一般會員


發表:18
回覆:17
積分:7
註冊:2003-10-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-03 14:49:20 IP:61.219.xxx.xxx 未訂閱
可是我用的是adoQuery元件,該如何做ㄋ?
Fen
一般會員


發表:18
回覆:17
積分:7
註冊:2003-10-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-03 15:53:43 IP:61.219.xxx.xxx 未訂閱
感謝前輩的指導,雖然我不是用你的方法,但也因為這樣的討論讓我想出了方法來,post上來跟大家分享一下。 if not QueryCheck.Eof then         if tableDetail2D.Active then             tableDetail2D.Active := False;     try         begin             tableDetail2D.SQL.Clear;             tableDetail2D.SQL.Add('SELECT C.PrtId , C.NKPRTNM , C.FTPrtNm,C.MoldId,C.MCSNo,C.MaterialDesc,C.CfmMold,C.MMCfmFile as cfmFileName,C.PartMoldNo,B.CompleteDate_Tag,B.MoldPurpose,B.MoldCycle');             tableDetail2D.SQL.Add('FROM MoldIssueNotice A,MoldIssueNoticePartsDetail B,Detail2D C');             tableDetail2D.SQL.Add('Where A.IssueNotice=B.IssueNotice AND A.DevCode=C.DevCode AND A.Gender=C.Gender AND A.Size=C.Size AND B.PrtId=C.PrtId');             tableDetail2D.SQL.Add('AND (A.DevCode = :Para1) AND (A.Gender = :Para2) AND (A.Size = :Para3) AND (C.MoldType = :Para4)');                tableDetail2D.Parameters.ParamByName('Para1').Value := txtDevCode.Text;             tableDetail2D.Parameters.ParamByName('Para2').Value := txtGender.Text;             tableDetail2D.Parameters.ParamByName('Para3').Value := txtSize.Text;             tableDetail2D.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1);             tableDetail2D.Active := True;                tableDetail2D.Next;         end;     except     end;        begin         try             if tableDetail2D.State <> dsEdit then                 tableDetail2D.Edit;             if QueryCheck1.Active then                 QueryCheck1.Active := False;             QueryCheck1.SQL.Clear;             QueryCheck1.SQL.Add('SELECT PrtId , NKPRTNM , FTPrtNm , MoldId , MCSNo , ');             QueryCheck1.SQL.Add(' MaterialDesc , CfmMold , MMCfmFile as cfmFileName ,PartMoldNo');             QueryCheck1.SQL.Add('FROM Detail2D WHERE DevCode = :Para1 AND Gender = :Para2 AND Size = :Para3 AND MoldType = :Para4');                QueryCheck1.Parameters.ParamByName('Para1').Value := txtDevCode.Text;             QueryCheck1.Parameters.ParamByName('Para2').Value := txtGender.Text;             QueryCheck1.Parameters.ParamByName('Para3').Value := txtSize.Text;             QueryCheck1.Parameters.ParamByName('Para4').Value := copy(txtMoldType.Text, 1, 1);             QueryCheck1.Active := True;             tableDetail2D.FieldValues['CfmMold'] := QueryCheck1.FieldValues['CfmMold'];             tableDetail2D.FieldValues['cfmFileName'] := QueryCheck1.FieldValues['cfmFileName'];             tableDetail2D.FieldValues['FTPrtNm'] := QueryCheck1.FieldValues['FTPrtNm'];             tableDetail2D.FieldValues['MCSNo'] := QueryCheck1.FieldValues['MCSNo'];             tableDetail2D.FieldValues['MaterialDesc'] := QueryCheck1.FieldValues['MaterialDesc'];             tableDetail2D.FieldValues['PrtId'] := QueryCheck1.FieldValues['PrtId'];             tableDetail2D.FieldValues['NKPRTNM'] := QueryCheck1.FieldValues['NKPRTNM'];             tableDetail2D.FieldValues['MoldId'] := QueryCheck1.FieldValues['MoldId'];             tableDetail2D.FieldValues['PartMoldNo'] := QueryCheck1.FieldValues['PartMoldNo'];             tableDetail2D.FieldValues['MoldPurpose'] := wwDBComboBox1.Text;             tableDetail2D.FieldValues['MoldCycle'] := wwDBComboBox2.Text;                tableDetail2D.Post;             tableDetail2D.Next;         except         end;     end;    新增的那段已刪除,因為會導致dataset變成readonly,所以我先將dataset狀態設為可編輯,再用另一個adoquery將我要的值撈出來,在塞回原來的adoquery中,這樣我的dbcombobox就可以編輯了。
系統時間:2024-11-25 16:44:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!