BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: panus_t ที่ สิงหาคม 24, 2011, 14:07:37 PM
-
where vstdate between "'+formatdatetime('yyyy-mm-dd',rxdate1)+'" and "'+formatdatetime('yyyy-mm-dd',rxdate2)+'"
ค่าตรงนี้จะทราบได้อย่างไรว่าจะเป็นตัวไหน ขอคำชี้แนะวิธีการดูด้วยครับเพราะรายงานแต่ละตัวกำหนดตัวแปรไม่เหมือนกัน
ผมแนบไฟล์มาให้ช่วยดูด้วยครับตรง Variable2
-
แนบรูปมาผิดมั้งครับ key violation เป็นของกระทู้ก่อนหน้า 5555+
HOSxP_Attachment_key-violation.png
-
;D ;D ;D ;D
-
จริง ๆ มันคือ sql ที่เป็น string ธรรมดานี่แหละครับ
แต่เราต้องการแทนที่ค่าที่อยู่ใน String ด้วยวันที่ ที่เราได้รับมา
เช่น วันที่่ที่ดึงมาจาก GetDateRangeDialog(date1,date2) เราจะได้วันที่่มาอยู่ในตัวแปร date1 และ date2
จึงต้องใช้ FormatDateTime('yyyy-mm-dd',date1) เพื่อแปลงวันที่ให้เป็นรูปแบบ string
parameter ที่ใส่ให้กับ FormatDateTime() ก็จะมี Format แล้วก็วันที่
Formate ที่เราใช้กับคำสั่ง sql ก็จะเป็น 'yyyy-mm-dd'
ส่วนวันที่ ก็จะอยู่ในตัวแปร date1,date2 หรืออื่น ๆ ขึ้นอยู่กับตอนที่เราประกาศ และเรียกใช้ใน GetDateRangeDialog() ครับ
เมื่อ report ทำงาน ค่าในส่วนที่จะได้มากจากตอนที่ user เลือกวันที่ครับ
-
GetUserParameter( X ); ค่าที่ได้มาจะเป็น string อยู่แล้วค่ะ
และถ้าตัวแปรเป็นวันที่ ก็จะได้string ที่มีรูปแบบเป็น yyyy-mm-dd อยู่แล้วค่ะ ไม่ใช่ datetime
จึงไม่จำเป็นต้องใช้ ISO2Date(d, f); ค่ะ
ส่วน FormatDateTime(Format, aDateTime); แปลงค่าวันที่ให้อยู่รูปแบบ string ตามFormat ที่กำหนด
datetime > string
แต่ถ้าจะแปลงจาก string > datetime ก็ได้
ใช้ StrToDate( str ); แต่ว่ารูปแบบ str ที่เป็น 'yyyy-mm-dd' จะใช้ไม่ได้ ต้องเป็น 'dd/mm/yyyy'ค่ะ
ลองเอาไปทดสอบแบบนี้ดู
Value := formatdatetime('yyyy-mm-dd',StrToDate('01/02/2011'));
-
แนบรูปมาผิดมั้งครับ key violation เป็นของกระทู้ก่อนหน้า 5555+
HOSxP_Attachment_key-violation.png
ใช้ครับแนบรูปผิด ทำทีละหลายอย่างเลยวันนั้น...
-
แก้ไขรายงานที่แนบมาให้หน่อยได้หรือเปล่าครับ เพราะไม่ทราบว่าจะนำตัวแปรวันที่ไหนมาใส่ใน variable2 ครับ ;D
-
จากรายงานน่าจะใช้
DBcalcเฉย ๆ ก็น่าจะได้นะครับ เพราะดูจาก variable2
เหมือนกับ code mysql ตั้งต้นมีวันที่กำกับไว้อยุ่แล้ว
Value := GetSQLIntegerData('select count(v.vn) as num '+
' from vn_stat v '+
' left outer join doctor d on d.code=v.dx_doctor '+
' left outer join ovst o on o.vn=v.vn '+
' left outer join holiday h on h.holiday_date=v.vstdate '+
' left outer join patient p on p.hn=v.hn '+
' where v.vstdate between "'+ISO2Date(GetUserParameter(0),'dd mmmm eeee')+'" and "'+ISO2Date(GetUserParameter(1),'dd mmmm eeee')+'" '+
' and o.cur_dep_time between "08:00:00" and "16:00:00" '+
' and v.dx_doctor in ("139") and o.main_dep="010" '+
' and v.vstdate not in (select holiday_date from holiday) ');
-
ถ้าใช้ DBcalc count ในตำแหน่ง Header จะได้แค่ 1 ครับ
ต้องการทราบว่าตรงตัวหนังสือสีแดงความเป็นนะไร หรือ copy มาจากส่วนไหนของตัวรายงานครับ
Value := GetSQLIntegerData('select count(v.vn) as num '+
' from vn_stat v '+
' left outer join doctor d on d.code=v.dx_doctor '+
' left outer join ovst o on o.vn=v.vn '+
' left outer join holiday h on h.holiday_date=v.vstdate '+
' left outer join patient p on p.hn=v.hn '+
' where v.vstdate between "'+ISO2Date(GetUserParameter(0),'dd mmmm eeee')+'" and "'+ISO2Date(GetUserParameter(1),'dd mmmm eeee')+'" '+
' and o.cur_dep_time between "08:00:00" and "16:00:00" '+
' and v.dx_doctor in ("139") and o.main_dep="010" '+
' and v.vstdate not in (select holiday_date from holiday) ');
-
Value := GetSQLIntegerData('select count(v.vn) as num '+
' from vn_stat v '+
' left outer join doctor d on d.code=v.dx_doctor '+
' left outer join ovst o on o.vn=v.vn '+
' left outer join holiday h on h.holiday_date=v.vstdate '+
' left outer join patient p on p.hn=v.hn '+
' where v.vstdate between "'+GetUserParameter(0)+'" and "'+GetUserParameter(1)+'" '+
' and o.cur_dep_time between "08:00:00" and "16:00:00" '+
' and v.dx_doctor in ("139") and o.main_dep="010" '+
' and v.vstdate not in (select holiday_date from holiday) ');
ไม่ต้องใช้ฟังก์ชัน ISO2Date()
-
ใช่ครับไม่ต้องใช้ฟังก์ชั้น ISO2Date
ถูกต้องแล้วครับ