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

DELPHI 報表TABLE數值問題

答題得分者是:kgt
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-18 17:03:57 IP:60.248.xxx.xxx 未訂閱
我抓取TABLE裡面的數值 當我搜尋 可以抓的到數值 可是 同一筆資料 為什麼會出現三筆呢 變成重複出現 以下是程式碼 ==================================================== begin Close; Params.Clear; Params.CreateParam(ftString ,'PARTNO', ptInput ); Params.CreateParam(ftString ,'EMPNAME', ptInput ); Params.CreateParam(ftString ,'REASONCODE', ptInput ); Params.CreateParam(ftString ,'DUTYCODE', ptInput ); Params.CreateParam(ftString ,'REPAIRREMARK', ptInput ); Params.CreateParam(ftString ,'eDATE',ptInput); Params.CreateParam(ftString ,'eDATE2',ptInput); sS := 'select SERIAL_NUMBER,WORK_ORDER,PART_NO,EMP_NAME,REPAIR_TIME,REASON_CODE,DUTY_CODE,LOCATION,REPAIR_REMARK ' 'from SAJET.G_SN_REPAIR A,SAJET.SYS_PART B,SAJET.SYS_HT_EMP C,SAJET.SYS_REASON D,SAJET.SYS_HT_DUTY E,SAJET.G_SN_REPAIR_REMARK F '; sS := sS 'WHERE A.MODEL_ID = B.PART_ID( ) '; sS := sS 'AND A.MODEL_ID LIKE :PARTNO '; sS := sS 'AND A.REPAIR_EMP_ID = C.EMP_ID( ) '; sS := sS 'AND A.REPAIR_EMP_ID LIKE :EMPNAME '; sS := sS 'AND A.REASON_ID = D.REASON_ID( ) '; sS := sS 'AND D.REASON_ID LIKE :REASONCODE '; sS := sS 'AND A.DUTY_ID = E.DUTY_ID( ) '; sS := sS 'AND E.DUTY_ID LIKE :DUTYCODE '; sS := sS 'AND A.RECID = F.RECID( ) '; sS := sS 'AND F.RECID LIKE :REPAIRREMARK '; sS := sS 'AND TO_CHAR(REPAIR_TIME,''YYYYMMDD'') BETWEEN :eDATE and :eDATE2 '; sS := sS 'Order By REPAIR_TIME '; Params.ParamByName('PARTNO').AsString := Trim(edit1.Text) '%'; Params.ParamByName('EMPNAME').AsString := Trim(edit2.Text) '%'; Params.ParamByName('REASONCODE').AsString := Trim(edit2.Text) '%'; Params.ParamByName('DUTYCODE').AsString := Trim(edit2.Text) '%'; Params.ParamByName('REPAIRREMARK').AsString := Trim(edit2.Text) '%'; Params.ParamByName('eDATE').AsString := FormatDateTime('YYYYMMDD',DateTimePicker1.DateTime); Params.ParamByName('eDATE2').AsString := FormatDateTime('YYYYMMDD',DateTimePicker2.DateTime); CommandText := sS; open; ==========================================================
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-18 18:17:59 IP:61.219.xxx.xxx 未訂閱
應該是您的where條件在join的過程不恰當,或是需要再增加gooup by的條件, 因無法了解您的E-R Diagram及Data,故較難追蹤,一般會先請較資深的同事看一下會較快找出原因。
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-18 20:05:47 IP:203.64.xxx.xxx 未訂閱
gooup by 的增加條件為何呢 如何增加呢 我不懂這各指令呢 WHERE 的地方 是因為我原本SELECT的TABLE 的欄位值都是代碼 我在去LIKE 另一各TABLE 把正確的值帶出 所以....才下這麼多條件
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-18 21:03:15 IP:61.219.xxx.xxx 未訂閱
先將程式碼拆成較簡單的部分如下
select SERIAL_NUMBER,
       WORK_ORDER,
       PART_NO,
       EMP_NAME,
       REPAIR_TIME,
       REASON_CODE,
       DUTY_CODE,
       LOCATION,
       REPAIR_REMARK 
  FROM G_SN_REPAIR A,
       SYS_PART B,
       SYS_HT_EMP C,
       SYS_REASON D,
       SYS_HT_DUTY E,
       G_SN_REPAIR_REMARK F
 WHERE A.MODEL_ID      = B.PART_ID( )
   AND A.REPAIR_EMP_ID = C.EMP_ID( )
   AND A.REASON_ID     = D.REASON_ID( )
   AND A.DUTY_ID       = E.DUTY_ID( )
   AND A.RECID         = F.RECID( )
 Order By REPAIR_TIME
