29
การสร้างรายงานด้วย Report Designer ขั้นสูง ระหว่างวันที่ ๑๘ ๒๐ มกราคม ๒๕๕๕ จัดโดย .บางกอก เมดิคอล ซอฟแวร์ จากัด 2 ชั้น 2 .8 .สุขสวัสดิ33 แขวง/เขต ราษฎร์บูรณะ กรุงเทพฯ เรียบเรียงโดย นายสุชาติ จันต๊ะวงศ์ นักวิชาการสาธารณสุขชานาญการ สานักงานสาธารณสุขอาเภอเชียงกลาง

การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การสรางรายงานดวย Report Designer ขนสง ระหวางวนท ๑๘ – ๒๐ มกราคม ๒๕๕๕

จดโดย

บ.บางกอก เมดคอล ซอฟแวร จ ากด 2 ชน 2 ม.8 ซ.สขสวสด 33 แขวง/เขต ราษฎรบรณะ กรงเทพฯ

เรยบเรยงโดย นายสชาต จนตะวงศ นกวชาการสาธารณสขช านาญการ ส านกงานสาธารณสขอ าเภอเชยงกลาง

Page 2: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

หลกสตรอบรมผดแลระบบ

การสรางรายงานดวย Report Designer ขนสง

วตถประสงค

1. เพอเพมศกยภาพใหผเขารวมอบรมมความร ความเขาใจ และสามารถเลอกใชเครองมอ

(Components) ในก าหนดรปแบบการแสดงผลรายงานในรปแบบตางๆ ทมอยใน Report Designer ไดอยาง

เหมาะสม

2. เพอเพมศกยภาพใหผเขารวมอบรมมความร ความเขาใจ สามารถสราง แบบฟอรม และรายงาน

ส าหรบหนวยบรการไดอยางมประสทธภาพสงสด

เนอหา

1. การใช Sub Report ในการสรางรายงาน เพอใหรายงานแสดงผลไดดและสวยงามยงขน

2. การใช Crosstab ในการสรางรายงานทซบซอนขน

3. การสรางรายงานโดย การเขยน Script ในโปรแกรม Report Designer

4. การเปรยบเทยบความสามารถและเทคนคการแสดงผลรายงาน ดวย Components

5. การเปรยบเทยบความสามารถและเทคนคการแสดงผลรายงาน ดวยการเขยน Script ในรายงาน

เหมาะส าหรบ: ผทผานการอบรมการสรางรายงานดวย Report Designer ขนประยกต หรอผทมทกษะ

ความรเรองค าสง SQL การใชงาน Report Designer และการเขยนโปรแกรม

ระยะเวลาในการอบรม 3 วน /รน

วนท 18-20 มกราคม 2555

สถานทอบรม

บรษท บางกอก เมดคอล ซอฟตแวร จ ากด

2 ชน 2 ม.8 ซ.สขสวสด 33 ถ.สขสวสด แขวง/เขต ราษฎรบรณะ กรงเทพฯ

คาลงทะเบยนทานละ 7,000 บาท (เจดพนบาทถวน) (รวมคาเอกสาร อาหารกลางวน 3 มอ อาหารวาง 6 มอ)

ตารางการอบรม

วนท 1

- การใช Sub Report ในการสรางรายงาน

- แบบฝกหด

วนท 2

- การใช Crosstab ในการสรางรายงาน

- แบบฝกหด

วนท3

- การเขยน Script ในรายงาน

- การเลอกใชวธสรางรายงานใหเหมาะสมกบรายงาน

- แบบฝกหด

Page 3: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การใช Sub Report ในการสรางรายงาน เพอใหรายงานแสดงผลไดดและสวยงามยงขน

ตวอยางรายงาน

รายงานทะเบยนการตรวจรกษาผปวย

ตงแตวนท ถงวนท

ชอโรงพยาบาล

ล าดบ วนท HN ชอ – สกล รวมคาใชจาย

การวนจฉยโรค

หตถการ

รายการยา

วธการสรางรายงาน

๑. สรางค าสง SQL ค าสงหลก

Select CONCAT(pname,fname,” “,lname) AS ptname,o.*

From ovst o,patient pt

Where o.hn = pt.hn and o.vstdate Between “2011-10-01” and “2011-10-31”

ในเมน SQL Query ของโปรแกรม HOSxP และทดลอง Run

Page 4: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

2. การสรางชวงวนททตองการระบ ๒.๑ การประกาศตวแปรวนท

ทแถบ Calc ประกาศตวแปรวนทโดยก าหนด และคลก Declarations var date1,date2 : datetime; ds1,ds2 : string; เสรจแลวลอง Compile ตวแปรด

๒.๒ การสรางกลองวนท Dialog ทแถบ Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน - ท Code Toolbox เลอก String - เลอกแถบ Language เลอกฟงกชน GetDateRangeDialog(date1, date2); ลากมาวางใต begin และ

ตวแปร date1 และdate2 จะตองตรงกบชอตวแปร datetime ทประกาศใน var ในทนเขยนไดดงน GetDateRangeDialog(date1, date2);

๒.๓ เปลยนรปแบบวนทใหกลายเปนรปแบบ พ.ศ. โดยใชฟงกชน FormatDateTime(Format, aDateTime); ท Code Toolbox เลอก Format เลอกแถบ Language เลอกฟงกชน FormatDateTime(Format, aDateTime); ลากไปวางใตค าสง ฟงกชน GetDateRangeDialog(date1, date2); และสรางตวแปรมารบคา โดยใชตวแปรทไดประกาศตวแปรไวท Declarations ไดแก ds1,ds2 : string; ไปวางหนาฟงกชน ในทนเขยนค าสงฟงกชนไดดงน

ds1 := FormatDateTime('yyyy-mm-dd', date1); ds2 := FormatDateTime('yyyy-mm-dd', date2);

Page 5: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

- เสรจแลวลอง compile และ preview

2.4 สรางกลองวนทในตวรายงานทหนา Design

ใชกลองเครองมอ Variable มาวางตรงทตองการชวงวนท แลวคลกขวาท variable เลอก calculations… แลวก าหนดคาวนทใหตรงตวแปรทเราตองการ เชน คาแรกก าหนดเปน Value := date1; คาทสองก าหนดเปน Value := date๒; เสรจแลว ก าหนดชนดขอมลเปน date time ทบรเวณมมขวาบน หรออกวธการสรางวนทโดยใชรปแบบการเชอมค าโดยใช + ในการสรางกลอง variable เพยงกลองเดยว แลวก าหนดเปน Value := FormatThaiDate('D MMMM EEEE', date1)+' ' +'ถง'+' '+ FormatThaiDate('D MMMM EEEE', date2);

Page 6: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

๓. การสรางตวแปรของขอมลทตองการ

3.1 คดลอกค าสงไปวางใน Calc ตามหลงฟงกชน ChangeReportSQL(sql); โดยวางแทน sql โดยใส

เครองหมาย ‘’กอน แลวด าเนนการเชอมค า ผลทได ChangeReportSQL('select concat(pname,fname," ",lname) as ptname,o.* '+

' from ovst o ,patient pt '+

' where o.hn = pt.hn and o.vstdate '+

' between "'+ds1+'" and "'+ds2+'" and (o.an is null or o.an = "") order by o.vn ');

โดยวางถดจากฟงกชนของวนท เสรจแลว ลอง compile และ preview ด จะได ทแถบ data จะม จะปรากฏชอ DBPipeline

3.2 ออกแบบรายงานในหนา Design โดยด าเนนการดงน - การสรางล าดบทให RUN อตโนมต โดยใชเครองชอ DBcalc คลกใตชอล าดบในแถบ Detail แลวคลกขวาท variable เลอก calculations… Calc Type เลอก Count คลก OK

- การสรางวนท โดยใชเครองมอทชอวา DBtext คลกวางในแถบ Detail ทแถบ DBPipeline ขางบน

เลอก vstdate - การสราง HN โดยใชเครองมอทชอวา DBtext คลกวางในแถบ Detail ทแถบ DBPipeline ขางบนเลอก hn

- การสราง ชอ – สกล โดยใชเครองมอทชอวา DBtext คลกวางในแถบ Detail ทแถบ DBPipeline ขางบน

เลอก ptname - การสราง รวมคาใชจาย โดยใชเครองมอ Variable วาง แลวคลกขวา variable เลอก calculations… ก าหนดคาตวแปร variable โดยท Code Toolbox เลอก Math เลอกฟงกชน GetSQLDoubleData(sql); มาวางตอจาก Value := และเขยนค าสง sql เปน Value := GetSQLDoubleData('select sum(sum_price) from opitemrece where vn ="'+DBPipeline['vn']+'"'); อยาลมการเชอมค าดวย + และการก าหนดคา vn = ใหใช DBPipeline['vn'] จากแถบ data ลากมาวางแทนการพมพใน "'++'" การเปลยนคา รวมคาใชจาย ใหเปนรปตวเลขทมทศนยม ๒ ต าแหนง โดยเปลยนลกษณะขอมล

เปน Double คลกขวาท Variable ของรวมคาใชจาย เลอก Display Format… เลอกลกษณะขอมลท

เปนตวเลขทมทศนยม จ านวนทศนยมสามารถพมพเพมได

Page 7: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การใช Sub Report

๔. การออกแบบการวนจฉยโรค

- น าขอมลทตองการจากตาราง ovstdiag

- รปแบบทตองการแสดงผล

๑. รหสโรคหลก : [PDx] ชอโรค

๒. รหสโรครอง : [ตวเลข] ชอโรค หมายเหต ตวเลขจะแสดงDiagType

- ค าสงทตองการ

Select i.name,o.vn,o.icd10,o.diagtype,

IF (o.diagtype = “1”,CONCAT(“[PDx] “,i.name),CONCAT(“[“,o.diagtype,”]”,i.name)) AS

diagname

From ovstdiag o,icd101 i

Where o.icd10 = i.code and o.vn = “521118071753”

Order by o.diagtype

- การใชแถบเครองมอ Sub Report มาวางทแถบ Detail ใตขอมลทออกแบบไวกอนแลว เสรจ

แลวไปก าหนดคณสมบตของขอมลโดยไปเลอกทแถบ Properties For SubReport1 ทแถบ Data

เลอก DataPipeline คลกเลอก DBPipelineLink1

- ไปท Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน

๑. ท Code Toolbox เลอก String เลอกแถบ Language เลอกฟงกชน ChangeDBPipeLineLink1SQL(sql); เสรจแลวน าค าสงทตองการไปวางแทน sql (‘’) และแกไขคาตวแปร vn โดยใชคาของ "'+DBPipeline['vn']+'" มาวางแทน จะไดค าสงเปน

ChangeDBPipeLineLink1SQL('select i.name,o.vn,o.icd10,o.diagtype, '+ 'if(o.diagtype="1",concat("[PDx] ",i.name) ,concat("[",o.diagtype,"] ",i.name )) as diagname '+ 'from ovstdiag o , icd101 i '+ 'where o.icd10 = i.code and o.vn = "'+DBPipeline['vn']+'" '+ 'order by o.diagtype');

๒. เสรจแลว Compile และ Preview 1 รอบ สงเกตท Code Toolbox : Data เลอก DBPipeLineLink1 ทแถบ Data บน Fields For DBPipeLineLink1 จะมขอมลอย

๓. ด าเนนการ Copy ค าสงของ DBPipeLineLink1 ไปวางท Calc คลกขวาบรเวณทวาง เลอก Event ทแถบ Detail ของ Main : DBPipeLine คลก BeforeGenerate เสรจแลวลอง compile และ preview ด

Page 8: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

- ด าเนนการออกแบบรายงานทหนา Design ท Sub Report1: DBPipeLineLink1 โดยใช DBtext และ

เลอกขอมลใน DBPipeLineLink1 ใหตรงตามคาขอมลทตองการ

