26 June 2012

ก้าวแรกกับ Delphi ตอน การเช็ค Column Index ใน DBGrid ของ Devexpress




    ก้าวแรกกับ Delphi ในตอนนี้จะเป็นการกล่าวถึงการทำงานกับ DBGrid ของ Devexpress ครับ
สำหรับตัวอย่างนี้จะเป็นการตรวจสอบว่า cell ที่เรากำลัง Click อยู่นั้นอยู่ใน Column ที่เราต้องการใช่หรือไม่ ในกรณีนี้ผมต้องการเช็คว่าเป็น column index ที่ 0 ใช่หรือไม่ หากใช่จะทำการ show messagebox ครับ

[Delphi]
var AColumn: TcxGridDBColumn; begin AColumn := ACellViewInfo.Item as TcxGridDBColumn; if AColumn.Index = 0 then showmessage('Hello World');
จุดที่เดายากก็น่าจะเป็นการสร้างตัวแปล AColumn มารับค่า Column Index นั่นเองครับ เมื่อรู้อย่างนี้แล้วก็ลุยต่อเลยครับ..


ขอบคุณ web Devexpress ครับ

19 May 2012

บันทึกกำลังใจ ตอน "พี่ฟาร์ม"

         
         
         บ่ายวันนี้เจ้าหน้าที่ รพ.สต. โทรเข้ามา "พี่ฟาร์ม คอมพ์เข้าเครื่องแม่(ข่าย) ไม่ได้ค่ะ"  แม้ผมจะอายุน้อยกว่าแต่เจ้าหน้าที่ที่นี่พากันเรียก "พี่ฟาร์ม" กันทุกคนจนทำให้อดส่องกระจกดูไม่ได้ว่า ผมขาวของเรามันเพิ่มขึ้นอีกหรือเปล่า ผมถามคำถามที่ผมมักจะถามเป็นประจำ "ได้ลอง Restart เครื่อง หรือยังครับ" และคำตอบที่ได้เป็นประจำก็คือ "Restart แล้วก็ยังไม่ได้ค่ะ" (โดยส่วนตัวแล้วแอบดีใจที่อย่างน้อย User ที่ผมดูแลสามารถเรียนรู้ที่จะพยายามแก้ปัญหาเบื้องต้นด้วยตัวเอง) และคำตอบของผมที่ผมมักจะตอบเป็นประจำเหมือนกันก็คือ "แล้วผมจะไปดูให้ครับ" ผมจึงขับรถออกไปดูยังสถานที่เกิดเหตุ ปรากฏว่า ไม่สามารถติดต่อฐานข้อมูลได้จริงอันเนื่องมาจาก Lan on Broad พัง อาจเนื่องมาจากไฟกระชากหรือสาเหตุใดก็สุดจะทราบได้ หากเป็นสมัยก่อนจะซื้อ Lan Card สักตัวคงต้องเข้าตัวเมือง แต่สมัยนี้ผมแค่วนรถออกมานอก รพ.สต. ก็ซื้อได้แล้วราวกับขับรถออกมาซื้อไอศครีม
   
          เมื่อเปลี่ยนอะไหล่ ทุกอย่างก็ใช้ได้เหมือนเดิม และแล้วหน้าที่ของ "พี่ฟาร์ม" ก็ได้จบลง พร้อมกับขนมทุกเบ้อเร้อและก๋วยเจ้าอร่อยกลับมาทานที่บ้านกับภรรยาอย่างมีความสุขสืบไป

ไม่น่าเชื่อว่า บางครั้งบางทีแค่รอยยิ้มจริงๆเล็ก หรือคำทักทายอย่างเป็นเอง ก็ทำให้หัวใจพองโต และ ยินดีที่จะช่วยไม่ว่าเมื่อไหร่ "กำลังใจมักมาจากสิ่งที่คาดไม่ถึงเสมอ"

20 April 2012

ก้าวแรกกับ Delphi ตอนที่ 4 Bug ปริศนา กับภาษา Programing