再來,於WHERE中再縮小範圍至G_SN_REPAIR A的KEY FIELD,例如A.SERIAL_NUMBER,加至WHERE中,-->WHERE A.SERIAL_NUMBER = '001', 看其結果為何?再DEBUG.
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-18 21:18:51 IP:203.64.xxx.xxx 未訂閱
那...順道我想問你喔 我在裡面增加的 1.Params.ParamByName('XXXX').AsString := Trim(edit1.Text) '%'; 跟 2.Params.CreateParam(ftString ,'XXXX', ptInput ); 實際作用是什麼呢? 我會不會加太多 因為我不是很懂他的指令作用 PART_NO EMPNAME REASONCODE DUTYCODE REPAIRREMARK 因為我發生了 我在edit1 的欄位上搜尋 會出現error
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-19 06:57:45 IP:61.219.xxx.xxx 未訂閱
hi lovemari: 1.Params.ParamByName('XXXX').AsString := Trim(edit1.Text) '%';--> 因SQL語法中會有限制條件,由使用者輸入的參數值,要代入SQL時來使用。 2.Params.CreateParam(ftString ,'XXXX', ptInput );--> 類似宣告變數。 實際作用是什麼呢? 我會不會加太多 因為我不是很懂他的指令作用--> 有需要再加,加愈多,查詢速度愈慢喔。 PART_NO EMPNAME REASONCODE DUTYCODE REPAIRREMARK 因為我發生了 我在edit1 的欄位上搜尋會出現error --> 這點描述得不清楚。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-20 22:04:02 IP:222.184.xxx.xxx 未訂閱
我是新手,不知道上述代码Params.Clear;和Params.sql.Clear;是不是完全一样的效果的。 發表人 - ntjrr 於 2005/11/20 22:04:43
------
我的编程起步于ktop,我将永远支持ktop
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-21 07:56:55 IP:60.248.xxx.xxx 未訂閱
痾...該怎麼說呢 首先 我做了兩各按鍵 第一各按鍵 QUERY 有時間點限制 一搜尋 就可以時間內所有資料全部叫出 這各是OK 第二各按鍵 SEARCH 是在上述條件中 再加上 某些特定條件 加上欄位EDIT 1跟 2 譬如 PART_NO OR SERIAL NUMBER 這時候就出現問題了 明明QUERY搜尋到 但是 這時候 他就秀出NO DATA 程式碼就是上述 可以幫我看一下 我看都沒啥問題@@
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-21 10:11:39 IP:60.248.xxx.xxx 未訂閱
不好意思喔 欄位問題我已經解決了 只剩下 同筆資料 會連續出現三筆 這還解決不了
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-21 11:55:03 IP:210.243.xxx.xxx 未訂閱
於WHERE中再縮小範圍至G_SN_REPAIR A的KEY FIELD,例如A.SERIAL_NUMBER,加至WHERE中,-->WHERE A.SERIAL_NUMBER = '001', 看其結果為何?再DEBUG. 您可以查一下DISTINCT或GROUP BY的語法, http://www.techonthenet.com/oracle/index.php
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-11-21 14:57:56 IP:60.248.xxx.xxx 未訂閱
痾... sS := sS 'A.SERIAL_NUMBER = ''001'' '; 加入此項 可以COMPILE 執行發生錯誤= =
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-11-21 21:00:50 IP:61.219.xxx.xxx 未訂閱
請copy下列,試一下: sS := sS + ' A.SERIAL_NUMBER = '''001''' ';
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-11-22 07:57:24 IP:60.248.xxx.xxx 未訂閱
001 變成紫色 無法COMPILE....@@"
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-11-22 07:59:17 IP:60.248.xxx.xxx 未訂閱
目前程式碼改成這樣了 =============================================================== Params.CreateParam(ftString ,'PARTNO', ptInput ); Params.CreateParam(ftString ,'SN', ptInput ); Params.CreateParam(ftString ,'eDATE',ptInput); Params.CreateParam(ftString ,'eDATE2',ptInput); sS := 'select SERIAL_NUMBER,WORK_ORDER,PART_NO,EMP_NAME,REASON_CODE,DUTY_CODE,LOCATION,REASON_DESC,REPAIR_REMARK,REPAIR_TIME ' 'from SAJET.G_SN_REPAIR A,SAJET.SYS_PART B,SAJET.SYS_HT_EMP C,SAJET.SYS_REASON D,SAJET.SYS_HT_DUTY E,SAJET.G_SN_REPAIR_REMARK F '; sS := sS 'WHERE A.MODEL_ID = B.PART_ID( ) '; sS := sS 'AND B.PART_NO LIKE :PARTNO '; sS := sS 'AND A.REPAIR_EMP_ID = C.EMP_ID( ) '; sS := sS 'AND SERIAL_NUMBER LIKE :SN '; sS := sS 'AND A.REASON_ID = D.REASON_ID( ) '; sS := sS 'AND A.DUTY_ID = E.DUTY_ID( ) '; sS := sS 'AND A.RECID = F.RECID( ) '; sS := sS 'AND TO_CHAR(REPAIR_TIME,''YYYYMMDD'') BETWEEN :eDATE and :eDATE2 '; sS := sS 'Order By REPAIR_TIME '; Params.ParamByName('PARTNO').AsString := Trim(edit2.Text) '%'; Params.ParamByName('SN').AsString := Trim(edit1.Text) '%'; Params.ParamByName('eDATE').AsString := FormatDateTime('YYYYMMDD',DateTimePicker1.DateTime); Params.ParamByName('eDATE2').AsString := FormatDateTime('YYYYMMDD',DateTimePicker2.DateTime); ====================================================================
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-11-22 15:19:54 IP:211.22.xxx.xxx 未訂閱
不好意思 是我這邊資料庫的問題 我抓錯TABLE 那各TABLE 同筆資料有三各欄位 所以才跑出三筆資料ˇ修正 謝謝你喔
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-11-22 16:20:13 IP:60.248.xxx.xxx 未訂閱
PS.不好意思喔 我可以在請教各問題嗎 我想在已存檔的報表自動修正欄位的寬高 需要加什麼指令嗎 ======================================================= S := csTemp2.Fieldbyname ('SERIAL_NUMBER').DisplayLabel ',' csTemp2.Fieldbyname ('WORK_ORDER').DisplayLabel ',' csTemp2.Fieldbyname ('PART_NO').DisplayLabel ',' csTemp2.Fieldbyname ('EMP_NAME').DisplayLabel ',' csTemP2.Fieldbyname ('REPAIR_TIME').DisplayLabel ',' csTemp2.Fieldbyname ('REASON_CODE').DisplayLabel ',' csTemp2.Fieldbyname ('REASON_DESC').DisplayLabel ',' csTemp2.Fieldbyname ('DUTY_CODE').DisplayLabel ',' csTemP2.Fieldbyname ('LOCATION').DisplayLabel ',' csTemP2.Fieldbyname ('REPAIR_REMARK').DisplayLabel; Writeln(F, S); csTemp2.first; while not csTemp2.Eof do begin S := csTemp2.Fieldbyname('SERIAL_NUMBER').AsString ',' csTemp2.Fieldbyname('WORK_ORDER').AsString ',' csTemp2.Fieldbyname('PART_NO').AsString ',' csTemp2.Fieldbyname('EMP_NAME').AsString ',' csTemp2.Fieldbyname('REPAIR_TIME').AsString ',' csTemp2.Fieldbyname('REASON_CODE').AsString ',' csTemp2.Fieldbyname('DUTY_CODE').AsString ',' csTemp2.Fieldbyname('LOCATION').AsString ',' csTemp2.Fieldbyname('REPAIR_REMARK').AsString; Writeln(F, S); =======================================================
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
系統時間:2024-04-26 11:58:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!