๕. การออกแบบหตถการ

- รปแบบทตองการแสดง

๑. หตถการทมาจาก ER ใหขนดวยค าวา ล าดบ [ER] ชอหตถการ

มาจากตาราง ER_regist_oper

๒. หตถการทมาจาก OPD ใหขนดวยค าวา ล าดบ [OPD] ชอหตถการ

มาจากตาราง doctor_operation

- ค าสงทตองการ

๑. เขยนค าสงทหตถการมาจาก ER

select e.icd9cm,o.er_oper_code,e.name,o.vn,concat("[ER] ",e.name) as o_name

from er_oper_code e

left outer join er_regist_oper o on e.er_oper_code = o.er_oper_code

where o.vn = “541111111”

๒. เขยนค าสงทหตถการมาจาก OPD

select e.icd9cm,o.er_oper_code,e.name,o.vn,concat("[OPD] ",e.name) as o_name from

er_oper_code e

left outer join doctor_operation o on e.er_oper_code = o.er_oper_code

where o.vn = “541111111”

๓. น าค าสงทไดทงสองมาเชอมกนโดยใชตวเชอมเปน Union

- การใชแถบเครองมอ Sub Report มาวางทแถบ Detail ใตขอมลทออกแบบไวกอนแลว เสรจ

แลวไปก าหนดคณสมบตของขอมลโดยไปเลอกทแถบ Properties For SubReport2 ทแถบ Data

เลอก DataPipeline คลกเลอก DBPipelineLink2

- ไปท Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน

๑. ท Code Toolbox เลอก String เลอกแถบ Language เลอกฟงกชน ChangeDBPipeLineLink๒SQL(sql); เสรจแลวน าค าสงทตองการไปวางแทน sql (‘’) และแกไขคาตวแปร vn โดยใชคาของ

"'+DBPipeline['vn']+'" มาวางแทน จะไดค าสงเปน ChangeDBPipeLineLink2SQL('select e.icd9cm,o.er_oper_code,e.name,o.vn,concat("[ER] ",e.name) as o_name '+ 'from er_oper_code e '+ 'left outer join er_regist_oper o on e.er_oper_code = o.er_oper_code '+

Page 9: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

'where o.vn = "'+DBPipeline['vn']+'" '+ 'union '+ 'select e.icd9cm,o.er_oper_code,e.name,o.vn,concat("[OPD] ",e.name) as o_name from er_oper_code e '+ 'left outer join doctor_operation o on e.er_oper_code = o.er_oper_code '+ 'where o.vn = "'+DBPipeline['vn']+'" ');

๒. เสรจแลว Compile และ Preview 1 รอบ สงเกตท Code Toolbox : Data เลอก DBPipeLineLink๒ ทแถบ Data บน Fields For DBPipeLineLink๒ จะมขอมลอย

๓. ด าเนนการ Copy ค าสงของ DBPipeLineLink๒ ไปวางท Calc คลกขวาบรเวณทวาง เลอก Event ทแถบ Detail ของ Main : DBPipeLine คลก BeforeGenerate เสรจแลวลอง compile และ preview ด

- ด าเนนการออกแบบรายงานทหนา Design ท Sub Report1: DBPipeLineLink๒ โดยใช DBtext และ

เลอกขอมลใน DBPipeLineLink๒ ใหตรงตามคาขอมลทตองการ

- การด าเนนการให Sub Report2 ไปตอทายกบขอมลของ Sub Report1 โดยคลกขวาท Sub Report2

เลอก ShiftRelativeTo… แลวเลอกใหตอทาย Sub Report1

๖. การออกแบบรายการยา

- รปแบบทตองการแสดง

ล าดบ ชอ + ความแรง # จ านวนทใช

มาจากตาราง drugitems และ opitemrece

- ค าสงทตองการ

select opitemrece.vn,concat(drugitems.name,"+",drugitems.strength,"#",

opitemrece.qty,drugitems.units) as d_name

from drugitems,opitemrece

where drugitems.icode = opitemrece.icode and opitemrece.vn =“541111111”

- การใชแถบเครองมอ Sub Report มาวางทแถบ Detail ใตขอมลทออกแบบไวกอนแลว เสรจ

แลวไปก าหนดคณสมบตของขอมลโดยไปเลอกทแถบ Properties For SubReport3 ทแถบ Data

เลอก DataPipeline คลกเลอก DBPipelineLink3

- ไปท Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน

๑. ท Code Toolbox เลอก String เลอกแถบ Language เลอกฟงกชน ChangeDBPipeLineLink๓SQL(sql); เสรจแลวน าค าสงทตองการไปวางแทน sql (‘’) และแกไขคาตวแปร vn โดยใชคาของ

"'+DBPipeline['vn']+'" มาวางแทน จะไดค าสงเปน

Page 10: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

ChangeDBPipeLineLink3SQL('select opitemrece.vn,concat(drugitems.name,"+", drugitems.strength,"#",opitemrece.qty,drugitems.units) as d_name '+

'from drugitems,opitemrece '+ ' where drugitems.icode = opitemrece.icode and opitemrece.vn = "'+DBPipeline['vn']+'" ');

๒. เสรจแลว Compile และ Preview 1 รอบ สงเกตท Code Toolbox : Data เลอก DBPipeLineLink๓ ทแถบ Data บน Fields For DBPipeLineLink๓ จะมขอมลอย

๓. ด าเนนการ Copy ค าสงของ DBPipeLineLink๓ ไปวางท Calc คลกขวาบรเวณทวาง เลอก Event ทแถบ Detail ของ Main : DBPipeLine คลก BeforeGenerate เสรจแลวลอง compile และ preview ด

- ด าเนนการออกแบบรายงานทหนา Design ท Sub Report3: DBPipeLineLink1 โดยใช DBtext และ

เลอกขอมลใน DBPipeLineLink๓ ใหตรงตามคาขอมลทตองการ

๗. การสรางเสนใหแสดงโดยใชการสรางกรปของขอมล ด าเนนการไปคลกท Report บนแถบเมนบาร

