BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: 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 เช่นเดิม
ทำอย่างไรจึงจะเปรียบเทียบค่าได้ถูกต้องครับ
-
ส่งฟอร์มขึ้นมาได้หรือเปล่าครับ
-
StringReplace
http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace
ก่อนจะเอาไปเปลียบเทียบ ' ให้ไม่มีก่อน
-
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'
-
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ
ทำไมไม่ใช้ 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']+'"');
-
มันแสดงออกมาค่าเดียวใช้หรือเปล่าครับ
ทำไมไม่ใช้ 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
-
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;
-
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
-
;D