ภาพจาก http://www.idatabase.in.th
      เมื่อแรกจับ Delphi สิ่งที่ไม่ชอบมากๆอย่างแรกคือ Error ที่แสดงไม่เป็น ภาษามนุษย์ เหมือนกับ VB ที่ถนัด ดังนั้นเมื่อเจอ Bug แต่ละตัว ก็หน้ามืดเพราะไม่รู้ว่าผิดตรงไหน อย่างไรเลยต้องค่อยๆ เดา บวกกับความไม่ถนัดในภาษา Pascal เลยทำให้ Bug ตัวหนึ่งผมต้องใช้เวลาแก้หลายชั่วโมง ซึ่ง Bug ส่วนใหญ่ที่ผมพบมักเกิดจากความไม่เข้าใจใน Function หรือ Syntax ที่ใช้ในการเขียน โปรเจคที่ดูเหมือนจะง่ายๆ ก็ปาเข้าไปหลายอาทิตย์ แต่ผมก็คิดว่าอย่างๆน้อยๆ ก็ต้องฝึก จะยากจะง่ายก็ใช้ Delphi ทำไปก่อนจนกว่าเราจะเข้าใจและใช้เป็น Bug จึงเหมือนเป็นปริศนาที่ผมต้องเจอ และ ต้องแก้ให้ได้
     
      การแก้ Bug ของผมส่วนใหญ่ๆเลยก็คือหาจาก Google หรือ Source code เก่า ของ HOSxP รวมถึง Source Code ที่พี่อาร์มให้มาบ้าง ของ อ.ดุสิต บ้าง มาประกอบกัน จากการศึกษา Source Code ของ อาจารย์ทั้งหลาย ทำให้ได้ทราบทั้งแนวความคิด รูปแบบการเขียน และอื่นๆ เท่าที่ Source Code จะสื่อได้
จากการอดนอนหลายคืนเพื่อศึกษา แม้จะใช้เวลานานแต่มันก็คุ้มค่าครับ

12 April 2012

MySQL การใช้เงื่อนไขในการเลือก Diag ที่เป็น ICD10 หรือ ICD9 เท่านั้น

ที่มาของภาพ http://chrissanders.org

ในการเลือก Diagnosis จากตาราง ovstdiag โดยต้องการเลือกเฉพาะ Diagnosis ที่เป็น ICD10  หรือ ICD9 เท่านั้น สามารถทำได้โดยการใช้เงื่อนไขว่า character แรกต้องเป็น หนังสือ (ICD10) ซึ่งทำได้โดยการใช้คำสั่ง REGEXP  '[A-Za-z]'    หรือ เป็นตัวเลข (ICD9)  ซึ่งทำได้โดยการใช้คำสั่ง REGEXP  '[0-9]' เป็นตัวจับ

ตัวอย่าง ICD10


SELECT ov.*,icd101.`code`,icd101.name,dc.`name` as doctorname from ovstdiag ov  
left join doctor dc on ov.doctor = dc.`code`
left join icd101 on ov.icd10 = icd101.`code` where vn = '550101080140' and left(icd103,1) REGEXP '[A-Za-z]'   order by diagtype

ตัวอย่าง ICD9

SELECT ov.*,icd9cm1.`code`,icd9cm1.name,dc.`name` as doctorname from ovstdiag ov  
left join doctor dc on ov.doctor = dc.`code`
left join icd9cm1 on ov.icd103 = icd9cm1.`code` where vn = '550101080140' and left(icd103,1) REGEXP '[0-9]'   order by diagtype



คำสั่ง REGEXP ชื่อเต็มคือ Regular Expression คำอธิบาย : http://dev.mysql.com/doc/refman/5.1/en/regexp.html




ที่มา 
ตัวอย่างที่ใช้ศึกษา : http://stackoverflow.com/questions/1471523/select-only-rows-that-contain-only-alphanumeric-characters-in-mysql

10 April 2012

แรงบรรดาลใจ สร้างได้ไม่สิ้นสุด

ที่มาของรูป http://megandouglasteach.blogspot.com

          ในสถานการณ์ที่บีบคั้นกดดันมากๆ บางครั้งสิ่งที่ทำให้เรากัดฟันอดทน แล้วก้มหน้าก้มตาพยายามสู้ต่อ ก็เป็นเพียงคำพูดๆ หนึ่งของใครบางคนเท่านั้น บางทีอาจไม่ใช่แม้แต่คำให้กำลังใจ และในบางครั้งอาจไม่ได้เป็นคำพูดที่มาจากคนที่เราแคร์เสียด้วยซ้ำ
       อย่างตอนที่ผมรู้สึกท้อในการเรียนที่อเมริกามากๆ คำพูดที่คอยผลักดันตัวผมกลับเป็นคำทำนายของหมอดูปากพล่อยคนหนึ่งที่ตราหน้าผมไว้ว่าผมจะทำให้พ่อกับแม่ผิดหวัง
      แล้วไม่กี่ปีม