เลอก Groups… ทบลอกของเมน Groups ทแถบ Break 0 เลอก DBPipeLine:vn คลก Add แลว Ok

จะได Group Footer [0] : vn ใหสรางเสนใน Group น เสนจะปรากฏทรายการสดทายของเลขท VN นนๆ

๘. การสรางกรอบของขอมล โดยใชเครองมอ Region ไปวางท SubReport

ขอมลทน ามาแสดงในกรอบนไดแก อาการส าคญ อาการแสดง คาความดนโลหตสง คาน าหนก

สวนสง ฯลฯ โดยด าเนนการดงน

๑. สราง Sub Report ทจะแสดงขอมล

๒. ออกแบบรายการขอมลทตองการ โดยใชเครองมอ DBtext และเลอกขอมลท DBPipelineL

Page 11: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

๓. คลกทเครองมอ Region มาวางทบขอมลทไดออกแบบไว และคลกขวาทกรอบของ Region เลอก

sent to black เพอใหแสดงขอมล

๔. ถาอยากให กรอบ Region ไมแสดงในกรณทไมมขอมล ด าเนนการคลกเครองมอ Variable มา

วางใกลๆของกรอบ Region คลกขวาท Variable เลอก calculations… ก าหนดคาตวแปร

variable เชน กรณคาของ CC ใชฟงกชน

If DBText9.text <>’’ then

Region2.visible :=True

else

Region2.visible :=False;

ตองการรายงาน

รายงานแสดงคาใชจายในการรกษาพยาบาลโดยแยกตามสทธการรกษา

รหส สทธ คาใชจาย

ต.ค. พ.ย. ธ.ค. ม.ค. ก.พ. ม.ค. เม.ย.

๑. เขยนค าสงหลก

select o.pttype,pttype.name,sum(o.sum_price ) from opitemrece o, pttype ptt

where o.pttype = ptt.pttype and o.vstdate between "2009-10-01" and "2009-10-01

group by o.pttype

๒. หรอจะใชรปแบบการเขยน script ดงขอมลทตองการมาเกบไวชวคราวท TempReport แลวคอยดง

ขอมลมาประมวลผลอกท ดงน

unit Myptt; ตงชอ Scrip

procedure main; รปแบบหลกทตองม

var ประกาศตวแปร

mycds :TClientDataset;

Mycds2:TClientDataset;

date1, date2 :Tdatetime;

ds1,ds2 :string;

Page 12: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

begin

zquery.close; ใหปดรายงานเดมทเปดไวกอน

zquery.sql.text:='delete from tempreport where reportname="Myptt"'; ใหลบขอมลในรายงาน

เดมกอนเพอประหยดหนวยความจ า มผลตอความเรวในการประมวลผล

zquery.execsql;

if not getdaterange() then exit

date1 :=date_result1();

date2 :=date_result2();

ds1:=formatdatetime('YYY-MM-DD',date1);

ds2:=formatdatetime('YYY-MM-DD',date2);

Mycds:=TClientDataset.Create(nil);

Mycds.data:=hosxp_getdataset('select o.pttype,ptt.name,o.sum_price,o.vstdate '+

' from opitemrece o,pttype ptt '+

' where o.pttype = ptt.pttype '+

' and o.vstdate between "'+ds1+'" and "'+ds2+'" ');

Mycds2:= TClientDataset.Create(nil);

Mycds2.data:=hosxp_getdataset('select * from tempreport '+

' where reportname="Myptt"');

Mycds.First;

Mycds2.First;

while not Mycds.EOF do

begin

Mycds2.Insert;

Mycds2.FieldByName('reportname').AsString :='Myptt';

Mycds2.FieldByName('id').AsString :='Myptt';

Mycds2.FieldByName('name').AsString :=Mycds.FieldByName('pttype').Asstring;

Mycds2.FieldByName('name1').AsString :=Mycds.FieldByName('name').Asstring;

Mycds2.FieldByName('mon').Asinteger :=Mycds.FieldByName('sum_price').Asinteger;

Mycds2.FieldByName('date1').Asdatetime :=Mycds.FieldByName('vstdate').Asdatetime;

Mycds.Next;

Page 13: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

Mycds2.Next;

End;

If Mycds2.changecount>0 then

hosxp_updatedelta(Mycds2.delta,'select * from tempreport where reportname="Myptt"');

Showmessage('Success');

end;

end.

๓. ด าเนนการออกแบบรายงานในหนา Design

๔. การก าหนดปงบประมาณ โดยดงขอมลปเฉพาะทตองการออกมา ดวยการใชฟงกชน date_format

หรอ year รปแบบ (date_format(vstdate,”%Y”))+543 หรอ distinct(year(vstdate))+543

๕. ด าเนนการเขยนค าสง

begin

year:=GetPickupList('select distinct(year(date1))+543 as y '+

' from tempreport having y like "25%" order by y desc');

showMessage(year);

byear :=StrToInt(year)-544;

eyear :=StrToInt(year)-543;

m100 := encodedate(byear,10,01) ;

m101 := encodedate(byear,10,31) ;

m110 := encodedate(byear,11,01) ;

m111 := encodedate(byear,11,30) ;

m120 := encodedate(byear,12,01) ;

m121 := encodedate(byear,12,31) ;

m010 := encodedate(eyear,01,01) ;

m011 := encodedate(eyear,01,31) ;

m020 := encodedate(eyear,02,01) ;

m021 := encodedate(eyear,02,29) ;

m030 := encodedate(eyear,03,01) ;

m031 := encodedate(eyear,03,31) ;

m040 := encodedate(eyear,04,01) ;

m041 := encodedate(eyear,04,30) ;

m050 := encodedate(eyear,05,01) ;

Page 14: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

m051 := encodedate(eyear,05,31) ;

m060 := encodedate(eyear,06,01) ;

m061 := encodedate(eyear,06,30) ;

m070 := encodedate(eyear,07,01) ;

m071 := encodedate(eyear,07,31) ;

m080 := encodedate(eyear,08,01) ;

m081 := encodedate(eyear,08,31) ;

m090 := encodedate(eyear,09,01) ;

m091 := encodedate(eyear,09,30) ; oct := '"'+FormatDateTime('YYYY-MM-DD', m100)+'" and "'+FormatDateTime('YYYY-MM-DD', m101)+'"';

nov := '"'+FormatDateTime('YYYY-MM-DD', m110)+'" and "'+FormatDateTime('YYYY-MM-DD', m111)+'"';

dec := '"'+FormatDateTime('YYYY-MM-DD', m120)+'" and "'+FormatDateTime('YYYY-MM-DD', m121)+'"';

jan := '"'+FormatDateTime('YYYY-MM-DD', m010)+'" and "'+FormatDateTime('YYYY-MM-DD', m011)+'"';

feb := '"'+FormatDateTime('YYYY-MM-DD', m020)+'" and "'+FormatDateTime('YYYY-MM-DD', m021)+'"';

mar := '"'+FormatDateTime('YYYY-MM-DD', m030)+'" and "'+FormatDateTime('YYYY-MM-DD', m031)+'"';

apr := '"'+FormatDateTime('YYYY-MM-DD', m040)+'" and "'+FormatDateTime('YYYY-MM-DD', m041)+'"';

may := '"'+FormatDateTime('YYYY-MM-DD', m050)+'" and "'+FormatDateTime('YYYY-MM-DD', m051)+'"';

jun := '"'+FormatDateTime('YYYY-MM-DD', m060)+'" and "'+FormatDateTime('YYYY-MM-DD', m061)+'"';

jul := '"'+FormatDateTime('YYYY-MM-DD', m070)+'" and "'+FormatDateTime('YYYY-MM-DD', m071)+'"';

aug := '"'+FormatDateTime('YYYY-MM-DD', m080)+'" and "'+FormatDateTime('YYYY-MM-DD', m081)+'"';

sep := '"'+FormatDateTime('YYYY-MM-DD', m090)+'" and "'+FormatDateTime('YYYY-MM-DD', m091)+'"';

octTosep := '"'+FormatDateTime('YYYY-MM-DD', m100)+'" and "'+FormatDateTime('YYYY-MM-DD', m091)+'"';

ChangeReportSQL('select name as pttype,name1 as name,date1 as vstdate,mon as sum_price '+

'from tempreport where reportname = "Myptt" and vstdate between '+octTosep+' group by pttype ');

end;

๖. ใช DBText ในการออกแบบรายงาน

Page 15: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การใช Crosstab ในการสรางรายงานทซบซอนขน

ตวอยางรายงาน

ตองการรายงานแสดงจ านวนผมารบบรการแยกตามสทธการรกษา และแยกตามแพทยผรกษา

ด าเนนการดงน

๑. ขอมลทตองการไดมาจากตาราง vn_stat , opitemrece

๒. สรางกลองแสดงวนททตองการ

๓. เขยนค าสงหลกทตองการ

select v.pttype,v.dx_doctor,v.income,ptt.name as pttname,d.name as docname

from vn_stat v,pttype ptt,doctor d

where v.pttype=ptt.pttype and v.dx_doctor=d.code

and v.vstdate between "'+ds1+'" and "'+ds2+'"

order by d.code');

๔. ด าเนนการออกแบบรายงานในแถบ Design

คลกทปมเมน Crosstab มาวางท Title โดยปกตรายงานทสรางจาก Crosstab จะนยมสรางใน

สวน Title เพอใหแสดงผลครงเดยว ถาสรางในสวน Header หรอ Detail จะมการวนลปของรายงาน

ท าใหมการแสดงผลหลายครง

๕. คลกขวาทแถบ Cross Tab เลอกConfigure…

ทแถบเมน Configure Crosstab ด าเนนการออกแบบโดยจะใหขอมลอะไรโชวในคอลมน หรอขอมล

อะไรโชวในชองแถว เชนใหขอมลรหสสทธการรกษา แสดงในคอลมน และขอมลแพทยผรกษาแสดง

ในแถว จะด าเนนการดงน

- ลาก docname วางท new row

- ลาก pttype วางท new column

Page 16: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

- ลาก income มาวางตรงกลาง ระหวาง docname กบ pttype ท new value ซงโปรแกรมจะ

ก าหนดคาเรมตนท Sum และสามารถแกไขได

- ด าเนนแกไข ปรบปรงแบบรายงานตามทตองกน

- ลอง Preview ด

๖. การแกไขชอขอมลตางๆตองไปแกไขทค าสงหลก As……

Page 17: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การสรางรายงานโดย การเขยน Script ในโปรแกรม Report Designer

ทบทวน Pascal

รปแบบของโปรแกรม Pascal

Program

Var

Begin

End.

๑. สวนหวของโปรแกรม : Program Heading ลกษณะทใช

ใชในการตงชอของโปรแกรม รปแบบ

Program ชอโปรแกรม; ตวอยาง

MyFirstProgram; ๒. สวนหวการประกาศ : Declaration Part ลกษณะทใช

๑. ประกาศตวแปรทใชในโปรแกรม (Variable Declaration) รปแบบ Var ชอตวแปร : ชนดตวแปร; ตวอยาง Var date1,date2 : datetme; ds1,ds2 : string; ๒. ประกาศคาคงท (Constant Declaration) รปแบบ Const ชอคาคงท = คาทก าหนด; ตวอยาง Const Addon = 80; ๓. ประกาศชนดของขอมลทสรางขนใหม (Type Declaration) ตวอยาง Type Color = (red,green,blue); ๔. ประกาศตวแปรยอยในรปของ Procedure และ Function

3. สวนค าสง : Statement ลกษณะทใช ใชในการเขยนค าสงประมวลผล รปแบบ Begin Statement_1 Statement_2 ………..

Page 18: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

Statement_n End. ตวอยาง Program MyFirstProgram Begin ShowMessage(‘This is a Pascal Program’); End. Program MyFirstProgram Var IntegerVar : Integer; Begin IntegerVar := 3; ShowMessage(IntToStr(IntegerVar)); End.

