แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - BBT Hospital

หน้า: 1 [2]
51
Report Exchange / Re: รบกวนคำสั่ง sql
« เมื่อ: ธันวาคม 06, 2012, 21:05:15 PM »
ขอพิมพ์โดยไม่ได้ลองกับHOSxp นะครับ

select o.vn from opitemrece o
where o.vn in (select op.vn from opitemrece op where op.icode="รหัสยาที่ 1"
                       and op.vstdate between "2012-12-01" and "2012-12-03" )
  and o.icode="รหัสยาตัวที่ 2" and o.vstdate between "2012-12-01" and "2012-12-03"
limit 10

ผมใช้ ตารางเดียวกันโดยกำหนดชื่อย่อตารางไว้คนละแบบนะครับ จะได้เข้าใจง่าย
ซึ่งความจริงอาจจะไม่ต้องใส่เลยก็ได้ครับ

52
GetDateRangeDialog(dt1, dt2);
T1:=formatdatetime('yyyy-mm-dd',dt1);
T2:=formatdatetime('yyyy-mm-dd',dt2);
ไว่ใน tab calc, event, on create
มันก็เลยขึ้นมาให้ใส่วันที่อีกครั้ง
Click ขวาที่ OnCreate แล้วเลือก Delete ได้เลยครับ

GetDateRangeDialog(dt1, dt2); เป็นการเก็บค่าวันที่เริ่มต้นและสิ้นสุด
T1, T2 เป็นการกำหนดการแสดงวันที่แบบ คศ 4 หลัก-เดือน 2 หลัก -วัน2 หลัก
เช่น 9 ธค. 2555 ก็เก็บเป็น 2012-12-09 ในรูปแบบตัวแบบตัวอักษรครับ
ดังนั้น ถ้าเรากำหนด อยู่ใน คำสั่ง sql ด้านนอกโดยใส่เป็น Parameter วันที่ 2 ตัว ก็จะสามารถดึงค่า
ตัวแปร ออก มาโดยใช้
st1:=GetUserParameter(0); --เมื่อกำหนด st1 เป็น String;
ก็จะได้วันที่ เริ่มต้นมาเก็บไว้ในรูปแบบตัวอักษรได้เช่นเดียวกันครับ
เช่นในหน้า sql ใส่ไว้เป็น
select vn from vn_stat v
where vstdate between "2012-12-07" and "2012-12-08"
ถ้าเราเลือกวันที่เป็นวันที่ข้างต้น
แล้วใน หน้า design ในแถบ calc เราใส่คำสั่ง
st1:=GetUserParameter(0);
ก็จะได้ว่า st1 มีค่าเท่ากับ  2012-12-07 ครับ

53
การเขียน SQL Script / Re: sql วันละคำ กับ perjer
« เมื่อ: ธันวาคม 03, 2012, 06:35:23 AM »
ลองดูนะครับ สมมุติว่าตัวแปรที่ใช้ชื่อ Variable10

สอบถามท่านผู้เชี่ยวทั้งหลายครับ ถ้าผมต้องการเขียนตรวจสอบ type_area ว่า

ถ้า type_area มีค่าน้อยกว่า 4

ให้แสดงค่าดังกล่าวออกมา แต่ให้เป็นตัวอักษรสีแดง

ถ้าไม่ใช่ ให้แสดงค่า DBpipeline_Type_Area ออกมา

ผมทำได้ดังนี้

   if (DBPipeline['type_area'] < 4 )  then
      begin
        value:='DBPipeline['type_area']';
     Variable10.Font.color:=ClRed;      end
     else
      begin
        value:= DBPipeline['type_area'];
     Variable10.Font.color:=ClBlack;     
      end;

แต่ติดตรองเงื่อนไขแรกครับ อยากให้เป็นตัวอักษรสีแดงครับ

รบกวนด้วยนะครับ  ขอบคุณ ล่วงหน้าครับ

54
Report Exchange / Re: ช่วยแก้รายงานให้หน่อยครับ
« เมื่อ: พฤศจิกายน 15, 2012, 21:32:01 PM »
มันผิดมาตั้งแต่ sql ของรายงานแล้วล่ะครับ เพราะมันดึง dx0 ถึง dx5 จาก an_stat มาครับ ซึ่งมันไม่ได้บอกว่าเป็น diagtype อะไร

ทางที่ดี ให้คุณแก้ ช่อง ของ Dx ของ Comorbid เป็น Variable แล้วใส่สูตร
เช่น
Value:=Getsqlsubstringdata('select i.name from iptdiag id '
                      +' left outer join icd101 i on i.code=id.icd10 '
                      +' where an="'+DBPipeline['an']+'" '
                      +' and id.diagtype=2 ');
ลองดูนะครับ พิมพ์สดไม่ได้ทดสอบครับ

55
เข้าไปใน report designer ครับ เลือก custom เลือกรายงานของคุณ

แล้วแก้
select ov.vn,oa.hn,oa.nextdate,concat(pt.pname,pt.fname,"   ",pt.lname) as pt_name,pt.addrpart,
pt.moopart,pt.tmbpart,ta.full_name,lh.lab_order_number,lo.lab_items_code,lo.lab_items_name_ref,lo.lab_order_result
from oapp oa
left outer join ovst ov on ov.vn=oa.vn
left outer join patient pt  on pt.hn=oa.hn
left outer join thaiaddress ta on ta.addressid=concat(pt.chwpart,pt.amppart,pt.tmbpart)
left outer join lab_head lh on lh.vn=ov.vn
left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number

where  oa.nextdate between '2007-12-15' and '2007-12-19' and oa.clinic="001"  and lo.lab_items_code in('102','76')order by pt.tmbpart,pt.moopart,pt.addrpart desc

เอาสีแดงออกไป เพราะ clinic 001 หมายถึง คลินิกเบาหวาน ส่วน lab_items_code 76 กับ 102 น่าจะเป็น FBS กับ Chol ครับ

56
Report Exchange / Re: ช่วยดูรายงานนี้หน่อยครับ
« เมื่อ: พฤศจิกายน 15, 2012, 21:10:44 PM »
ลองใช้ดูนะครับ
1. กำหนด variable ใน แถบ Calc เลือก module ตรง Declarations => Variables
eg.
 
Var
    stage1,atage2,stage3,stage4,stage5:integer;

ครับ
หลังจากนั้นกำหนดค่า โดยเข้าไปที่ Event => OnCreate
procedure GlobalOnCreate;
begin
   stage1:=0;
   stage2:=0;
   stage3:=0;
   stage4:=0;
   stage5:=0;

end;

หลังจากนั้น สร้าง Variable อีกตัวที่ detail ของรายงาน

สั่งให้มัน อยู่ Calc order หลังจากที่เราคำนวน GFR แล้ว

กำหนดโดย
 if <GFR  มากกว่า 90> then stage1:=stage1+1;
 if <GFR  60 - 90> then stage2:=stage2+1;
 if <GFR  30-60> then stage3:=stage3+1;
 if <GFR  15-30> then stage4:=stage4+1;
 if <GFR  น้อยกว่า 15> then stage5:=stage5+1;

สุดท้ายแล้วสร้าง Variable ที่ Summary ของรายงานให้มีค่าเท่ากับ stage 1 - 5 ตามลำดับครับ
(ลองดูนะครับ บังเอิญเครื่องที่บ้านรันไม่ได้ครับ เพราะไม่มีฐานข้อมูล)


57
ใน Variable4 กับ Variable6 ลืมใส่
ว่าเป็น vn ของคนไข้รายนั้นหรือเปล่าครับ
จาก
  Value := GetSQLStringData('select name from s_drugitems where icode="'+  DBPipeline['icode'] +'"group by icode');

น่าจะแก้เป็น
  Value := GetSQLStringData('select sd.name from opitemrece o '
                  +' left outer join s_drugitems s on s.icode=o.icode '
                  +' where vn="'+DBPipeline['vn'] +'" '
                  +' and s.icode="'+  DBPipeline['icode'] +'" group by s.icode');
มากกว่านะครับ
จะได้เป็นของคนไข้รายนี้แน่ ๆ
เหตุผลที่ใช้ ตาราง opitemrece เป็นหลักเพราะว่า vn นั้นมีไม่กี่รายการแต่ถ้าอิงตาราง s_drugitmes จะได้ชื่อยาซึ่งมา link กับ vn ได้หลายตัวนะครับ
ผมยังไม่ได้ลองรันนะครับ เพราะว่าใช้ NB ที่บ้านลงแต่Program HOSxP แต่ไม่มีdatabase จึงไม่สามารถรันทดสอบดูครับ

