ถ้าต้องการแยกคำนำหน้าชื่อ-ชื่อและนามสกุลออกจากกันไปไว้คนละฟิลด์ต้องทำอย่างไร
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 416   7
URL.หัวข้อ / URL
ถ้าต้องการแยกคำนำหน้าชื่อ-ชื่อและนามสกุลออกจากกันไปไว้คนละฟิลด์ต้องทำอย่างไร

มีคนถามไว้ที่ 
http://pantip.inet.co.th/tech/software/topic/SP906811.html 
ดังนี้ 
 
ใน MS ACCESS ถ้าต้องการแยกคำนำหน้าชื่อ-ชื่อและนามสกุลออกจากกันไปไว้คนละฟิลด์ต้องทำอย่างไร  
คื่อผมใช้ ACCESS เก็บรายชื่อเอาไว้ในภายในฟิลด์ชื่อ NAME ตัวอย่างคือ นายเล็ก เด็กดี ทีนี้ผมต้องการแยก คำนำหน้าชื่อ ชื่อ และนามสกุลออกจากกัน ไปเก็บไว้คนละฟิลด์ สมมตเป็น prename, fname และ lname จะต้องทำยังไงบ้างครับ  
 
จากคุณ : tinyboy [2 เม.ย. 2545 - 16:54:28]  
 
ผมเลยลองทำฟังก์ชันขึ้นมาดังนี้ 
 
Function GetTitle(strName As String) As String 
Dim strTitle As String, strFName As String, strLName As String 
If Left(strName, 6) = "¹Ò§ÊÒÇ" Then 
    strTitle = "¹Ò§ÊÒÇ" 
    strFName = Trim(Mid(strName, 7, InStr(strName, " ") - 7)) 
    strLName = Trim(Mid(strName, InStr(strName, " "))) 
ElseIf Left(strName, 3) = "¹Ò§" Then 
    strTitle = "¹Ò§" 
    strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) 
    strLName = Trim(Mid(strName, InStr(strName, " "))) 
ElseIf Left(strName, 3) = "¹ÒÂ" Then 
    strTitle = "¹ÒÂ" 
    strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) 
    strLName = Trim(Mid(strName, InStr(strName, " "))) 
ElseIf Left(strName, 7) = "à´ç¡ªÒÂ" Then 
    strTitle = "à´ç¡ªÒÂ" 
    strFName = Trim(Mid(strName, 8, InStr(strName, " ") - 8)) 
    strLName = Trim(Mid(strName, InStr(strName, " "))) 
ElseIf Left(strName, 8) = "à´ç¡Ë­Ô§" Then 
    strTitle = "à´ç¡Ë­Ô§" 
    strFName = Trim(Mid(strName, 9, InStr(strName, " ") - 9)) 
    strLName = Trim(Mid(strName, InStr(strName, " "))) 
End If 
Debug.Print strTitle 
Debug.Print strFName 
Debug.Print strLName 
 
End Function 
 
ฟังก์ชันข้างบนยังไม่ได้รวมถึงคำนำหน้าชื่อแบบตัวย่อ เช่น ด.ช. หรือ ด.ญ. อยากจะให้ลองทำต่อดูเองนะครับ 
 