านี้ตอนที่ผมรู้สึกเหนื่อยกับการสอนนิสิตนักศึกษาในมหาวิทยาลัยเหลือเกิน สิ่งที่ทำให้ผมรู้สึกว่าอาชีพอาจารย์นี้ยังมีค่าอยู่ก็เป็นคำพูดจากนักเรียนมัธยมคนหนึ่งที่ผมเคยสอน เขาบอกผมว่า "อาจารย์เป็นแรงบันดาลใจของผม
แล้วคำพูดที่คอยผลักดันของพวกเราแต่ละคนคืออะไรกันล่ะครับ เชิญเข้ามาแบ่งปันเรื่องราวดีๆ ให้ฟังกันหน่อย และบางทีแล้ว คนที่ยังไม่มีแรงผลักดันเช่นนี้อยู่เลย อาจได้รับแรงบันดาลใจจากเรื่องราวของใครสักคนในนี้ก็ได้ :-)
 
โดย ดร.เอกสิทธิ์ เทียมแก้ว "  บทความดีๆ ก็สร้างแรงบันดาลใจให้กับใครหลายๆคน ตัวผมเองก็เช่นกัน

    แรงบันดาลใจของผมมักมาจากหนังที่ผมดู หนังสือที่ผมอ่าน บางทีผมได้แรงบันดาลใจจากคำพูดของคนอื่น หรือระบบงานใหม่ๆที่เข้ามาท้าทาย แต่ผมก็แอบหมดไฟอยู่เรื่อย ร่างกายมันเริ่มหนัก ไม่มีสมาธิ สมองไม่วิ่ง ไม่อยากทำงาน เบื่อหน่าย รู้สึกหยุดคิดเรื่องงานไม่ได้แม้จะรู้ตัวว่าคิดเรื่องงานมากเกินไป แต่ก็ยังไม่หยุดคิด มีเรื่องเครียดรุมเร้า จนคิดแล้วว่าบางทีอาจจะเป็นโรคซึมเศร้า ในวันที่ดูเหมือนจะล้มเพราะความเหนื่อยล้า เสียงตะโกนว่า "พ่อกลับมาแล้ว" ดังลั่นบ้านพร้อมกับเสียงวิ่งตุบๆมารับเมื่อผมกลับมาถึงบ้าน แล้วถามว่า "พ่อจ๋า พ่อเสร็จงานหรือยัง" ผมยิ้มแล้วตอบว่า "พ่อเสร็จงานแล้วลูก" ลูกสาวคนสวยวิ่งเข้ามากอดแล้วพูดว่า "เอิงรักพ่อที่สุดในโลกเลย" สำหรับคนเป็นพ่อแล้ว ลูกคือแรงบันดาลใจ กำลังใจ และหัวใจของพ่อ 

    หากคุณเหนื่อยล้าจนเกินใจจะรับไหว กลับไปบ้านเถอะครับ แล้วคุณจะพบว่าแรงบันดาลใจสร้างได้ไม่สิ้นสุดจริงๆ

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

16 March 2012