58
ลองใช้ function นี้ดูซิครับ
st1:=  FormatDateTime('d mmm eeee hh:nn:ss', DateTime1);

59
Report Exchange / Re: ช่วยหน่อยครับ
« เมื่อ: พฤศจิกายน 11, 2012, 10:16:51 AM »
สร้าง Variable ขึ้นมาซิครับ คลิกขวาที่ Variable แล้วใส่คำสั่ง

Value:=GetSQLIntegerdate('select count(doctor_time) as count_morning from pq_doctor '
  +' where doctor_date BETWEEN "'+ds1+'" AND "'+ds2+'"  '
  +' and doctor = "'+DBPipeline['doctor']+'" '
  +' and doctor_time between "08:30" and "12:30"
);
สำหรับ เวลาเช้า ส่วนบ่ายก็ทำคล้าย ๆ กัน ครับ
ปล. ยังไม่ได้ลอง รัน นะครับ อาจใส่ code ผิดก็ขออภัยครับ

60
Report Exchange / Re: แก้ไข OPD Card ให้หน่อยครับ
« เมื่อ: พฤศจิกายน 10, 2012, 13:46:13 PM »
เข้าไปที่ Report designer เลือก form เข้า design
แล้วเลือกที่แถบ  Calc คลิกขวาเลือกการแสดงแบบ module
แล้วเลือกที่ Event Handler เลือกไปที่ procedure TitleBeforeGenerate;
แล้วแก้ไขที่คำสั่ง

     ChangeDBPipeLineLink3SQL('select concat(if((d.name is null or d.name = ""),"-",d.name),"  ", '+
     'if(d.strength is null,"",d.strength),"  #  ",if(o.qty is null,"",o.qty)) '+
     'as drug_name,du.shortlist '+
     'from opitemrece o '+
     'left outer join drugitems d on d.icode = o.icode '+
     'left outer join drugusage du on du.drugusage = o.drugusage '+
     'where o.icode like "1%" and o.vn = "'+DBPipeline['vn']+'" '+
     'order by d.therapeuticgroup,d.name ');
     
ครับ โดยเอา o.icode like "1%" and ออก แล้วอย่าลืมลิงค์ ตาราง nondrugitems นะครับ

61
Report Exchange / Re: ขอรายงานห้องฟันครับ
« เมื่อ: กุมภาพันธ์ 04, 2010, 21:42:35 PM »
พอดีคุณหมอฟันอยากได้รายงาน
-จำนวนคนไข้ที่มาใช้ห้องฟัน

-------ผมก็ไม่ค่อยแน่ใจครับ เผอิญกำลังจะช่วยทำให้ห้องฟันที่โรงพยาบาลอยู่เหมือนกันครับ
-------ตารางที่เกี่ยว คือ ovst,vn_stat,dtmain, dttm

-จำนวนคนไข้เบาหวานที่มาใช้ห้องฟัน แบ่งเป็น ขูดฟัน อุดฟัน ถอนฟัน
 
-------คิดว่าต้องหาจาก vn_stat แล้วหาHN ที่มีโรค เบาหวาน E10-E14 แล้วค่อยไป link กับตาราง dtmain ครับ

-แบ่งเป็นรายเดือน 

------ตามท้ายคำสั่ง sql ด้วย group by month(dtmain.vstdate)

ผมต้องไปดึงข้อมูลจากตารางไหนบ้างครับ มีตัวอย่างไหนที่พอจะเป็นแนวทางได้บ้างครับ



------------------------------------------------------------------------
ปล. ผมเป็นหน้าใหม่ครับ ใช้ HosXp มา ประมาณ 1 ปี ไม่เคยมีใครสอนเลย :-[ ต้องมั่วเองตลอด
จาก แพทย์คนหนึ่ง โรงพยาบาลบางบัวทอง นนทบุรี
spec Server : Unknown
ความรู้ทาง sql language => 0 ปี (มีแต่มั่วเองครับ)
ขอคำแนะนำด้วยครับ   ขอบคุณครับ

หน้า: 1 [2]