กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
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 ครับ
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
ชลบุรี
Time: 0.1133s