กาลครั้งหนึ่งในมอนอ (One upon a time in NU)


     หลังจากที่กรำศึกกับงานและงานมาหลายต่อหลายเดือน ข้าพเจ้าได้ใช้เวลาสองวันที่ผ่านมากลับไปตามรอยชีวิตช่วงมหาวิทยาลัยของตัวเองโดยการกลับไปที่คณะ ขับรถจากตัวเมืองไม่นานข้าพเจ้าก็ได้กลับเข้ารั่วมหาวิทยาลัยอีกครั้ง หลังจากที่ผ่านมา 8 ปี บอกกับตัวเองว่าอยากพบอาจารย์ที่เคยประสิทธิ์ประสาทวิชาความรู้ให้สักครั้ง  แต่ก็พบแต่เพียงหน้าห้องทำงานเพราะโชคร้ายที่อาจารย์วศินท่านติดประชุม อ.อธิศ ไม่อยู่ เนื่องจากปิดภาคเรียน

    ข้าพเจ้าเดินไปวนไปวนมาในคณะ เพื่อระลึกความหลังเก่าๆ ภาพตัวเองเดินไปเดินมาในคณะ ภาพที่นั่งเรียนอยู่ในห้องเรียน เพื่อนๆที่เคยกิน เคยหัวเราะ และกิจกรรมในคาบเรียนที่เราเคยทำด้วยผุดขึ้นในหัวอย่างต่อเนื่องเหมือนในหนัง ทำให้ข้าพเจ้าเผลอยิ้มออกมาอยากมีความสุข คณะที่เคยเรียนดูเก่าและทรุดโทรมลงไปมาก โต๊ะที่เคยนั้งยังคงอยู่ที่เดิมของมัน ห้องต่างๆที่เคยรู้จักก็สลับย้ายที่ ประตูห้องประชุมที่เคยสีสันเข้มก็จากลง เสียงซ้อมเชียร์ของนักศึกษายังคงดังก้องมาจากอาคารกิจกรรมหลังใหม่อย่างต่อเนื่อง มหาวิทยาลัยวันนี้ได้เปลี่ยนไปแล้วแต่สิ่งที่ยังสัมผัสได้เสมอคือกลิ่นอายของมหาวิทยลัยที่ยังคงเหมือนเดิม คงไว้ซึ่งมลคลังแบบมหาวิทยาลัยนเรศวร ที่หากผู้ที่ไม่เคยศึกษาที่นี้คงไม่มีวันเข้าใจ

    ข้าพเจ้าเดินเลยมาถึงตึก IT ทุกอย่างยังแทบจะเหมือนกับเมื่อสมัยที่ผมทำงานอยู่ ข้าพเจ้าเดินเข้าไปที่ห้องธุรการเพื่อมองหาคนรู้จัก เมื่อเปิดประตูเข้าไปมีคุณพี่่คนหนึ่งจำผมได้แม้จะหลายปีแล้ว ทักทายกันสักพัก รุ่นน้องที่คณะที่เคยทำงานด้วยกันในวันนั้นก็เดินเข้ามาในห้อง วันนี้เธอกลายเป็นเจ้าหน้าที่เต็มตัวเห็นก็อดยิ้มไม่ได้ ข้าพเจ้าถามหาพี่ขวัญ เพราะข้าพเจ้าอยากพบแต่ไม่รู้ว่าจะไปหาที่ไหน เมื่อสอบถามจนได้ความว่าแกย้ายไปอยู่กองบริการนิสิตแล้ว ภาระกิจตามรอยอดีตของผมจึงไม่ถือว่าล้มเหลวเสียทีเดียว

    ในที่สุดข้าพเจ้าได้เจอกับพี่ขวัญ ผู้ที่เป็นทั้งพี่ ทั้งอาจารย์ และเพื่อนร่วมงานที่ผมนับถือและจัดว่าคุ้นเคยกันมากที่สุด เราได้นั่งคุยกันในเรื่องเก่าๆ ส่วนใหญ่ก็ประวัติอันไม่น่าจดจำของผม ที่เคยก่อเรื่องน่าปวดหัวไว้ ซึ่งได้ทั้งข้อคิดและแนวคิดในการทำงานต่อไปของผมต่อไป เรามีเวลาจำกัด เพียงกาแฟหมดแก้วก็ต้องแยกย้ายกันไป

   ข้าพเจ้าขับรถออกจากรั้วมหาวิทยาลัยอย่างมีความสุขความทรงจำเกี่ยวกับชีวิตในรั่วมหาวิทยาลัยในยุคสมัยของข้าพเจ้าจะคงอยู่ในตัวของข้าพเจ้าตลอดไป
                                                                                               

                                                                                                             อดีตนักศึกษาปี 44'

04 March 2012

ก้าวแรกกับ Delphi ตอนที่ 3

   การประยุกต์ใช้ Abbrevia 5.0 ในการแตกไฟล์ ZIP


ภาพประกอบจาก http://www.downlopedia.com/7-zip

     เมื่อผมทำงานกับระบบ 21 แฟ้ม เป็นธรรมดาที่ต้องเขียนโปรแกรมเพื่อแตกไฟล์ ZIP (Compress File) ซึ่งเป็นไฟล์บีบอัด เพื่อนำข้อมูลด้านในออกมาวิเคราะห์ แต่การจะทำอย่างนั้นใน Delphi ผมไม่เคยลองมาก่อน จึงนั่งศึกษาใน Webboard จากหลายๆที่ ซึ่งข้อมูลส่วนใหญ่ผมมักได้จาก Stack OverFlow เมื่อวานผมได้เจอกระทู้ที่ถามว่า จะใช้ Component ใดมาทำงานกับไฟล์ ZIP ก็ได้รับคำตอบว่าทำไมไม่ลอง เจ้า Abbrevia ละ เป็น Opensource ด้วยนะ ผมเลยไป Download มาลองดู จากการใช้งานต้องยอมรับว่ามัน OK จริงๆครับ
เลยทำเป็น Code ตัวอย่างไว้ให้ดูครับ