BMS-HOSxP Community

HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: udomchok ที่ กุมภาพันธ์ 14, 2010, 16:47:41 PM

หัวข้อ: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: udomchok ที่ กุมภาพันธ์ 14, 2010, 16:47:41 PM
เมื่อใช้คำสั่ง
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 เช่นเดิม

ทำอย่างไรจึงจะเปรียบเทียบค่าได้ถูกต้องครับ
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: doramon ที่ กุมภาพันธ์ 14, 2010, 16:51:39 PM
ส่งฟอร์มขึ้นมาได้หรือเปล่าครับ
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: doramon ที่ กุมภาพันธ์ 14, 2010, 16:55:55 PM
StringReplace


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

ก่อนจะเอาไปเปลียบเทียบ    '   ให้ไม่มีก่อน
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: udomchok ที่ กุมภาพันธ์ 14, 2010, 17:11:27 PM
  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'
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: doramon ที่ กุมภาพันธ์ 14, 2010, 17:22:10 PM
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ

ทำไมไม่ใช้  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']+'"');

             
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: udomchok ที่ กุมภาพันธ์ 14, 2010, 17:48:02 PM
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ

ทำไมไม่ใช้  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
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: James011 ที่ กุมภาพันธ์ 14, 2010, 18:06:45 PM
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;
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: udomchok ที่ กุมภาพันธ์ 14, 2010, 18:55:50 PM
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
หัวข้อ: Re: การใช้ GetSQLSubQueryData เพื่อนำผลที่ได้มาเปรียบเทียบกับค่าที่ต้องการ
เริ่มหัวข้อโดย: howtodo ที่ กุมภาพันธ์ 15, 2010, 05:28:23 AM
 ;D