dbcombobox無法顯示問題 |
答題得分者是:Fishman
|
Fen
一般會員 發表:18 回覆:17 積分:7 註冊:2003-10-20 發送簡訊給我 |
各位大大,請幫我看一下我的程式是否有誤:我再維護情況時,是用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 發送簡訊給我 |
Hi:
引言:看起來你在新增時,用的是標示紅色這一段 SQL Command,因有將 Null 值 Assign 給 Field 動作,基本上,此 Query 為 ReadOnly,並無法進行新增、修改、刪除之動作 我嘗試用在 C/S 架構下用 BDE & TQuery 試過(DB 為 Oracle),如此寫法,並沒有辦法將 Request Live 屬性設為 True,亦即該 DataSet 為 ReadOnly -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------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 |
Fen
一般會員 發表:18 回覆:17 積分:7 註冊:2003-10-20 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
Fen
一般會員 發表:18 回覆:17 積分:7 註冊:2003-10-20 發送簡訊給我 |
|
Fen
一般會員 發表:18 回覆:17 積分:7 註冊:2003-10-20 發送簡訊給我 |
感謝前輩的指導,雖然我不是用你的方法,但也因為這樣的討論讓我想出了方法來,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就可以編輯了。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |