BMS-HOSxP Community

HOSxP => Report Exchange => ข้อความที่เริ่มโดย: panus_t ที่ กรกฎาคม 07, 2011, 16:08:32 PM

หัวข้อ: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 07, 2011, 16:08:32 PM
ถ้าต้องการแสดงค่า
lab_order_result
หรือ
lab_items_name

ต้องทำไงครับ
การใช้ getsqlintegerdata และ getsqlstringdata หรือตัวอื่น ๆ ผมยังไม่เข้าใจครับ

value:=getsqlintegerdata('select lo.lab_order_result from lab_head lh '+
' left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number '+
' left outer join lab_items li on li.lab_items_code=lo.lab_items_code '+
' where lh.vn="'+dbpipeline['vn']+'" and lo.lab_items_code="78" ');

 ??? ??? ;D
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: naydekdee ที่ กรกฎาคม 07, 2011, 16:52:49 PM
อันที่เรียนมา รู้ มาที่ใช้บ่อยๆ ก็  ChangeReportSQL(sql);  ----> ใช้ใน Oncreate  เป็นการใช้ดึงรายงานทั่วไปที่แสดงผลหลายค่า  พูดง่ายก็คือ เหมือนกะว่าแสดงอะไรออกมาหมด   select {    } from xxxx  ตรง { } จะแสดงค่าหมด

ส่วนการเขียนใน Variable  ก็ส่วนใหญ่ใช้แต่   Value := GetSQLStringData(sql); ---> เป็นการดึงรายงานที่แสดงผลเพียงแค่ค่าเด่ว  เอามาวางใน report   แสดงค่าเด๋ว นะคับ เช่น  ของท่าน ให้แสดงผล
เป็น ผลแลป
  ใช้ 
Value := GetSQLStringData(' select lo.lab_order_result from lab_head lh '
+ '  left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number '
+ ' left outer join lab_items li on li.lab_items_code=lo.lab_items_code '
+ ' where lh.vn="'+dbpipeline['vn']+'"  and lo.lab_items_code="275"  ');
  แสดง ชื่อแลป 
Value := GetSQLStringData(' select li.lab_items_name from lab_head lh '
+ '  left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number '
+ ' left outer join lab_items li on li.lab_items_code=lo.lab_items_code '
+ ' where lh.vn="'+dbpipeline['vn']+'"  and lo.lab_items_code="275"  ');

แสดง 2 อย่างก็ concat  ไปเลย 
Value := GetSQLStringData(' select  concat(li.lab_items_name,"      ",lo.lab_order_result) as ' + 'labname_result  from lab_head lh '
+ '  left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number '
+ ' left outer join lab_items li on li.lab_items_code=lo.lab_items_code '
+ ' where lh.vn="'+dbpipeline['vn']+'"  and lo.lab_items_code="275"  ');
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: Svl2Nuk3 ที่ กรกฎาคม 07, 2011, 17:20:08 PM
ดูจากข้อมูลของเราเป็นหลักครับ  ว่าข้อมูลของเราเป็นข้อมูลประเภทไหน

Integer
Float
String

แล้วใช้ฟังก์ชันตามนั้นครับ  ถ้าใช้แค่แสดงผลอย่างเดียว  อาจจะใช้แค่ GetSQLStringData ก็ได้
แต่ถ้าต้องการนำค่าใน Variable  ไปทำอย่างอื่นต่อ  ควรจะใช้ฟังก์ชันให้ตรงกับ  Datatype  ครับ

เช่น  ดึงค่าตัวเลขออกมา  แต่ดึงมาเป็น string  พอเอาตัวเลขมาบวกกันก็จะกลายเป็นเอาตัวเลขมาต่อกัน

ประมาณนี้ครับ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: Multithreading ที่ กรกฎาคม 07, 2011, 17:49:52 PM
ฟิลด์ lab_order_result มี datatype เป็นอะไร ก็ใช้ตามนั้น
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: naydekdee ที่ กรกฎาคม 07, 2011, 22:24:22 PM
นุก  อันนี้ใช้อย่างไง อ่ะ  เพิ่งเคยเห็น    Getsqlintegerdata     ใช่ เปลี่ยนชนิด ตัวแปร ป่าว อ่ะ  หน้าตามันแปลกๆ


มะเคยเห็น  555   ไม่เคยเล่นแหะ   


เรียนต่อที่ไหน อ่ะ  เงียบไปเลยเน้อะ   
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: udomchok ที่ กรกฎาคม 07, 2011, 23:21:38 PM
นุก  อันนี้ใช้อย่างไง อ่ะ  เพิ่งเคยเห็น    Getsqlintegerdata     ใช่ เปลี่ยนชนิด ตัวแปร ป่าว อ่ะ  หน้าตามันแปลกๆ