ชนดของขอมล ๑. Integer เกบขอมลแบบตวเลขจ านวนเตม มคาระหวา –๓๒๗๖๘ ถง ๓๒๗๙๗ ๒. Real เกบขอมลแบบตวเลขจ านวนจรง ทประกอบดวยตวเลขจ านวนเตมและทศนยม ๓. Char เกบขอมลเปนตวอกขระ หรอตวอกษร เพยง ๑ ตว อาจจะเปนตวเลข, ตวอกษร, สญลกษณพเศษ ๔. String เกบขอมลทเปนขอความ ๕. Boolean เกบขอมลทเปนแบบตรรกศาสตร ทแสดงถงการตดสนใจวาขอมลนนจรง(True) หรอเทจ

(False) เครองหมายทางคณตศาสตร (Arithmetic Operator)

๑. เครองหมายบวก สญลกษณ + ๒. เครองหมายลบ สญลกษณ - ๓. เครองหมายคณ สญลกษณ * ๔. เครองหมายหาร สญลกษณ / ๕. เครองหมายหารตดเศษ สญลกษณ div ๖. เครองหมายหารเอาแตเศษ สญลกษณ mod ๗. ฟงกชนเพอค านวณการยกก าลงสองของX สญลกษณ sqr(x) ๘. ฟงกชนการหารากทสองของx สญลกษณ sqrt(x)

Page 19: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

Compound Statement รปแบบ IF Comdition1 Then Begin ….. End // end ตวแรกไมตองมเครองหมาย; Else Begin ….. End; การทางานแบบวนรอบ หรอทาซา (LOOP) เปนการเขยนค าสงเพอใหโปรแกรมวนท างานซ าค าสงเดม โดยการก าหนดเงอนไขในการวนรอบท างานจนกวาเงอนไขไมเปนจรง จงจะหยด ค าสง WHILE รปแบบ While Condition do Statement; หรอ While Condition do Begin Statement1; Statement2;

………………. Increment/Decrement;

End;

Data set Component

คอชดเครองมอทใชจดการชดขอมล เชน

- DBMS : Database Management System คอ โปรแกรมทท าหนาเปนตวกลางระหวางผใช (user) กบฐานขอมลเพอจดการและควบคมความถกตอง ความซ าซอน และความสมพนธระหวางขอมลตางๆ ภายในฐานขอมล เชน MySQL, Postgresql

- Connection Component

เชน

TMy Connection จะใชบอย

TSQL Connection จะใชตดตอฐานขอมล

Page 20: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

- Dataset Component จะใชในการสงงาน

เชน TMy Query , TSQL Dataset

ชนดของ Dataset

1. รปแบบทขอมลจะด าเนนการเปลยนแปลงทนทเมอใชงานและจ าเปนตองตดตอ (Connect) ฐานขอมล

ตลอดทใชงาน ไดแก

- TTable สามารถสงงานไดเลย โดยจะอางถง Tablename

- TQuery เชน SQL Text

2. Manual apply update after post ขอมลจะถกจ าคาไวทฐานจ าลองชวคราว และจะถกเปลยนท

ฐานขอมลเมอถกสงอกครง ไดแก

- TClient Dataset

Working with dataset

1. Dataset.Open เปด

2. Dataset.Insert / Append น าเขาขอมล

3. Dataset.Fields[x].Asxx := จะเกบคาขอมล [x] คอล าดบของคอลมน

4. Dataset.Post

5. Dataset.Close

เครองมอทมใน Script

Page 21: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

- ปมแรกลกษณะคลายสายฟาสเหลอง ท าหนาทคลายกบ Run หรอ Append ใน SQL Query ใน

Hosxp

- ปมทสอง คลายหนาเอกสารฉกครง ท าหนาท Load Template ซงเปนรปแบบในการเขยนค าสง

- ปมทสาม และปมทส คลายแวนขยาย ท าหนาทสวทซไปมาระหวางตวอกษร

- ปมทหา ท าหนาทโหลดไฟลทเปนภาษา Pascal จากภายนอกเขามา

ขนตอนการเขยน Script ในโปรแกรม Report Designer

๑. ตดตอกบฐานขอมล HOSxP

การใชงานในโปรแกรม Report Designer ปกตจะเชอมตอกบฐานขอมล HOSxP ตงแตเขาสโปรแกรม

แลว จงสามารถขามขนตอนนไปได

๒. สรางค าสง SQL เพอดงขอมลทตองการออกมาเกบไวท Dataset

๓. แสดงขอมลใน Dataset

ตวอยางการเขยน Script

วธการสรางตวแปรทมชนดเปน Dataset (TClient Dataset)

0. ตงชอโปรแกรม ประกาศตวแปร และสรางตวแปรทใชเกบขอมล

Unit MyScript; ชอโปรแกรม MyScript

Procedure main;

var Mycds:TClientDataset; ประกาศตวแปร

begin

Mycds:=TClientDataset.Create(nil); สรางขอมล Mycds ทมชนดเปน dataset (TClient Dataset) : nil ไมม

ใคร ลอยๆ วตถไมขนกบใครจะถกท าลายเมอปด Report

1. สงค าสง SQL เขาไปและดดขอมลมาไวใน Dataset

ฟงกชนทใช เชน hosxp_getdataset จะใชดดขอมล และเกบขอมลเปนนามสกล .data

Mycds.data:=hosxp_getdataset('select * from pttype order by pttype limit 10');

Mycds.First;

While not Mycds.EOF do

begin

2. แสดงขอมลใน Dataset จะตองระบใหแสดงขอมลในคอลมนใหน เชน

ShowMessage(Mycds.fields[0].AsString+' '+

Mycds.fieldByName('name').AsString);

Mycds.Next; ใหแสดงแถวแรก

end;

end;

Page 22: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

ขนตอนการน าขอมลไปเกบใน Temp Report

