资料库的计算、显示功能的实现 |
答題得分者是:cashxin2002
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
如图所示
所要实现的功能如下:
当四个框中的内容都输好后,也就是在数量这个EDIT的KEYPRESS事件中的代码的书写问题。当输入数量后按回车键,发生的事件1.将四个框中的内容填入到一个临时表中,再加入一个单项累计金额(等于单价*数量)字段,一共是五个字段加到临时表中,二,在下面的MEMO中显示内容,也就是等于临时表中的内容中的五个字段。(不知道是直接从EDIT中转到MEMO中,还是MEMO到表中取字段内容,哪一种方式好)三,光标还是要跳回到第一个EDIT框,也就是拼音码那等待输入,因为不知道要收几个项目的,收一个项目临时表中就多一行记录,MEMO中也多一行显示(至于如何及何时停止,我自己已经处理好了,我只要停止前的那一段代码)四,在这个过程中在收费清单(MEMO)下面还有一个EDIT框,叫累计应收,每回车一次这个数字也在不断计算变化,当然他的值肯定等于单项累计的总计了,在有一个项目的时候也就是回车一次的时候这个值就有了。 發表人 - ntjrr 於 2005/05/21 22:19:54
------
我的编程起步于ktop,我将永远支持ktop |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
我想了一下,不用MEMO做收费清单显示,用DBGRID,这样的话录入的项目是到数据表中的,而DBGRID又是在表中取数据的,这样就两全其美了,各位前辈,不知道我的想法是否可行?就是说用DBGRID控件做一个收费清单显示方式是否合适?另外又有两个问题如图:
1.图中的单价部份,在EDTI框中录入时如有小数,在DBGRID中显示就会错误,变成很长很长的数字了。但我看了一下数据库表中的显示是正确的,两位小数就是显示的两位。
2.单项累计产生的公式和代码如何写? 發表人 - ntjrr 於 2005/05/22 12:16:15
------
我的编程起步于ktop,我将永远支持ktop |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
小数的问题我已解决,参照了有关资料,将字段设为双精度型就好了。
单项累计的公式和代码我也运行成功了,不懂这么写对不对,有没有什么弊端?
ADOTable2.Last;
ADOTable2.Insert;
ADOTable2.FieldByName('项目名称').AsString := Edit5.Text;
ADOTable2.FieldByName('单价').AsString := Edit6.Text;
ADOTable2.FieldByName('规格').AsString := Edit7.Text;
ADOTable2.FieldByName('数量').AsString := Edit8.Text;
ADOTable2.FieldByName('单项累计').AsFloat := StrToFloat(Edit6.Text)*StrToFloat(Edit8.Text);
ADOTable2.Post;
------
我的编程起步于ktop,我将永远支持ktop |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 語法上是沒有錯﹐第一句ADOTable2.Last;可以不需要﹐因為ADOTable顯示資料本來就是依据索引排序的﹐除非對其下Sort的方法來手動排序﹒
如果是需要把資料加在ADOTable2的最后﹐可試試保留第一句﹐再把第二句改為ADOTable2.Append; 元件取得輸入焦點的方法為﹕元件名稱.SetFocus;(如Edit1.SetFocus)﹐照您的要求﹐可寫在ADOTable1的AfterPost事件中﹒ Memo元件的照片沒有看到﹐利用Memo元件取得資料表中的資料﹐建議從資料表中抓取資料來源﹐而不要從Edit中取得﹐因為這樣可以直接取得[單項累計]的值﹐參考如下方法﹕
如果是在執行時期手動Open ADOTable2﹐則可在ADOTable2資料集元件的AfterOpen事件中﹐先取出目前所有資料﹐并加入到Memo元件中顯示﹐如果是設計時期就Open ADOTable2﹐則可在Form的OnActivate事件中﹐先取出目前所有資料﹐加入到Memo元件中顯示﹕ begin ADOTable2.First; Memo1.Clear; While Not ADOTable2.Eof do begin Memo1.Lines.Add(ADOTable2.FieldByName('項目名稱').AsString + ' ' + ADOTable2.FieldByName('規格').AsString + ' ' + ADOTable2.FieldByName('單價').AsString + ' ' + ADOTable2.FieldByName('數量').AsString + ' ' + FloatToStr(ADOTable2.FieldByName('單項累計').AsFloat); ADOTable2.Next; end; end; 然后在ADOTable2的BeforePost事件中記錄下當前新增的資料鍵值欄位值﹐在AfterPost中把新增的資料內容追加到Memo中即可﹕ 在Private區域宣告一個變數Str﹐用于記錄鍵值欄位值﹐然后在ADOTable2的BeforePost事件中鍵入 begin Str := ADOTable2.FieldByName('項目名稱').AsString; end; 在ADOTable2的AfterPost事件中將新增資料抓出并加入到Memo中 begin ADOTable2.Locate('項目名稱', Str, []); Memo1.Lines.Add(ADOTable2.FieldByName('項目名稱').AsString + ' ' + ADOTable2.FieldByName('規格').AsString + ' ' + ADOTable2.FieldByName('單價').AsString + ' ' + ADOTable2.FieldByName('數量').AsString + ' ' + FloatToStr(ADOTable2.FieldByName('單項累計').AsFloat); end;供參考﹐其它還有什么問題﹖ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |