BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: navyNP ที่ ตุลาคม 13, 2011, 09:35:22 AM
-
คือผมกำลังทำ Report รายงานผลการตรวจสุขภาพจาก UE แต่ติดปัญหาอยู่นิดหนึ่งตรง Label ที่สร้างขึ้นเพื่อแปลผลครับ ตามรูป
-
ปัญหาคือตัว 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 :='ควรหลีกเลี่ยงอาหารที่มีกรดยูริคสูง ได้แก่ เครื่องในสัตว์ สัตว์ปีก หน่อไม้ฝรั่ง กะปิ กระถิน ชะอม แตงกวา ยอดผัก'+
' และแอลกอฮอล์ ควรรับการรักษาโดยแพทย์ทันที แม้ว่าไม่มีอาการของโรคเก๊าท์ก็ตาม' ;
-
ปัญหาคือตัว 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
-
GetSQLStringData -->Intreger Data ได้ไหมครับพี่
-
เพิ่มตัวแปร อีกสักตัว
nUric:Integer;
แล้วไปแปลงค่า variable44 เอา
nUric:=strtoint(variable44.value);
*****
น่าจะพอใช้ได้นะ
-
เยี่ยมเลยครับ
อยากรบกวน อ.nuttawut วางขวดนมลูก มาดูให้แป๊ปหนึ่ง
เงียบหายไปนาน ส่งสัยซุ่มทำโปรเจคใหญ่ปลายปี
ทำเสร็จแล้ว แบ่งบุญด้วยนะครับ
-
เพิ่มตัวแปร อีกสักตัว
nUric:Integer;
แล้วไปแปลงค่า variable44 เอา
nUric:=strtoint(variable44.value);
*****
น่าจะพอใช้ได้นะ
ลองดูแล้วครับ ได้ค่าเป็น "0" ครับ
แต่ผมยังสงสัยอยู่ดีครับว่า ทำไม variable ตัวอื่นๆ ที่ทำไว้เป็น string เหมือนกัน แต่ก็แปลผลได้ถูกต้อง มีอันนี้อันเดียวที่แปลผลไม่ตรงกับค่าที่กำหนดไว้ครับ ???
-
ลองใช้ 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:='ÃÐÂÐÊØ´·éÒÂ';
-
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;
หรือประมาณนี้
-
ได้แล้วครับ แก้ปัญหาแบบ Admin บ้านนอก คือสร้าง variable ชนิด string ขึ้นมาอีกอันไว้แสดงผลตัวเลขเฉยๆ ส่วน Variable ชนิด Integer อันเดิมที่ใช้อ้างอิงค่านั้นซ่อน(Disvisible)เอาไว้ ;D ;D ;D