และแน่นอนตัวอย่างจริงอยู่ที่ http://agserver.kku.ac.th/basiceng/instring2.zip ครับ 

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00222
เนื่องจากการ copy จาก Access 97 มายังเว็บจะมีปัญหากับภาษาไทย ผมเลยได้แก้ไขโดยการลากแล้ววาง ซึ่งจะไม่มีปัญหากับภาษาไทย Function GetTitle(strName As String) As String Dim strTitle As String, strFName As String, strLName As String If Left(strName, 6) = "นางสาว" Then strTitle = "นางสาว" strFName = Trim(Mid(strName, 7, InStr(strName, " ") - 7)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาง" Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาย" Then strTitle = "นาย" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 7) = "เด็กชาย" Then strTitle = "เด็กชาย" strFName = Trim(Mid(strName, 8, InStr(strName, " ") - 8)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 8) = "เด็กหญิง" Then strTitle = "เด็กหญิง" strFName = Trim(Mid(strName, 9, InStr(strName, " ") - 9)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If Debug.Print strTitle Debug.Print strFName Debug.Print strLName End Function
2 @R00223
ขอบพระคุณ อ.สุภาพมากๆ ครับ สำหรับความรู้ดีๆ ด้วยความเคารพ และนับถืออย่างสูง Suchat
3 @R00224
ผมอยากสืบค้นข้อมูลเกี่ยวกับการเกษตร มข.พอผมเข้ามาที่เว็บ มข. ไม่ค่อยมีอะไรเลยครับข้อมูลที่น่าสนใจน้อยมาก
4 @R00388
มีคนเจอบักในฟังก์ชันนี้ครับ ที่ http://pantip.inet.co.th/tech/software/topic/SA991757.html คือจะเกิดเมื่อมีคนชื่อ สาว และมีคำนำหน้าเป็น นาง คงต้องแก้โดยการใช้ Len() ช่วยแหล่ะครับ โดยใช้ Function GetTitle(strName As String) As String Dim strTitle As String, strFName As String, strLName As String If Left(strName, 6) = "นางสาว" Then If Len(Trim(Left(strName, InStr(strName, " ") - 1))) = 6 Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) Else strTitle = "นางสาว" strFName = Trim(Mid(strName, 7, InStr(strName, " ") - 7)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If ElseIf Left(strName, 3) = "นาง" Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาย" Then strTitle = "นาย" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 7) = "เด็กชาย" Then strTitle = "เด็กชาย" strFName = Trim(Mid(strName, 8, InStr(strName, " ") - 8)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 8) = "เด็กหญิง" Then strTitle = "เด็กหญิง" strFName = Trim(Mid(strName, 9, InStr(strName, " ") - 9)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If Debug.Print strTitle Debug.Print strFName Debug.Print strLName End Function
5 @R00389
อ.สุภาพ ครับ ในส่วนของ Funtion ข้างล่างนี้ Run ไม่ได้ครับ จะมาหยุดที่ rst.Update ครับ รบกวน อ.สุภาพ อีกครั้งครับ Sub SeparateName() Dim dbs As Database, rst As Recordset, I As Integer Dim strTitle As String, strFName As String, strLName As String Dim strName As String Set dbs = CurrentDb Set rst = dbs.OpenRecordset("tblName") If Not rst.EOF Then For I = 1 To rst.RecordCount rst.Edit strName = rst("Name") If Left(strName, 6) = "นางสาว" Then strTitle = "นางสาว" strFName = Trim(Mid(strName, 7, InStr(strName, " ") - 7)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาง" Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาย" Then strTitle = "นาย" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 7) = "เด็กชาย" Then strTitle = "เด็กชาย" strFName = Trim(Mid(strName, 8, InStr(strName, " ") - 8)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 8) = "เด็กหญิง" Then strTitle = "เด็กหญิง" strFName = Trim(Mid(strName, 9, InStr(strName, " ") - 9)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If rst("PreName") = strTitle rst("FName") = strFName rst("LName") = strLName rst.Update rst.MoveNext Next I End If ขอบพระคุณมากๆ ครับ Suchat ชลบุรี
6 @R00390
นี่คือโค้ดที่ผมแก้ใหม่ครับ Sub SeparateName() Dim dbs As Database, rst As Recordset, I As Integer Dim strTitle As String, strFName As String, strLName As String Dim strName As String Set dbs = CurrentDb Set rst = dbs.OpenRecordset("tblName") If Not rst.EOF Then For I = 1 To rst.RecordCount rst.Edit strName = rst("Name") If Left(strName, 6) = "นางสาว" Then If Len(Trim(Left(strName, InStr(strName, " ") - 1))) = 6 Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) Else strTitle = "นางสาว" strFName = Trim(Mid(strName, 7, InStr(strName, " ") - 7)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If ElseIf Left(strName, 3) = "นาง" Then strTitle = "นาง" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 3) = "นาย" Then strTitle = "นาย" strFName = Trim(Mid(strName, 4, InStr(strName, " ") - 3)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 7) = "เด็กชาย" Then strTitle = "เด็กชาย" strFName = Trim(Mid(strName, 8, InStr(strName, " ") - 8)) strLName = Trim(Mid(strName, InStr(strName, " "))) ElseIf Left(strName, 8) = "เด็กหญิง" Then strTitle = "เด็กหญิง" strFName = Trim(Mid(strName, 9, InStr(strName, " ") - 9)) strLName = Trim(Mid(strName, InStr(strName, " "))) End If rst("PreName") = strTitle rst("FName") = strFName rst("LName") = strLName rst.Update rst.MoveNext Next I End If rst.Close dbs.Close End Sub ซึ่งไม่แตกต่างจากเดิมเท่าไร ยกเว้นที่แก้ไขบักที่มีคนพบครับ ผมลองทดสอบโค้ดตัวเดิม ก็ไม่มีปัญหาอะไร ไม่ทราบว่ามันฟ้องว่าอะไรบ้างครับ
7 @R00392
อ.สุภาพ ครับ ผม Copy Funtion Sub SeparateName() ไปทับของเก่า สามารถ Run ได้แล้วครับ ผมลอง Test กับคนชื่อ นางสาว นางสาวสาว ก็สามารถแยกถูกครับ สำหรับ Funtion ( GetTitle(strName As String) As String และ Sub SeparateName() ) ตอนแรกผม Copy Funtion GetTitle ไปทับของเดิม แล้วลอง Run ดู ปรากฏว่า จะเข้าสู่ Design Module และจะมี Tap สีเหลือง ไปหยุดอยู่ที่บรรทัด rst.Update ในส่วนของ Sub SeparateName แต่เมื่อผม Copy Sub SeparateName ใหม่ ไปทับของเก่าก็สามารถ Run ได้ปกติครับ ขอบพระคุณ อ.สุภาพ มากๆ ครับ Suchat ชลบุรี
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1133s