๑. ตรวจสอบกอนวามขอมลของ Report Name นหรอยงถามแลวใหด าเนนการลบทง

เชน select * from tempreport where reportname=’RB1T02’

Delete from tempreport where reportname=’RB1T02’

ฟงกชน

zquery.close; เพอใหปดฟอรมทเปดทงไว กอนจะสงใหด าเนนการตามค าสงใหม

zquery.open; อาจจะไมใชกได

zquery.sql.text:=’delete from tempreport where reportname=”Myscript”’; ใชลบขอมล

zquery.execsql;

๒. สงค าสง SQL ไปดงขอมลมาเกบใน Dataset

ประกาศตวแปรเพม

Mycds2:TClientDataset;

สรางตวแปรขนมา

Mycds2:= TClientDataset.Create(nil);

Mycds2.data:=hosxp_getdataset(‘select * from tempreport ‘+

‘ where reportname=”Myscript”’);

๓. น าขอมลไปเกบ

สงใหไปทคอลมนแรก

Mycds.First;

Mycds2.First;

น าขอมลจากmycds ไปเกบ Mycds2

while not Mycds.EOF do

begin

Mycds2.Insert; เพอบอกใหรวาเปนการใสคาให เหมอนการสงให อพเดดขอมล

Mycds2.FieldByName(‘reportname’).AsString :=’Myscript’;

Mycds2.FieldByName(‘id’).AsString :=’Myscript’;

Mycds2.FieldByName(‘name’).AsString :=Mycds.FieldByName(‘pttype’).Asstring;

Mycds2.FieldByName(‘name1’).AsString :=Mycds.FieldByName(‘name’).Asstring;

Mycds.Next;

Mycds2.Next;

End;

ค าสงการอพเดดขอมลลงในฐานขอมล

Page 23: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

If Mycds2.changecount>0 then เปนการตรวจสอบวามขอมลในตารางหรอไม มากกวาศนย

hosxp_updatedelta(Mycds2.delta,’select * from tempreport where reportname=”Myscript”’);

เปนฟงกชนทมอยแลว

Showmessage(‘Success’); เพอบอกใหร

ค าสงทได

unit myscript;

procedure main;

var

Mycds:TClientDataset;

Mycds2:TClientDataset;

onlineuser : string;

begin

onlineuser := report_value(2);

zquery.close;

zquery.sql.text:='delete from tempreport where reportname="Myscript" and id

="'+onlineuser+'"';

zquery.execsql;

Mycds:=TClientDataset.Create(nil);

Mycds.data:=hosxp_getdataset('select * from pttype order by pttype limit 10');

Mycds2:= TClientDataset.Create(nil);

Mycds2.data:=hosxp_getdataset('select * from tempreport '+

' where reportname="Myscript" and id ="'+onlineuser+'"');

Mycds.First;

Mycds2.First;

while not Mycds.EOF do

begin

Mycds2.Insert;

Mycds2.FieldByName('reportname').AsString :='Myscript';

Mycds2.FieldByName('id').AsString := onlineuser;

Mycds2.FieldByName('name').AsString :=Mycds.FieldByName('pttype').Asstring;

Mycds2.FieldByName('name1').AsString :=Mycds.FieldByName('name').Asstring;

Mycds.Next;

Mycds2.Next;

End;

Page 24: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

If Mycds2.changecount>0 then

