Spiritualized - Lay It Down Slow (Prison Break Finale Song) 3
Good bye michael
Good bye michael
พอดีแบบว่ามีงานนอกต้องหาเลี้ยงปากท้อง และต้องทำด้วย php ผมเลยหัดใช้ AJAX และมาหัดใช้ prototype เพราะเห็นชื่อเสียงดี ตอนแรกลังเลใจระหว่าง jQuery กับ prototype แต่ว่าพอดีเห็นพี่สุดหล่อผม พี่นพ www.nop.in.th แกใช้ prototype ฉะนั้น เลยเป็นการดีสำหรับผมที่จะเลือก prototype เผื่อเวลาติดปัญหาอะไรก็จะได้ถามแกได้ ฮ่าๆๆ ไม่เสียเวลาดี
หลังจากที่ผมเลือก prototype แล้วผมก็ดั้นด้นเองเพื่อหาตัว validate form ดีๆ มาใช้ ก็ปรากฏว่าไปเจอกับเจ้า really easy field validation (ใช่ชื่อมันมั้ยนะ ?)
หน้าหลักเค้าอยู่ที่
http://tetlaw.id.au/view/javascript/really-easy-field-validation
ส่วนหน้า demo online ลองทดสอบได้ที่
http://tetlaw.id.au/upload/pages/really-easy-field-validation/
โดยที่หน้า demo ลอง view source code ดูตัวอย่างการเขียนได้นะครับ เช่น textbox เราจะบังคับให้ User ต้องกรอกข้อมูลจะต้องเขียนว่า
<input name="field1" id="field1" class="required" title="Enter your name" />
เป็นต้น
สำหรับclass ทั้งหมดที่ใช้ validate ก็มีดังนี้ครับ
เนื่องด้วยผมหา Code ให้ Grid ไป Focus Row ที่ผมต้องการเหมือนอย่าง Delphi ไม่ได้ (ภาษาถนัดนะนั่น) สงสัยเพราะผมยังใช้ Google ไม่เก่งพอ เลยหาวิธีการไม่เจอ ดังนั้นผมเลยใช้วิธีแบบบ้านๆ ที่ผมมั่วเอาเองแบบนี้ครับ
Dim intDB_RowIndex As Integer intDB_RowIndex = CustomersBindingSource.Find("CUS_CODE", txtCustomerCode.Text) If intDB_RowIndex > -1 Then dgView.ClearSelection() dgView.Rows(intDB_RowIndex).Selected = True End If
เพียงเท่านี้ Grid ของเราก็จะไป Focus ที่ Row นั้นแล้วครับ โดยที่ถ้ามันค้นหาไม่เจอ Function Find จะ Return ออกมาเป็น -1 ครับ
ปัญหานี้จะเกิดกับ Application ที่ใช้วิธีการติดตั้งแบบ Click Once ครับ โดยถ้าพบ Error มีข้อความประมาณว่า
Unable to install or run the application. The application requires that assembly stdole Version 7.0.3300.0 be installed in the Global Assembly Cache (GAC) first.
Please contact your system administrator.
ให้ลองไป Include พวก Reference File ตามรูปด้านล่างนี้นะดูนะครับ

รูป Error
วันก่อนผมใช้ VB.Net เจอ Error ที่ว่า
"The transaction has already been implicitly or explicitly committed or aborted"
วิธีแก้ปัญหาของผมคือ ไปตรวจดูว่า MS DTC ถูกเปิดแล้วหรือยัง แล้วก็ไปดู Firewall ด้วย
ถ้าเราต้องการ Run Transaction บน Linked Server นั้นจะต้องมีการ Setup กันตัว Server MSSql ที่เรา Remote เข้าไปเล็กน้อยครับ ไม่งั้นจะเกิด Error
หากเราต้องการทำงานบน MS SQL โดยข้าม Server กันนั้นจะต้องมีการ Add Linked Server กันก่อนโดยใช้วิธีตามด้านล่างนี้นะครับ
คำสั่งด้านล่างนี้เอาไว้สำหรับ Clear ค่าใน Object Type ต่างๆ ที่วางอยู่ใน GroupBox ครับ เช่น TextBox, RadioButton, ComboBox, NumericUpDown ถ้าอยากเพิ่มอีก ก็เพิ่มได้เลยครับดูจากตัวอย่างน่าจะพอเข้าใจ
วันก่อนพี่แสงชัย ให้ผมตรวจสอบดูว่าในฐานขู้อมูลนี้มีค่า Serial Number แถวไหนบ้างที่มีตัวหนังสือปนอยู่ คือต้องการเก็บตัวเลขล้วนๆ
ตอนแรกผมก็ใช้คำสั่ง IsNumeric ดูปรากฏว่าก็ทำงานได้แหะ
ตัวอย่างการเรียกใช้
SELECT * FROM TR_REC_STK_SR WHERE ISNUMERIC(SERIAL_NO) = 0
โดย IsNumeric จะ Return 1 ให้ถ้าสามารถแปลงข้อความทั้งหมดเป็นตัวเลขได้ แต่หลังจากที่ลองค้นหาจาก Google ต่ออีกซักพัก (เพื่อความชัวร์) ปรากฏว่า คำสั่ง IsNumeric มีจุดอ่อนอยู่ เค้าแนะนำให้ใช้คำสั่งรูปแบบด้านล่างนี้แทนครับ
SELECT *, PATINDEX('%[^0-9]%', SERIAL_NO) FROM TR_REC_STK_SR WHERE PATINDEX('%[^0-9]%', LTRIM(RTRIM(SERIAL_NO))) > 0
ลองรันดู โอ้ว… Record เพิ่มขึ้นมาอีก 4-5 Rows ฉะนั้นถ้าจะตรวจสอบว่าข้อมูลมีแต่ตัวเลขล้วนๆ ให้ใช้แบบหลังแทนครับ
ปล. IsNumeric มันแปลง 1234E หรือ 1234. เป็นตัวเลขได้ครับ เลยต้องใช้ PatIndex แทน