ผู้เขียน หัวข้อ: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ  (อ่าน 5321 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ udomchok

  • Hero Member
  • *****
  • กระทู้: 8,350
  • Respect: +589
    • ดูรายละเอียด
    • ร.พ.สมเด็จพระสังฆราช องค์ที่ 17
เมื่อใช้คำสั่ง
r_UPT := GetSQLSubQueryData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');
ค่าที่ได้ออกมาจะมี single quote ออกมาด้วย (ปิดหัว-ท้าย ของผล LAB) เช่น บันทึกผล LAB ว่า Negative แต่ผลของ GetSQLSubQueryData จะคืนค่าออกมาเป็น 'Negative'
และถ้าต้องการนำมาเปรียบเทียบค่า
  If r_UPT = '""' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Negative' then
    begin
    lblUPT_N.visible := true;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Positive' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := true;
    end;
ใน If clause ที่ 2 ทำให้ได้ค่าที่ไม่ถูกต้อง (กรณีบันทึกผล LAB เป็น Negative) เพราะจะเป็นการเปรียบเทียบ 'Negative' กับ Negative ซึ่งจะเป็น false จริง ๆ แล้วควรจะได้ผลเป็น true (ถ้า GetSQLSubQueryData คืนค่ามาเป็น Negative เท่านั้น)

ลองใช้
  If r_UPT = chr(39)+'Negative'+chr(39) then
    begin
    lblUPT_N.visible := true;
    lblUPT_P.visible := false;
    end;
ก็ compile ไม่ผ่าน ติด Incompatible types คงเป็นเพราะ chr(39) คืนค่าเป็น char แต่ 'Negative' เป็น string

ลองแบบนี้
If r_UPT = string(chr(39))+'Negative'+string(chr(39)) then
    begin
    lblUPT_N.visible := true;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Positive' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := true;
    end;
Compile ผ่าน แต่ Run ไม่ได้

ลองกำหนด variable
var
single_quote : String;

single_quote := chr(39);

If r_UPT = single_quote+'Negative'+single_quote then
    begin
    lblUPT_N.visible := true;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Positive' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := true;
    end;
ก็ยังไม่ได้อีก ติด Incompatible types เช่นเดิม

ทำอย่างไรจึงจะเปรียบเทียบค่าได้ถูกต้องครับ
ทำด้วยหัวใจร.พ.สมเด็จพระสังฆราช องค์ที่ 17 อ.สองพี่น้อง จ.สุพรรณบุรี
อบรมโดย BMS Team เมื่อ พ.ย. 49 ขึ้นระบบห้องบัตรเมื่อ X'Mas 2007
2008 : X-Ray กายภาพบำบัด แพทย์แผนไทย กิจกรรมบำบัด OPD ตา
2009 : ทันตกรรม ห้องตรวจตา OPD (พยาบาลและห้องตรวจแพทย์บางห้อง)

doramon

  • บุคคลทั่วไป
ส่งฟอร์มขึ้นมาได้หรือเปล่าครับ

doramon

  • บุคคลทั่วไป
StringReplace


http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace

ก่อนจะเอาไปเปลียบเทียบ    '   ให้ไม่มีก่อน
« แก้ไขครั้งสุดท้าย: กุมภาพันธ์ 14, 2010, 16:57:56 PM โดย doraemon »

ออฟไลน์ udomchok

  • Hero Member
  • *****
  • กระทู้: 8,350
  • Respect: +589
    • ดูรายละเอียด
    • ร.พ.สมเด็จพระสังฆราช องค์ที่ 17
  r_UPT := GetSQLSubQueryData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');
  r_UPT := StringReplace(r_UPT,chr(39),'',rfReplaceAll, rfIgnoreCase);
  If r_UPT = '""' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Negative' then
    begin
    lblUPT_N.visible := true;
    lblUPT_P.visible := false;
    end;
  If r_UPT = 'Positive' then
    begin
    lblUPT_N.visible := false;
    lblUPT_P.visible := true;
    end;

Compile ไม่ผ่านครับ ติด Undeclared identifier : 'StringReplace'
ทำด้วยหัวใจร.พ.สมเด็จพระสังฆราช องค์ที่ 17 อ.สองพี่น้อง จ.สุพรรณบุรี
อบรมโดย BMS Team เมื่อ พ.ย. 49 ขึ้นระบบห้องบัตรเมื่อ X'Mas 2007
2008 : X-Ray กายภาพบำบัด แพทย์แผนไทย กิจกรรมบำบัด OPD ตา
2009 : ทันตกรรม ห้องตรวจตา OPD (พยาบาลและห้องตรวจแพทย์บางห้อง)

doramon

  • บุคคลทั่วไป
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ

ทำไมไม่ใช้  GetSQLStringData(sql);    แทน GetSQLSubQueryData(sql);  ครับ


r_UPT := GetSQLStringData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');

             

ออฟไลน์ udomchok

  • Hero Member
  • *****
  • กระทู้: 8,350
  • Respect: +589
    • ดูรายละเอียด
    • ร.พ.สมเด็จพระสังฆราช องค์ที่ 17
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ

ทำไมไม่ใช้  GetSQLStringData(sql);    แทน GetSQLSubQueryData(sql);  ครับ


r_UPT := GetSQLStringData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');

             
รู้สึกว่าเคยใช้แล้ว ไม่แสดงผล เลยต้องใช้ GetSQLSubQueryData
ตอนนี้เอา GetSQLStringData มาครอบอีกที ใช้ได้แล้ว
 :D :D :D
ทำด้วยหัวใจร.พ.สมเด็จพระสังฆราช องค์ที่ 17 อ.สองพี่น้อง จ.สุพรรณบุรี
อบรมโดย BMS Team เมื่อ พ.ย. 49 ขึ้นระบบห้องบัตรเมื่อ X'Mas 2007
2008 : X-Ray กายภาพบำบัด แพทย์แผนไทย กิจกรรมบำบัด OPD ตา
2009 : ทันตกรรม ห้องตรวจตา OPD (พยาบาลและห้องตรวจแพทย์บางห้อง)

ออฟไลน์ James011

  • Hero Member
  • *****
  • กระทู้: 1,743
  • Respect: +16
    • ดูรายละเอียด
r_UPT := GetSQLStringData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');

     lblUPT_N.visible := false;
     lblUPT_P.visible := false;

If  r_UPT <>''  then
begin
   If  r_UPT = 'Negative'  then
     begin
     lblUPT_N.visible := true;
    l blUPT_P.visible := false;
     end
   else
   If  r_UPT = 'Positive'  then
      begin
      lblUPT_N.visible := false;
      lblUPT_P.visible := true;
      end;
end;

ออฟไลน์ udomchok

  • Hero Member
  • *****
  • กระทู้: 8,350
  • Respect: +589
    • ดูรายละเอียด
    • ร.พ.สมเด็จพระสังฆราช องค์ที่ 17
r_UPT := GetSQLStringData('select lab_order_result from lab_order lo join lab_head lh on lh.lab_order_number = lo.lab_order_number where lo.lab_items_code="40" and lh.vn="'+DBPipeline['vn']+'"');

     lblUPT_N.visible := false;
     lblUPT_P.visible := false;

If  r_UPT <>''  then
begin
   If  r_UPT = 'Negative'  then
     begin
     lblUPT_N.visible := true;
    l blUPT_P.visible := false;
     end
   else
   If  r_UPT = 'Positive'  then
      begin
      lblUPT_N.visible := false;
      lblUPT_P.visible := true;
      end;
end;

เรียบร้อยไปแล้ว
ยังไงก็ขอบคุณ  :D :D :D :D :D
« แก้ไขครั้งสุดท้าย: กุมภาพันธ์ 14, 2010, 18:59:41 PM โดย udomchok »
ทำด้วยหัวใจร.พ.สมเด็จพระสังฆราช องค์ที่ 17 อ.สองพี่น้อง จ.สุพรรณบุรี
อบรมโดย BMS Team เมื่อ พ.ย. 49 ขึ้นระบบห้องบัตรเมื่อ X'Mas 2007
2008 : X-Ray กายภาพบำบัด แพทย์แผนไทย กิจกรรมบำบัด OPD ตา
2009 : ทันตกรรม ห้องตรวจตา OPD (พยาบาลและห้องตรวจแพทย์บางห้อง)

ออฟไลน์ howtodo

  • Hero Member
  • *****
  • กระทู้: 646
  • Respect: 0
    • ดูรายละเอียด
    • สื่อน้ำท่วม
ขึ้นระบบ 2549  เข้ามารับช่วงต่อ ต.ค.50 - ส.ค.53 ไม่ครบ 3 ปี ขอบคุณสำหรับความรู้ ความเมตตา ความกรุณา ที่มีให้กับตัวข้าผู้ด้อยปัญญาด้วยดีตลอดมา