DELPHI 報表TABLE數值問題 |
答題得分者是:kgt
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
我抓取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 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
先將程式碼拆成較簡單的部分如下
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 發送簡訊給我 |
那...順道我想問你喔
我在裡面增加的
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 發送簡訊給我 |
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 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
痾...該怎麼說呢
首先 我做了兩各按鍵
第一各按鍵 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 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
於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 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
目前程式碼改成這樣了 ===============================================================
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 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |