Function裡的SQL欄位如何重新讀取呢? |
尚未結案
|
goodjimmy
一般會員 發表:20 回覆:26 積分:9 註冊:2004-02-19 發送簡訊給我 |
請問各位高手,我現在正在做條件判斷時,有著不同欄位要讀進FUNCTION以便分析圖表的組合,可是呢~第一次判斷「平均住院日」是成功的,如果再一次選擇其他判斷「病人性別比率」,functio裡的sql欄位,卻仍停留在上一次判斷,會出現錯誤訊息
//以下是function function TForm2.mSQL(mitem: string; str: string): string; begin DataModule1.ADOQuery2.Close; DataModule1.ADOQuery2.SQL.Clear; DataModule1.ADOQuery2.SQL.Text:='Select ' pk ',' mitem ' from ' table ' where ' str ' and ' pk ' between ' '''' startday '''' ' and ' '''' endday '''' ' group by ' pk; DataModule1.ADOQuery2.Open; end; function TForm2.dSQL(ditem: string): string; begin DataModule1.ADOQuery3.Close; DataModule1.ADOQuery3.sql.Clear; DataModule1.ADOQuery3.SQL.Text:='Select ' pk ',' ditem ' from ' table ' where ' pk ' between ' '''' startday '''' ' and ' '''' endday '''' ' group by ' pk; DataModule1.ADOQuery3.Open; end; //以下是判斷的程式,放置在button物件中 if (Node.Text = '平均住院日') then begin table := 'INH '; pk := 'INH_YYYMM'; mitem := 'SUM(INH_SUMDAY)'; str := 'INH_SEX =' '1'; ditem := 'SUM(INH_PTCT)'; mSQL(mitem, str); dSQL(ditem); start := 'INH_SEX'; add := 'SUM(INH_SUMDAY) , SUM(INH_PTCT) '; FormSQL(start, add); end else if (Node.Text = '病人性別比率') then begin table := 'INH '; pk := 'INH_YYYMM'; mitem := 'SUM(INH_PTCT)'; str := 'INH_SEX =' '1'; ditem := 'SUM(INH_PTCT)'; mSQL(mitem, str); dSQL(ditem); start := 'INH_SEX'; add := 'SUM(INH_PTCT)'; FormSQL(start, add); end; //以下是主FormSQL的分析圖表程式 function TForm2.FormSQL(start: string; add: string): string; var I, SUM: Integer; AddVal: Double; begin if (PageControl2.ActivePageIndex = 1) then begin DBChart2.LeftAxis.Title.Caption := '¤ñ²v'; DBChart2.BottomAxis.Title.Caption := '¤é´Á'; DBChart2.Title.Text.Text := Node.Text ' ¨k©Ê¤ÀªR'; if (Node.Text = '¥§¡¦í°|¤é') then begin DBChart2.LeftAxis.Title.Caption := '¤Ñ¼Æ'; Series4.ValueFormat := '#,##0.###¤Ñ'; Series5.ValueFormat := '#,##0.###¤Ñ'; Series6.ValueFormat := '#,##0.###¤Ñ'; end; Series4.XLabelsSource:=''; Series4.YValues.ValueSource :=''; while not DataModule1.ADOQuery2.EOF do begin Series4.DataSource := DataModule1.ADOQuery2; Series4.XLabelsSource := DataModule1.ADOQuery2.Fields[0].FieldName; Series4.YValues.ValueSource := DataModule1.ADOQuery2.Fields[1].FieldName; DataModule1.ADOQuery2.Next; end; Series5.XLabelsSource :=''; Series5.YValues.ValueSource :=''; while not DataModule1.ADOQuery3.EOF do begin Series5.DataSource := DataModule1.ADOQuery3; Series5.XLabelsSource := DataModule1.ADOQuery3.Fields[0].FieldName; Series5.YValues.ValueSource := DataModule1.ADOQuery3.Fields[1].FieldName; DataModule1.ADOQuery3.Next; end; for I := 0 to DBChart2.Series[0].Count - 1 do begin if (Node.Text = '¥§¡¦í°|¤é') then AddVal := Series4.YValue[I] / Series5.YValue[I] else AddVal := (Series4.YValue[I] / Series5.YValue[I])*100; if (I = 0) then SUM := 0 else if (I > 0) then SUM := SUM 1; if ((StrToInt(showmonth) I) > 12) then begin showmonth := '01'; SUM := 0; if (StrToInt(showyear) 1 > 092) then showyear := '093' else if (StrToInt(showyear) 1 > 091) then showyear := '092' end; Series6.addxy(I, AddVal, showyear '¦~' IntToStr(StrToInt(showmonth) SUM) '¤ë', clDefault); end; Series4.Active := false; Series5.Active := false; end; end; |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Hi, 不太容易看出來問題的所在, 請問你有使用中斷點來確認是否有執行正確的 sql command 嗎? 弟猜測你的
if (Node.Text = '平均住院日') then begin .... end else if (Node.Text = '病人性別比率') then begin .... end;這段程式碼有問題, 可能兩個條件都不對, 而導致你所謂的 sql 欄位保持為上一次的查詢, 試看加上一個中斷點來確認 [病人性別比率] 的這段程式碼有被執行到!! 或最後加上一個 else ShowMessage(Node.Text + 'is not in my code'); 讓兩個條件皆不成功時, 也能得到回應! 另外錯誤訊息為何呢? |
goodjimmy
一般會員 發表:20 回覆:26 積分:9 註冊:2004-02-19 發送簡訊給我 |
嗯!!有,我有測試過,判斷式都可以正確執行,出現的錯誤的訊息 Project PHiseis.exe raised exception class EDatabase Error with message 'ADOQuery2:Field 'SUM(INH_PTCT)'not fount'.Process Stopped 它會告訴我ADOQUERY物件中的上一個欄位值找不到而中斷點停留在
mSQL(mitem, str);使用ADOQuery2物件
dSQL(ditem);使用ADOQuery3的物件 謝謝您的討論,我想有可能是SQL的值,無法動態更新,才會導致查詢的值無法動態更動,在FormSQL中ADOQUERY2,ADOQuery3的陣列迴圈無法找到正確的欄位,這是我的想法方向,提供大家參考
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
由你的錯誤訊息看來, 可能是組合好的 SQL Command 有問題, 方便的話, 建議你在 mSQL 中, 在 open 之前, 先秀出來或存成文字檔來看, 確認 sql command 無誤, 如,
function TForm2.mSQL(mitem: string; str: string): string; begin ... ShowMessage(DataModule1.ADOQuery2.Text); DataModule1.ADOQuery2.Open; end;另外一個有可能原因則是 FieldName 的關係造成, 也請你先將有 sum(xxx) 的欄位, 給定一個 alias name, 如 SUM(INH_PTCT) 改為 SUM(INH_PTCT) as INH_PTCP_SUM 這樣, 以確認是否為 FieldName 造成. 另外請問一下你的資料庫種類為何? |
goodjimmy
一般會員 發表:20 回覆:26 積分:9 註冊:2004-02-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |