Dataset not in edit or insert mode |
缺席
|
chi120
一般會員 發表:16 回覆:16 積分:6 註冊:2007-08-28 發送簡訊給我 |
如附件檔所示
在dbGrid 新增一筆資料時,在TTable的OnCalcFields有判斷 IF Tbprdsir.Active = False THEN Tbprdsir.Active := True; key in 資料key到某欄位時,卻出現dataset not in edit or insert mode @@ 一直找不出原因,請各位大大指點 謝謝
------
Aki..就算沒有明天 |
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
chi120
一般會員 發表:16 回覆:16 積分:6 註冊:2007-08-28 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
chi120
一般會員 發表:16 回覆:16 積分:6 註冊:2007-08-28 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
chi120
一般會員 發表:16 回覆:16 積分:6 註冊:2007-08-28 發送簡訊給我 |
procedure TDataModule1.TbprdsirCalcFields(DataSet: TDataSet);
var Vwgt,Vwgt1,Vwgt2,Vwgt3,Vwgt4,Vwgt5 : real; xarea : array[1..5] of Real; w,h1,h2 : real; WT,HT1,HT2:string; I,X : integer; begin IF TbBase.Active = False THEN TbBase.Active := True; IF Tbprdsir.Active = False THEN Tbprdsir.Active := True; IF Tbprdfigs.Active = False THEN Tbprdfigs.Active := True; Vwgt := 0; Vwgt1 := 0; Vwgt2 := 0; Vwgt3 := 0; Vwgt4 := 0; Vwgt5 := 0; IF (Tbprdsir.FieldByName('area1').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub1').asstring]),[loCaseInsensitive]) then Vwgt1 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area1').asfloat; IF (Tbprdsir.FieldByName('area2').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub2').asstring]),[loCaseInsensitive]) then Vwgt2 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area2').asfloat; IF (Tbprdsir.FieldByName('area3').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub3').asstring]),[loCaseInsensitive]) then Vwgt3 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area3').asfloat; IF (Tbprdsir.FieldByName('area4').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub4').asstring]),[loCaseInsensitive]) then Vwgt4 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area4').asfloat; IF (Tbprdsir.FieldByName('area5').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub5').asstring]),[loCaseInsensitive]) then Vwgt5 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area5').asfloat; Vwgt := Rounda(Vwgt1 Vwgt2 Vwgt3 Vwgt4 Vwgt5); if Vwgt > 0 THEN BEGIN Tbprdsir.FieldByname('uwgt').asfloat := Vwgt; Tbprdsir.FieldByname('per1').asfloat := Roundb(Vwgt1/Vwgt); Tbprdsir.FieldByname('per2').asfloat := Roundb(Vwgt2/Vwgt); Tbprdsir.FieldByname('per3').asfloat := Roundb(Vwgt3/Vwgt); Tbprdsir.FieldByname('per4').asfloat := Roundb(Vwgt4/Vwgt); END; end;
------
Aki..就算沒有明天 |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
===================引 用 chi120 文 章=================== procedure TDataModule1.TbprdsirCalcFields(DataSet: TDataSet); var Vwgt,Vwgt1,Vwgt2,Vwgt3,Vwgt4,Vwgt5 : real; xarea : array[1..5] of Real; w,h1,h2 : real; WT,HT1,HT2:string; I,X : integer; begin IF TbBase.Active = False THEN TbBase.Active := True; IF Tbprdsir.Active = False THEN Tbprdsir.Active := True; IF Tbprdfigs.Active = False THEN Tbprdfigs.Active := True; Vwgt := 0; Vwgt1 := 0; Vwgt2 := 0; Vwgt3 := 0; Vwgt4 := 0; Vwgt5 := 0; IF (Tbprdsir.FieldByName('area1').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub1').asstring]),[loCaseInsensitive]) then Vwgt1 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area1').asfloat; IF (Tbprdsir.FieldByName('area2').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub2').asstring]),[loCaseInsensitive]) then Vwgt2 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area2').asfloat; IF (Tbprdsir.FieldByName('area3').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub3').asstring]),[loCaseInsensitive]) then Vwgt3 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area3').asfloat; IF (Tbprdsir.FieldByName('area4').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub4').asstring]),[loCaseInsensitive]) then Vwgt4 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area4').asfloat; IF (Tbprdsir.FieldByName('area5').asstring <> '') THEN if TbBase.Locate('factory;rubno',VarArrayOF([Tbprdsir.FieldByname('factory').asstring, Tbprdsir.FieldByname('rub5').asstring]),[loCaseInsensitive]) then Vwgt5 := DataModule1.TbBase.FieldByName('desity').AsFloat*0.01*Tbprdsir.FieldByName('area5').asfloat; Vwgt := Rounda(Vwgt1 Vwgt2 Vwgt3 Vwgt4 Vwgt5); if Vwgt > 0 THEN BEGIN // 只要確定以下五個欄位都是計算欄位, 而不是實體欄位, 就不會錯了 Tbprdsir.FieldByname('uwgt').asfloat := Vwgt; Tbprdsir.FieldByname('per1').asfloat := Roundb(Vwgt1/Vwgt); Tbprdsir.FieldByname('per2').asfloat := Roundb(Vwgt2/Vwgt); Tbprdsir.FieldByname('per3').asfloat := Roundb(Vwgt3/Vwgt); Tbprdsir.FieldByname('per4').asfloat := Roundb(Vwgt4/Vwgt); END; end; |
chi120
一般會員 發表:16 回覆:16 積分:6 註冊:2007-08-28 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |