BMS-HOSxP Community

HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: navyNP ที่ ตุลาคม 13, 2011, 09:35:22 AM

หัวข้อ: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: navyNP ที่ ตุลาคม 13, 2011, 09:35:22 AM
คือผมกำลังทำ Report รายงานผลการตรวจสุขภาพจาก UE แต่ติดปัญหาอยู่นิดหนึ่งตรง Label ที่สร้างขึ้นเพื่อแปลผลครับ ตามรูป
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: navyNP ที่ ตุลาคม 13, 2011, 09:39:31 AM
ปัญหาคือตัว variable ที่ดึงข้อมูลมา ในตัวอย่างสมมุติว่าเป็น Variable44 ใช้คำสั่งตามนี้

 vn := DBPipeline['vn'];
lon := GetSQLStringData('select lab_order_number from lab_head where vn = "'+vn+'"');
  Value := GetSQLStringData('select lab_order_result from lab_order where lab_order_number = "'+lon+'"'+
           'and lab_items_code ="3074" ');

ส่วน Label ที่ใช้เป็นส่วนแปลผลคือ Label66
   if variable44.value<='7.4' then
  Text :='ปกติ' else
    if ((variable44.value>'7.4')and(variable44.value<'10')) then
  Text :='ระดับกรดยูริคสูงเล็กน้อย' else
  if variable44.value>='10' then
  Text :='ระดับกรดยูริคสูงมากผิดปกติ' else
  Text :='ไม่มีข้อมูล' ;

และ Label100
    if variable44.value<='7.4' then
  Text :='' else
    if ((variable44.value>'7.4')and(variable44.value<'10')) then
  Text :='ควรหลีกเลี่ยงอาหารที่มีกรดยูริคสูง ได้แก่ เครื่องในสัตว์ สัตว์ปีก หน่อไม้ฝรั่ง กะปิ กระถิน ชะอม แตงกวา ยอดผัก'+
' และแอลกอฮอล์ ควรรับการรักษาโดยแพทย์ทันที' else
  if variable44.value>='10' then
  Text :='ควรหลีกเลี่ยงอาหารที่มีกรดยูริคสูง ได้แก่ เครื่องในสัตว์ สัตว์ปีก หน่อไม้ฝรั่ง กะปิ กระถิน ชะอม แตงกวา ยอดผัก'+
' และแอลกอฮอล์ ควรรับการรักษาโดยแพทย์ทันที แม้ว่าไม่มีอาการของโรคเก๊าท์ก็ตาม'  ;
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: navyNP ที่ ตุลาคม 13, 2011, 09:42:42 AM
ปัญหาคือตัว Variable44 ที่ดึงผล Lab มา ถ้าเลือกเป็นชนิด string จะแสดงค่าตัวเลขได้ถูกต้องคือ 7.9 แต่แปลผลใน Label66 และ Label100 ไม่ตรงกับคำสั่งที่กำหนดไว้คือ จะแปลค่าเป็น "ระดับกรดยูริคสูงมากผิดปกติ"(จริงๆ แล้วต้องค่าเกินกว่า 10 ถึงจะแสดงค่าการแปลผลนี้"

หากเลือกตัว Variable44 ที่ดึงผล Lab มา เป็นชนิด Integer ตัวเลขที่ดึงมาจะปัดเศษเป็นจำนวนเต็มคือแสดงเป็น "8"(แทนที่จะเป็น 7.9)ถึงแม้จะเปลี่ยนค่า Display format เป็นจุดทศนิยม ก็จะแสดงเป็น "8.0" แทนที่จะเป็น "7.9"  แต่การแปลผลใน Label66 และ Label100 ถูกต้อง

เลยอยากขอคำแนะนำให้ อ.ทั้งหลายช่วยดูให้หน่อยว่าต้องแก้ไขอะไรตรงไหนบ้าง ขอบคุณครับ ;D ;D ;D
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: เกื้อกูล ครับ.. ที่ ตุลาคม 13, 2011, 09:47:53 AM
GetSQLStringData  -->Intreger Data ได้ไหมครับพี่
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: woravet ที่ ตุลาคม 13, 2011, 10:09:01 AM
เพิ่มตัวแปร อีกสักตัว
nUric:Integer;
แล้วไปแปลงค่า variable44 เอา
nUric:=strtoint(variable44.value);
*****
น่าจะพอใช้ได้นะ
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: sungvien ที่ ตุลาคม 13, 2011, 11:51:04 AM
เยี่ยมเลยครับ
อยากรบกวน อ.nuttawut วางขวดนมลูก มาดูให้แป๊ปหนึ่ง
เงียบหายไปนาน ส่งสัยซุ่มทำโปรเจคใหญ่ปลายปี
ทำเสร็จแล้ว แบ่งบุญด้วยนะครับ
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: navyNP ที่ ตุลาคม 13, 2011, 12:45:04 PM
เพิ่มตัวแปร อีกสักตัว
nUric:Integer;
แล้วไปแปลงค่า variable44 เอา
nUric:=strtoint(variable44.value);
*****
น่าจะพอใช้ได้นะ
ลองดูแล้วครับ ได้ค่าเป็น "0" ครับ
แต่ผมยังสงสัยอยู่ดีครับว่า ทำไม variable ตัวอื่นๆ ที่ทำไว้เป็น string เหมือนกัน แต่ก็แปลผลได้ถูกต้อง มีอันนี้อันเดียวที่แปลผลไม่ตรงกับค่าที่กำหนดไว้ครับ ???
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: golf_win ที่ ตุลาคม 13, 2011, 13:14:55 PM
ลองใช้ GetSQLDoubleData ในการดึงผล lab ครับและใช้ประเภท variable เป็น double จากนั้นค่อยใช้ ongettext มาเปรียบเทียบค่าจาก variable ครับ

เช่น
if variable5.value>=90 then
  value:='ÃÐÂзÕè 1'
else if variable5.value>=60 then
  value:='ÃÐÂзÕè 2'
else if variable5.value>=30 then
  value:='ÃÐÂзÕè 3'
else if variable5.value>=15 then
  value:='ÃÐÂзÕè 4'
else
  value:='ÃÐÂÐÊØ´·éÒÂ';
 
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: woravet ที่ ตุลาคม 13, 2011, 15:42:55 PM
procedure Variable44OnCalc(var Value: Variant);
begin
Value := GetSQLStringData('select ifnull(l2.lab_order_result,0) Uric '+
                                           'from lab_head l1 '+
                                           'left join lab_order l2 on l1.lab_order_number=l2.lab_order_number '+
                                           'where l1.vn= "'+dbpipeline['vn']+'" and l1.lab_items_code=3074 ');
nresult:=StrtoInt(value);
if nresult<=0 then
  variable66.value='Error'
else if nresult<=7.4 then
  variable66.value:='ปกติ'
else if nresult<10 then
  variable66.valu:e='ระดับกรดยูริคสูงเล็กน้อย'
else
  variable66.value:='ระดับกรดยูริคสูงมากผิดปกติ';
end;
หรือประมาณนี้
หัวข้อ: Re: ขอความช่วยเหลือการเขียนคำสั่งแปลผลใน Label ครับ
เริ่มหัวข้อโดย: navyNP ที่ ตุลาคม 13, 2011, 16:20:39 PM
ได้แล้วครับ แก้ปัญหาแบบ Admin บ้านนอก คือสร้าง variable ชนิด string ขึ้นมาอีกอันไว้แสดงผลตัวเลขเฉยๆ ส่วน Variable ชนิด Integer อันเดิมที่ใช้อ้างอิงค่านั้นซ่อน(Disvisible)เอาไว้ ;D ;D ;D