hosxp_updatedelta(Mycds2.delta,'select * from tempreport where reportname="Myscript" and

id ="'+onlineuser+'"');

Showmessage('Success');

mycds.free;

mycds2.free;

end;

end.

จงเกบขอมลตอไปน ลงในตาราง TempReport

HN,ชอ – สกล,อาย(ป),สทธประจ าตว,วนเกด

โดยตงชอ reportname วา MyPatient 20 คนแรก

unit Mypatient;

procedure main;

Mycds:TClientDataset;

Mycds:=TClientDataset.Create(nil);

Mycds2:TClientDataset;

Mycds2:= TClientDataset.Create(nil);

Mycds.data:=hosxp_getdataset('select p.hn,concat(p.pname,p.fname," ",p.lname) as

name,v.age_y,ptt.name as nameptt,p.birthday '+

' from patient p,vn_stat v,pttype ptt '+

' where p.hn=v.hn and p.pttype=ptt.pttype '+

' LIMIT 20');

Mycds2.data:=hosxp_getdataset('select * from tempreport '+

' where reportname="Mypatient"');

Mycds.First;

Mycds2.First;

While not Mycds.EOF do

Begin

Mycds2.Insert;

Mycds2.FieldByName('reportname').AsString :='Mypatient';

Mycds2.FieldByName('id').AsString :='Mypatient';

Mycds2.FieldByName('name').AsString :=Mycds.FieldByName('hn').Asstring;

Mycds2.FieldByName('name1').AsString :=Mycds.FieldByName('name').Asstring;

Page 25: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

Mycds2.FieldByName('name2').AsString :=Mycds.FieldByName('age_y').Asstring;

Mycds2.FieldByName('name3').AsString :=Mycds.FieldByName('nameptt').Asstring;

Mycds2.FieldByName('name4').AsString :=Mycds.FieldByName('birthday').Asstring;

Mycds.Next;

Mycds2.Next;

End;

If Mycds2.changecount>0 then

hosxp_updatedelta(Mycds2.delta,'select * from tempreport where reportname="Mypatient"');

Showmessage('Success');

End;

End.

การแสดงขอมลในตารางRefer

|hn| | ชอ – สกล | เลขทrefer | สถานทสงมา | วนท

๑. เขยน Script ดดขอมลของคนไขทมารบบรการจากตาราง ovst ของคนไขทมารบบรการในชวงวนท

เลอกไวกอน

ค าสงทตองการ

select o.vn,o.hn,o.vestdate

from ovst o

left outer join patient p on o.hn=p.hn

where o.vstdate between “2011-01-01” and “2011-01-31”

๒. ด าเนนการเขยน Script

Unit myscript1;

Procedure main;

var

mycds :TClientDataset;

Mycds2:TClientDataset;

Begin

zquery.close;

zquery.sql.text:='delete from tempreport where reportname="Myscript1"';

zquery.execsql;

Mycds:=TClientDataset.Create(nil);

Mycds.data:=hosxp_getdataset('select o.vn,o.hn,concat(p.pname,p.fname," ",p.lname) as

Page 26: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

name,o.vstdate from ovst o left outer join patient p on o.hn=p.hn '+

' where o.vstdate between "2011-01-01" and "2011-01-31" LIMIT 10');

Mycds2:= TClientDataset.Create(nil);

Mycds2.data:=hosxp_getdataset('select * from tempreport '+

' where reportname="Myscript1"');

Mycds.First;

Mycds2.First;

While not Mycds.EOF do

Begin

Mycds2.Insert;

Mycds2.FieldByName('reportname').AsString :='Myscript1';

Mycds2.FieldByName('id').AsString :='Myscript1';

Mycds2.FieldByName('name').AsString :=Mycds.FieldByName('vn').Asstring;

Mycds2.FieldByName('name1').AsString :=Mycds.FieldByName('hn').Asstring;

Mycds2.FieldByName('name2').AsString :=Mycds.FieldByName('name').Asstring;

Mycds2.FieldByName('name3').AsString :=Mycds.FieldByName('vstdate').Asstring;

Mycds.Next;

Mycds2.Next;

End;

If Mycds2.changecount>0 then

hosxp_updatedelta(Mycds2.delta,'select * from tempreport where reportname="Myscript1"');

Showmessage('Success');

End;

End.

การเขยนฟงกชนทใชรปแบบทมอยแลวในโปรแกรมชวยเขยนใหงายขน

- ฟงกชน Inputquery(Title,Label,ตวแปรเกบคา)

๑. ใชส าหรบบอกใหผใชด าเนนการอยางไร

๒. ใชคาทผใชไมกรอกแตทราบคาทแนนอน (คาDeflur)

เชน –

var min,max : string เปนการประกาศตวแปร

min := ‘80’

max := ‘99’

Inputquery(‘คาเรมตน’,’กรณาใสคาเรมตนของระดบน าตาลทตองการ?’,’80’)

Page 27: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

Inputquery(‘คาสนสด’,’กรณาใสคาสนสดของระดบน าตาลทตองการ?’,’99’)

zquery.close; ลบอนเดมออกกอน

zquery.sql.text :=’delete from tempreport where reportname =”testscript”’; เปนการ

ลบฟอรม

zquery.execsql;

fcds.close;

fcds.datarequest(‘select * from tempreport where reportname =”testscript”’);

fcds.open;

fcds.insert;

fcds[‘reportname’]:=’testscript’;

fcds[‘name1’]:=min;

fcds[‘name2’]:=max;

fcds.post;

fcds.datarequest(‘select * from tempreport where reportname =”testscript”’) ตองเขยน

อกรอบ

applyupdate_fcds; เปนการสงใหอพเดดขอมล

หมายเหต

- fcds เปนตวแปรทมอยแลวไมจ าเปนตองประกาศตวแปรอก

- .datarequest เปนคาทดงขอมลออกมาจากHosxp ซงมอยแลวในโปรแกรม

- Mycds2.FieldByName('reportname').AsString สามารถแทนได fcds[‘reportname’]

- ฟงกชน GetUserParameter เปนฟงกชนไวตรวจสอบมการสงตวแปรหรอพารามเตอรเขาfrom นหรอ

ยง ถายงจะไดเรยกฟงกชนใหใสตวแปรตอไป

เชน

Unit myscript1;

Procedure main;

var

mycds :TClientDataset;

Mycds2:TClientDataset;

date1, date2 :Tdatetime;

ds1,ds2 :string;

Begin

zquery.close;

zquery.sql.text:='delete from tempreport where reportname="Myscript1"';

zquery.execsql;

Page 28: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

If not getdaterange() then exit

date1 :=date_result1();

date2 :=date_result2();

ds1:=formatdatetime('YYY-MM-DD',date1);

ds2:=formatdatetime('YYY-MM-DD',date2);

Mycds:=TClientDataset.Create(nil);

Mycds.data:=hosxp_getdataset('select o.vn,o.hn,concat(p.pname,p.fname," ",p.lname) as

name,o.vstdate from ovst o left outer join patient p on o.hn=p.hn '+

' where o.vstdate between "'+ds1+'" and "'+ds2+'"');

Mycds2:= TClientDataset.Create(nil);

Mycds2.data:=hosxp_getdataset('select * from tempreport '+

' where reportname="Myscript1"');

Mycds.First;

Mycds2.First;

While not Mycds.EOF do

Begin

Mycds2.Insert;

Mycds2.FieldByName('reportname').AsString :='Myscript1';

Mycds2.FieldByName('id').AsString :='Myscript1';

Mycds2.FieldByName('name').AsString :=Mycds.FieldByName('vn').Asstring;

Mycds2.FieldByName('name1').AsString :=Mycds.FieldByName('hn').Asstring;

Mycds2.FieldByName('name2').AsString :=Mycds.FieldByName('name').Asstring;

Mycds2.FieldByName('name3').AsString :=Mycds.FieldByName('vstdate').Asstring;

Mycds.Next;

Mycds2.Next;

End;

If Mycds2.changecount>0 then

hosxp_updatedelta(Mycds2.delta,'select * from tempreport where reportname="Myscript1"');

Showmessage('Success');

End;

End.

Page 29: การสร้างรายงานด้วย Report Designer ขั้นสูง ระหวางวันที่ ...ckhospital.net/download/การสร้างรายงานด้วย

การเปรยบเทยบความสามารถและเทคนคการแสดงผลรายงาน ดวยการเขยน Script ในรายงาน

๑. มความยดหยนในการเขยนรายงาน

๒. สามารถน าขอมลมาเกบไวใน Dataset แลวคอยน ามาแสดงผลทหลงท าใหมผลตอความไวในการ

ประมวลผลทมขอมลจ านวนมาก