Posts

Showing posts from November, 2008

VB.Net กับการบังคับป้อนแต่ตัวเลข

บางกรณีเราอยากใช้ TextBox เพื่อรับค่าจาก User และจะบังคับให้ป้อนได้ตัวเลขเท่านั้น โค้ดนี้เป็นอีกรูปแบบนึง Private Sub txtSalary_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSalary.KeyPress e.Handled = TrapKey(Asc(e.KeyChar)) End Sub Private Function TrapKey(ByVal KCode As String) As Boolean If (KCode >= 48 And KCode TrapKey = False Else TrapKey = True End If End Function User จะป้อนได้แต่ตัวเลข และกดเครื่องหมาย Backspace ได้

VB.Net กับ Thread

หากต้องการทำงานแล้วแสดงผลให้ User บนหน้าจอแล้วละก็ Thread เป็นทางเลือกนึงครับ ดังตัวอย่าง Imports System.Threading Public boolStop As Boolean = False ปุ่มนี้ไว้เรียก Run Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim t as Thread t = New Thread(AddressOf Me.TestLoop) t.IsBackground = True boolStop = False t.Start() End Sub ปุ่มนี้ไว้หยุดทำงาน Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click boolStop = True End Sub ทีนี้ก็บนหน้าจอก็วางปุ่มไว้สองปุ่ม ปุ่มนึงไว้ Start Testloop อีกปุ่มไว้หยุด Testloop แล้วก็วาง ListBox ไว้ 1 ตัวเพื่อแสดงการทำงานครับ โค้ด TestLoop เป็นดังนี้ Private Sub TestLoop() Dim i As Integer = 1 If Me.InvokeRequired Then Me.Invoke(New MethodInvoker(AddressOf TestLoop)) Else ListBox1.Items.Clear() Do While Not boolStop ListBox1.Items.Add("Iteration: " ...
ตอนนี้ทำงานอยู่บริษัท ซิงเกอร์ประเทศไทย จำกัด (มหาชน) ซึ่งภาษาที่ใช้เขียนเป็น VB.Net ผมเลยได้เรียนรู้คำสั่ง VB.Net มากขึ้น ซึ่งหนึ่งในนั้นที่คิดว่าจำเป็นจะต้องใช้ ก็ได้แก่การเปลี่ยน Culture ครับ เช่น เครื่องที่ใช้งานตั้ง Regional Setting เป็นอะไรก็แล้วแต่ แต่เราสามารถเปลี่ยนให้เป็น en dd/MM/yyyy ได้ด้วยคำสั่งนี้ละครับ Dim ct As New System.Globalization.CultureInfo("en-US") ct.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy" System.Threading.Thread.CurrentThread.CurrentCulture = ct เป็นตัวอย่างเล็กๆ น้อยๆ ครับ

ตรวจสอบค่าว่าเป็นตัวเลข MSSQL

วันก่อนพี่แสงชัย ให้ผมตรวจสอบดูว่าในฐานขู้อมูลนี้มีค่า 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 แทน

First Title

ในที่สุดผมก็ได้สร้าง Blog กับเค้าซักที (เพิ่งจะมี คนอื่นเบื่อกันหมดแล้ว)