มะเคยเห็น  555   ไม่เคยเล่นแหะ   


เรียนต่อที่ไหน อ่ะ  เงียบไปเลยเน้อะ   
เหมือน GetSQLStringData แต่ใช้กับข้อมูลที่เป็น Integer
ยังมี GetSQLDateData, GetSQLDoubleData อีกนะ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: Svl2Nuk3 ที่ กรกฎาคม 08, 2011, 11:19:32 AM
นุก  อันนี้ใช้อย่างไง อ่ะ  เพิ่งเคยเห็น    Getsqlintegerdata     ใช่ เปลี่ยนชนิด ตัวแปร ป่าว อ่ะ  หน้าตามันแปลกๆ


มะเคยเห็น  555   ไม่เคยเล่นแหะ   


เรียนต่อที่ไหน อ่ะ  เงียบไปเลยเน้อะ   

ตามที่ผมเข้าใจนะครับ  ถูกผิดยังไง  ขออภัยด้วยครับ
GetSQLStringData
GetSQLIntegerData
GetSQLDateData
GetSQLDoubleData

มันต่างกันที่ประเภทของตัวแปรที่มัน return ออกมา
ดังนั้นตัวแปรที่จะเอามารับข้อมูลจากฟังก์ชันพวกนี้ก็ต้องมี datatype เดียวกับมันด้วย
แต่ที่เราใช้ ๆ กันอยู่  เราจับใส่ Variable ได้เลย  (Value := GetSQL.......)  เพราะ  Variable  มันมี parameter  ชื่อว่า Value  เป็น Variant มาให้
procedure Variable2OnCalc(var Value: Variant);
begin
  Value := 'xxxx';
end;


การที่เราจะเลือกใช้ฟังก์ชันไหนนั้นนอกจากจะดูที่  datatype ของฟิลที่เราจะดึงแล้ว เราต้องดูจุดประสงค์ด้วย

เช่น  field     lab_order_result   เป็น  varchar(25)   เพราะว่า ผล Lab ไม่ได้มีเฉพาะตัวเลข  ยังมีผล lab ที่ตัวหนังสือ   หรือ อื่น ๆ อีก  ก็เลขต้องกำหนดเป็น varchar

ถ้าดูจาก datatype แล้วเราก็อาจจะใช้เป็น GetSQLStringData  ได้เลย   แต่ถ้าเราต้องการเอาผล lab ไปคำนวณอย่างอื่นต่อหละ  (ซึ่งอาจจะไม่ค่อยเจอบ่อยนัก)   ไป  +  -  *  /   .....   มันก็จะคำนวณไม่ได้  เพราะมันไม่ใช่ตัวเลข

ดังนั้นเราควรจะใช้  GetSQLIntergetData  แทน  เพื่อดึงค่ามาใส่ตัวแปรที่เป็น Integer  เพื่อจะเอาค่านั้นไปคำนวณต่อ   ผมถึงบอกว่า  "เราต้องดูจุดประสงค์ของการใช้งานด้วย"

บางท่านอาจจะบอกว่าก็ใช้  StrToInt()  แปลงค่าเป็น  Integer  เอาดิแล้วค่อยคำนวณ   =>  ก็ถูกครับ   สามารถทำได้เหมือนกัน  ประกาศตัวแปรเพิ่มนิด  เขียนโค้ดเพิ่มหน่อย  ก็ได้แล้ว  ฮ่า ๆ


อันนี้ก็แล้วแต่คนเขียนแหละครับ    เค้าทำทางลัดมาให้แล้ว   อยู่ที่เราจะใช้หรือเปล่าแค่นั้นเอง







หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 08, 2011, 13:47:43 PM
ถ้าผม เขียน SQL ได้ผลลัพธ์ มากกว่า 1 เรคคอร์ด  variable จะแสดงผลได้หรือเปล่าครับ

Value := GetSQLStringData('select concat ("¨Ó¹Ç¹ ",ot.qty," ÇÔ¸Õãªé ",du.shortlist) as txt '
+' from opitemrece ot '
+' left outer join drugusage du on du.drugusage=ot.drugusage '
+' where ot.vn="'+dbpipeline['vn']+'" and ot.icode in ("1500801" ,"1460327") ');
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: Multithreading ที่ กรกฎาคม 08, 2011, 14:05:12 PM
ถ้าผม เขียน SQL ได้ผลลัพธ์ มากกว่า 1 เรคคอร์ด  variable จะแสดงผลได้หรือเปล่าครับ

Value := GetSQLStringData('select concat ("¨Ó¹Ç¹ ",ot.qty," ÇÔ¸Õãªé ",du.shortlist) as txt '
+' from opitemrece ot '
+' left outer join drugusage du on du.drugusage=ot.drugusage '
+' where ot.vn="'+dbpipeline['vn']+'" and ot.icode in ("1500801" ,"1460327") ');

ได้  โดยแต่ละ แถว ของรายงาน จะเปลี่ยนค่าไปเรื่อยซึ่งขึ้นกับ ค่าของ dbpipeline['vn']
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 08, 2011, 14:26:57 PM
หมายความว่า คนไข้ 1 คนมียาหลายตัว ต้องการแสดง ยาหลายตัวนั้นใน Variable อันเดียวได้หรือเปล่าครับ
และทำยังไง... ;D
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: lo_singburihosp ที่ กรกฎาคม 08, 2011, 14:52:40 PM
เขียนแบบ memo ครับ ลองดูได้ชัวร์ ได้หลายบรรทัดครับ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 08, 2011, 15:02:25 PM
เขียนแบบ memo ครับ ลองดูได้ชัวร์ ได้หลายบรรทัดครับ

เขียนยังไงครับ  ใช้ memo ไม่เป็น  ;D
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: lo_singburihosp ที่ กรกฎาคม 08, 2011, 15:35:15 PM
เลือก memo และ variable มาอย่างละ  1 ตัว
แล้วเขียนว่าใน variable
ตัว อย่าง

Value :=;

memo1.lines.text:=GetListFromQuery('select * from sex limit 10 ');

ส่วน sql ปรับตามความเหมาะสม ครับ ทดลองดู
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 08, 2011, 16:14:31 PM
เลือก memo และ variable มาอย่างละ  1 ตัว
แล้วเขียนว่าใน variable
ตัว อย่าง

Value :=;

memo1.lines.text:=GetListFromQuery('select * from sex limit 10 ');

ส่วน sql ปรับตามความเหมาะสม ครับ ทดลองดู

มันแสดงแค่เรคคอร์ดแรก เหมือนเดิมครับ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: lo_singburihosp ที่ กรกฎาคม 08, 2011, 16:19:05 PM
ขอดู sql หน่อยครับ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: lo_singburihosp ที่ กรกฎาคม 08, 2011, 16:36:42 PM
Value := GetSQLStringData('select concat ("¨Ó¹Ç¹ ",ot.qty," ÇÔ¸Õãªé ",du.shortlist) as txt '
+' from opitemrece ot '
+' left outer join drugusage du on du.drugusage=ot.drugusage '
+' where ot.vn="'+dbpipeline['vn']+'" and ot.icode in ("1500801" ,"1460327") ');

ถ้าเป็น code นี้ออกไม่เกิน 2 ค่า เพราะถูกกำหนดที่ icode เลือก 1500801 และ 1460327 เท่านั้นครับ
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: nummon ที่ กรกฎาคม 08, 2011, 20:10:35 PM


function GetSQLStringData,GetSQLIntegerData,GetSQLDateData,GetSQLDoubleData
จะดึงข้อมูลเฉพาะ fieldแรก ของ recordแรกเท่านั้น ถึงแม้ sql ที่ใส่เข้าไป
จะได้ผลหลายrecords


ต่างจาก GetListFromQuery จะแสดง fieldแรก ของ ทุกrecords
มาเรียงกัน
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 11, 2011, 09:07:01 AM
ขอดู sql หน่อยครับ
Value := GetSQLStringData('select concat ("¨Ó¹Ç¹ ",ot.qty," ÇÔ¸Õãªé ",du.shortlist) as txt '
+' from opitemrece ot '
+' left outer join drugusage du on du.drugusage=ot.drugusage '
+' where ot.vn="'+dbpipeline['vn']+'" and ot.icode in ("1500801","1460327") ');
หัวข้อ: Re: สอบถามการใช้ variable แสดงค่า
เริ่มหัวข้อโดย: panus_t ที่ กรกฎาคม 11, 2011, 15:09:03 PM


function GetSQLStringData,GetSQLIntegerData,GetSQLDateData,GetSQLDoubleData
จะดึงข้อมูลเฉพาะ fieldแรก ของ recordแรกเท่านั้น ถึงแม้ sql ที่ใส่เข้าไป
จะได้ผลหลายrecords


ต่างจาก GetListFromQuery จะแสดง fieldแรก ของ ทุกrecords
มาเรียงกัน

ขอบคุณครับ แล้วทำไง Memo จึงจะตัดข้อความให้อยู่ภายในกรอบ ตอนนี้มันเป็น 1 บรรทัด ยาว มาก เอา AutoSize ออกแล้วนะครับ

ได้แล้วครับ ต้องเลือก Wordwrap    ;D

ถ้าต้องการให้ขึ้นบรรทัดใหม่ทุกครั้งที่เป็นเรคคอร์ดใหม่ ทำได้หรือเปล่าครับ
ลองแล้วมันขึ้นบรรทัดใหม่ให้เองครับ 55