BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: kobe ที่ มิถุนายน 01, 2010, 09:18:35 AM
-
อยากทราบว่าการใช้ฟังก์ชั่น GetSQLStringData() กับ GetSQLSubQueryData() ใน Report Designer ใช้ต่างกันยังไงครับ
-
GetSQLStringData เอาไว้ดึงค่า ๆ เดียวครับ
ส่วน GetSQLSubQueryData() เอาไว้ดึงข้อมูลเป็น เพื่อสร้างเป็นเงื่อนไขของคำสั่ง SQL อีกที
เช่น
GetSQLSubQueryData('select hn from patient limit 3')
ผลลัพที่ได้จะเป็น
'xxxxxxx','xxxxxxx','xxxxxxx'
สามารถเอาตัวแปรมารับแล้วเอาไปใส่ในคำสั่ง SQL
-
GetSQLStringData เอาไว้ดึงค่า ๆ เดียวครับ
ส่วน GetSQLSubQueryData() เอาไว้ดึงข้อมูลเป็น เพื่อสร้างเป็นเงื่อนไขของคำสั่ง SQL อีกที
เช่น
GetSQLSubQueryData('select hn from patient limit 3')
ผลลัพที่ได้จะเป็น
'xxxxxxx','xxxxxxx','xxxxxxx'
สามารถเอาตัวแปรมารับแล้วเอาไปใส่ในคำสั่ง SQL
แล้วเวลาเอาตัวแปรมารับผลลัพธ์ของ GetSQLSubQuery() เราจะอ้างถึงข้อมูลที่ Query ออกมายังไงครับ เช่น ตัวอยางของคุณ Imnuke ได้ผลลัพธ์มา 3 hn แล้วผมจะอ้างถึง hn ที่ 1 ยังไงครับ
-
GetSQLStringData เอาไว้ดึงค่า ๆ เดียวครับ
ส่วน GetSQLSubQueryData() เอาไว้ดึงข้อมูลเป็น เพื่อสร้างเป็นเงื่อนไขของคำสั่ง SQL อีกที
เช่น
GetSQLSubQueryData('select hn from patient limit 3')
ผลลัพที่ได้จะเป็น
'xxxxxxx','xxxxxxx','xxxxxxx'
สามารถเอาตัวแปรมารับแล้วเอาไปใส่ในคำสั่ง SQL
แล้วเวลาเอาตัวแปรมารับผลลัพธ์ของ GetSQLSubQuery() เราจะอ้างถึงข้อมูลที่ Query ออกมายังไงครับ เช่น ตัวอยางของคุณ Imnuke ได้ผลลัพธ์มา 3 hn แล้วผมจะอ้างถึง hn ที่ 1 ยังไงครับ
ผลลัพธ์ที่ได้คือ String 1 ตัว ที่มีค่า 'xxxxxxx','xxxxxxx','xxxxxxx'
แล้วคำสั่ง SQL ของเราก็คือ String
เราสามารถนำตัวแปรที่ได้มาต่อกับคำสั่ง SQL ได้เลย
เช่นต้องการชื่อนามสกุลของ 3 คนนี้
ก็จะได้ SQL ประมาณนี้ครับ
fhn := GetSQLSubQueryData('select hn from patient limit 3');
SQL := 'select concat(pname,fname," ",lname) from patient where hn in ('+ fhn +')';
แล้วนำตัวแปร SQL ไปรันได้เลย
การใช้ SubQuery ใน SQL บางครั้งจะทำให้การดึงข้อมูลช้า
การใช้ GetSQLSubQueryData() จะทำรายงานเราดึงข้อมูลได้เร็วขึ้น (ในกรณีที่มีการใช้ SubQuery ซ้ำ ๆ กันหลายรอบ)
ถ้าพลาดยังไง ขออภัยด้ยนะคับ ;D
-
ขอถามอีกข้อครับ ถ้าผมต้องการสร้างรายการตัวเลือกแบบ Listbox (ตามรูป) โดยตัวรายการแสดงเป็นชื่อของยา แล้วใช้คำสั่ง SQL ดึงข้อมูล โดยอ้างถึง icode ของยาใน listbox นั้นต้องทำยังไงครับ ผมลองทำแล้วตัวรายการเลือกมันแสดงเป็น icode ของยาครับ (ตามรูป) พอดึงชื่อมาแสดงใน listbox แล้วรันคำสั่ง SQL โดยอ้างชื่อมันไม่ตรงเงื่อนไขอะครับ
-
Query ชื่อยากับ Icode ออกมาเลยครับ
แล้วใช้ substring ดึง icode
เดี๋ยวบ่าย ๆ มาลง code ให้
-
ขอถามอีกข้อครับ ถ้าผมต้องการสร้างรายการตัวเลือกแบบ Listbox (ตามรูป) โดยตัวรายการแสดงเป็นชื่อของยา แล้วใช้คำสั่ง SQL ดึงข้อมูล โดยอ้างถึง icode ของยาใน listbox นั้นต้องทำยังไงครับ ผมลองทำแล้วตัวรายการเลือกมันแสดงเป็น icode ของยาครับ (ตามรูป) พอดึงชื่อมาแสดงใน listbox แล้วรันคำสั่ง SQL โดยอ้างชื่อมันไม่ตรงเงื่อนไขอะครับ
... ประมาณว่า ....
var
listbox,icode : string;
begin
listbox:= GetPickupList('select concat(name," ",strength," / ",units,"(",icode,")") '+
'from drugitems order by name,strength,units ');
{สร้างรายชื่อยาให้เลือกใน list}
icode:= GetSQLStringData('select icode from drugitems '+
'where concat(name," ",strength," / ",units,"(",icode,")") = "'+listbox+'" ');
{แปลงค่าใน listbox ให้เป็น icode}
end;
... จากนั้นก็เอา icode ไปใช้งานได้ครับ ผมอธิบายเรื่องทฤษฎีไม่ค่อยเก่งเหมือนน้องนุ๊กนะครับ .. :D ...
... เรื่องเอาชื่อยา(หรืออื่นๆ)มาทำเป็น list ให้เลือก ต้องระวังนิดเรื่องรายชื่อยาที่อาจจะมีการซ้ำกันได้ ถ้าใช้ชื่อยาอย่างเดียว อาจได้ค่า icode ที่เราอ้างอิงจากชื่อยาผิดจากที่เราต้องการได้ครับ ...
-
ลง Code เลยละกันครับ มีนิดเดียว
procedure GlobalOnCreate;
var cm,icode:String;
begin
cm:=GetPickupList('select concat(icode," - ",name) from drugitems limit 10');
icode := Copy(cm,0,7);
showmessage('ICODE = '+icode);
end;
อันนี้ไม่ต้องกังวลชื่อยาซ้ำกันครับ ;D
-
ขอบคุณทุกคำแนะนำครับ
-
... สอบถามนิดนะครับน้องนุ๊กหรือ อ.ท่านอื่นๆ ครับ เกี่ยวกับ GetSQLSubQueryData ว่ามันมี limit ของข้อมูลหรือเปล่าครับ ถ้ามีเป็นขนาดเท่าไรครับ ...
... ผมเคยใช้ GetSQLSubQueryData เพื่อเก็บค่า HN (ซึ่งมีประมาณ 8,000 record) ปรากฏว่า GetSQLSubQueryData ไม่มีข้อมูลเลยครับ
แต่ถ้ากำหนดให้มี limit แค่ 500 ปรากฏว่ามีข้อมูลของ HN ให้ได้(500 record)ครับ .... :D ....
-
... สอบถามนิดนะครับน้องนุ๊กหรือ อ.ท่านอื่นๆ ครับ เกี่ยวกับ GetSQLSubQueryData ว่ามันมี limit ของข้อมูลหรือเปล่าครับ ถ้ามีเป็นขนาดเท่าไรครับ ...
... ผมเคยใช้ GetSQLSubQueryData เพื่อเก็บค่า HN (ซึ่งมีประมาณ 8,000 record) ปรากฏว่า GetSQLSubQueryData ไม่มีข้อมูลเลยครับ
แต่ถ้ากำหนดให้มี limit แค่ 500 ปรากฏว่ามีข้อมูลของ HN ให้ได้(500 record)ครับ .... :D ....
;D ;D ;D ดูของผมนะครับ
-
ไม่แน่ใจเหมือนกันครับ อ.ขวด
แต่ขอเดาไว้ก่อน อิอิ ถ้ามี limit จริง ๆ คงเป็น limit ที่เป็น lenght ของ string อ่ะครับ
ปกติก็ไม่เคยใช้ถึงสักที
แต่เห็นของ อ.เจม แล้ว เหมือนชีวิตจะเกิน 100 เลยนะครับ (ไม่มี limit ชีวิตเกิน 100) ;D
-
... สงสัยอย่างที่นุ๊กบอกครับ พอดีจำไม่ได้ว่าตอนที่เจอเป็นรายงานที่ใช้คำสั่งแบบไหน .. :D ...
หรืออาจรีบร้อนไม่ได้รอให้มีการประมวลผลข้อมูลซึ่งเยอะมากเสร็จก่อน
วัยรุ่นก็เงี๊ยแหละครับ ใจร้อน 555555 ... ;D ;D .....
-
ขอถามอีกข้อครับ ถ้าผมต้องการสร้างรายการตัวเลือกแบบ Listbox (ตามรูป) โดยตัวรายการแสดงเป็นชื่อของยา แล้วใช้คำสั่ง SQL ดึงข้อมูล โดยอ้างถึง icode ของยาใน listbox นั้นต้องทำยังไงครับ ผมลองทำแล้วตัวรายการเลือกมันแสดงเป็น icode ของยาครับ (ตามรูป) พอดึงชื่อมาแสดงใน listbox แล้วรันคำสั่ง SQL โดยอ้างชื่อมันไม่ตรงเงื่อนไขอะครับ
ลองศึกษาจาก http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=12853.0 ครับ