กระทู้เก่าบอร์ด อ.Yeadram
1,422 9
URL.หัวข้อ /
URL
ดู code ให้หน่อย ทำไมได้ 2 แถวครับ
แหล่งข้อมูล
ค่าตอบแทนการปฏิบัติงาน(900,1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
สังเกตตรงเครื่องหมาย คอมม่า (900,1800)
ผมอ่านมาเพื่อไว้ใน combobox ให้ USER เลือกเอาดังนี้
Dim IdFind As Integer
Dim rs As DAO.Recordset
Dim Sqm As String
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Set rs = CurrentDb.OpenRecordset(Sqm)
Dim i
i = 0
Do Until rs.EOF
Me.Extra.AddItem Item:=rs!Extra ', Index:=i
rs.MoveNext
i = i + 1
Loop
rs.Close
Set rs = Nothing
สิ่งที่ผมได้ใน combobox เป็นดังนี้
ค่า??อบแทนการปฏิบัติงาน(900
,1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
กลายเป็น 4 ROW ถ้าผมเปลี่ยนแหล่งข้อมูล
จาก comma เป็น - เช่น
ค่าตอบแทนการปฏิบัติงาน(900-1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
มันก็ได้ 3 ROW อย่างที่ต้องการ
คำถามคือ CODE ที่เขียนมันผิดตรงไหนครับ หรือผมต้องแก้ไขอะไร
เพราะจะไปบังคับ USER ให้ KEY - แทนคงทำไม่ได้
ขอบคุณทุกคำตอบครับ
ค่าตอบแทนการปฏิบัติงาน(900,1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
สังเกตตรงเครื่องหมาย คอมม่า (900,1800)
ผมอ่านมาเพื่อไว้ใน combobox ให้ USER เลือกเอาดังนี้
Dim IdFind As Integer
Dim rs As DAO.Recordset
Dim Sqm As String
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Set rs = CurrentDb.OpenRecordset(Sqm)
Dim i
i = 0
Do Until rs.EOF
Me.Extra.AddItem Item:=rs!Extra ', Index:=i
rs.MoveNext
i = i + 1
Loop
rs.Close
Set rs = Nothing
สิ่งที่ผมได้ใน combobox เป็นดังนี้
ค่า??อบแทนการปฏิบัติงาน(900
,1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
กลายเป็น 4 ROW ถ้าผมเปลี่ยนแหล่งข้อมูล
จาก comma เป็น - เช่น
ค่าตอบแทนการปฏิบัติงาน(900-1800)
ค่าโบนัสตอบแทนเจ้าหน้าที่ประจำปี
ค่าปฏิบัติงานนอกเวลาราชการ(OT)
มันก็ได้ 3 ROW อย่างที่ต้องการ
คำถามคือ CODE ที่เขียนมันผิดตรงไหนครับ หรือผมต้องแก้ไขอะไร
เพราะจะไปบังคับ USER ให้ KEY - แทนคงทำไม่ได้
ขอบคุณทุกคำตอบครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R03816
ถ้าชนิดแหล่งข้อมูลเป็น Table/query จะใช้ได้ตามที่ต้องการ (3 row)
แต่ถ้าเป็น value list เขียน vba จะเป็นการอ่านสมาชิก มา 4 row
1 ต้องห้ามใช้ คำสงวนเหล่านี้ ตามที่คุณ yeadram แนะนำ
2 ใช้ replace ก่อน แทนค่าใน recordset เพื่อขจัด คำสงวน
วิธีอื่นยังนึกไม่ออกครับ
แต่ถ้าเป็น value list เขียน vba จะเป็นการอ่านสมาชิก มา 4 row
1 ต้องห้ามใช้ คำสงวนเหล่านี้ ตามที่คุณ yeadram แนะนำ
2 ใช้ replace ก่อน แทนค่าใน recordset เพื่อขจัด คำสงวน
วิธีอื่นยังนึกไม่ออกครับ
3 @R03818
ใช่ครับ มันเป็น value list
ขอบคุณทั้งสองท่านครับ
ขอบคุณทั้งสองท่านครับ
4 @R03823
ทำไมไม่เขียน
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Me.Extra.RowSource =Sqm
ส่วน RowSourceType property ของคอมโบบ็อกซ์นี้ก็กำหนดให้เป็น Table/Query
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Me.Extra.RowSource =Sqm
ส่วน RowSourceType property ของคอมโบบ็อกซ์นี้ก็กำหนดให้เป็น Table/Query
5 @R03836
code เต็มเป็นอย่างนี้ครับ อาจารย์
Sub ExtraList() '¶Í´ list áÅÐ add list ã¹àÇÅÒà´ÕÂǡѹ
Dim k
For k = 100 To 0 Step -1
On Error Resume Next
Me.Extra.RemoveItem k
Next k
Dim IdFind As Integer 'ËÒ¤èÒµÑÇàÅ¢¡ÅØèÁËÅÑ¡
Dim Ro As DAO.Recordset
Set Ro = CurrentDb.OpenRecordset("RubType")
Do Until Ro.EOF
If Me.TypeRubJay = Ro!RubType Then
IdFind = Ro!ID
End If
Ro.MoveNext
Loop
Ro.Close
Set Ro = Nothing
Dim rs As DAO.Recordset
Dim Sqm As String
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Set rs = CurrentDb.OpenRecordset(Sqm)
Dim i
i = 0
Do Until rs.EOF
Me.Extra.AddItem Item:=rs!Extra ', Index:=i
rs.MoveNext
i = i + 1
Loop
rs.Close
Set rs = Nothing
End Sub
จริงๆ แล้วผมมี combobox 2 ตัว เมื่อตัวที่ 1 ได้ว่าเป็นประเภทไหน จึงเอาประเภทของ combo ที่ 1 มาอ้างอิง ใน combo ที่ 2 ว่า ให้เลือกได้แค่นี้
แต่ใน combo ที่ 2 นี้ ให้สามารถ key เข้าเองโดยไม่เลือกจาก list ก็ได้
ดังนั้นใน แต่ละ Record จึงเป็นลักษณะที่ว่า combo 2 ถอดเข้า ถอดออก
คล้ายๆ การเลือก จังหวัด แล้วมาเลือก อำเภอ อะไรประมาณนั้นครับ
แต่ว่าการเลือกอำเภอนั้น ผู้ใช้ สามารถ key เองก็ได้
ตอนแรกที่ตัดสั้นๆ เพราะเกรงใจ กลัวบอร์ดจะเต็ม ต้องขออภัยด้วยครับ
Sub ExtraList() '¶Í´ list áÅÐ add list ã¹àÇÅÒà´ÕÂǡѹ
Dim k
For k = 100 To 0 Step -1
On Error Resume Next
Me.Extra.RemoveItem k
Next k
Dim IdFind As Integer 'ËÒ¤èÒµÑÇàÅ¢¡ÅØèÁËÅÑ¡
Dim Ro As DAO.Recordset
Set Ro = CurrentDb.OpenRecordset("RubType")
Do Until Ro.EOF
If Me.TypeRubJay = Ro!RubType Then
IdFind = Ro!ID
End If
Ro.MoveNext
Loop
Ro.Close
Set Ro = Nothing
Dim rs As DAO.Recordset
Dim Sqm As String
Sqm = " SELECT Extra FROM extra where Rubno = "
Sqm = Sqm & IdFind
Set rs = CurrentDb.OpenRecordset(Sqm)
Dim i
i = 0
Do Until rs.EOF
Me.Extra.AddItem Item:=rs!Extra ', Index:=i
rs.MoveNext
i = i + 1
Loop
rs.Close
Set rs = Nothing
End Sub
จริงๆ แล้วผมมี combobox 2 ตัว เมื่อตัวที่ 1 ได้ว่าเป็นประเภทไหน จึงเอาประเภทของ combo ที่ 1 มาอ้างอิง ใน combo ที่ 2 ว่า ให้เลือกได้แค่นี้
แต่ใน combo ที่ 2 นี้ ให้สามารถ key เข้าเองโดยไม่เลือกจาก list ก็ได้
ดังนั้นใน แต่ละ Record จึงเป็นลักษณะที่ว่า combo 2 ถอดเข้า ถอดออก
คล้ายๆ การเลือก จังหวัด แล้วมาเลือก อำเภอ อะไรประมาณนั้นครับ
แต่ว่าการเลือกอำเภอนั้น ผู้ใช้ สามารถ key เองก็ได้
ตอนแรกที่ตัดสั้นๆ เพราะเกรงใจ กลัวบอร์ดจะเต็ม ต้องขออภัยด้วยครับ
6 @R03837
ถ้าต้องการป้อนเองได้ด้วย ก็กำหนด Limit to list property ของ combobox ให้เป็น No ก็เท่านั้นเองครับ ผมก็ยังนึกไม่ออกว่าทำไมจะต้องเขียนโค้ดเพื่อจัดการน้ำเข้า/ลบข้อมูลจากใน combobox เองด้วย ทั้งช้าและยุ่งยากเป็นอย่างมาก
7 @R03840
Me.Extra.AddItem Item:= Chr(34) & rs(0) & Chr(34) & ";"
เผื่อช่วยได้ครับ ลองดูก่อน
เผื่อช่วยได้ครับ ลองดูก่อน
8 @R03850
Code ที่คุณ Yeadram ให้มาใช้การได้ดีครับ
แต่ งง สักหน่อย
ขอรบกวนเรื่องที่มาที่ไปได้ไหมครับ
เผื่อจะเก็บไปใช้ประโยชน์ในวันข้างหน้า
ขอบคุณครับ
แต่ งง สักหน่อย
ขอรบกวนเรื่องที่มาที่ไปได้ไหมครับ
เผื่อจะเก็บไปใช้ประโยชน์ในวันข้างหน้า
ขอบคุณครับ
9 @R03863
ก็เลียนแบบมันครับ
ถ้าเราใช้ วิซาร์ด สร้างคอมโบ แบบ value list
เมื่อสร้างเสร็จเราเข้าไปดูที่ dialog properties ของมัน ดูแหล่งข้อมูลของมัน
ก็จะเห็นว่า มันก็แค่เขียน
"สมาชิก";"สมาชิก";"สมาชิก";"สมาชิก";"สมาชิก";
คือ ปิดหัวท้ายของแต่ละสมาชิกด้วยเครื่องหมาย ฟันหนู แล้วตัวคั่นระหว่างสมาชิกก็ใช้เครื่องหมาย เซมิ-โคลอน
ผมก็เลยลองเขียนตามมันดูครับ ด้วยคิดว่าแม้จะมีเครื่องหมาย คอมม่าหรือเซมิฯ อยู่ในคำก็ตาม แต่อย่างน้อยเรามี ฟันหนูคร่อมมันไว้ มันน่าจะ "ไม่อ่านเครื่องหมายเหล่านั้น"
ถ้าเราใช้ วิซาร์ด สร้างคอมโบ แบบ value list
เมื่อสร้างเสร็จเราเข้าไปดูที่ dialog properties ของมัน ดูแหล่งข้อมูลของมัน
ก็จะเห็นว่า มันก็แค่เขียน
"สมาชิก";"สมาชิก";"สมาชิก";"สมาชิก";"สมาชิก";
คือ ปิดหัวท้ายของแต่ละสมาชิกด้วยเครื่องหมาย ฟันหนู แล้วตัวคั่นระหว่างสมาชิกก็ใช้เครื่องหมาย เซมิ-โคลอน
ผมก็เลยลองเขียนตามมันดูครับ ด้วยคิดว่าแม้จะมีเครื่องหมาย คอมม่าหรือเซมิฯ อยู่ในคำก็ตาม แต่อย่างน้อยเรามี ฟันหนูคร่อมมันไว้ มันน่าจะ "ไม่อ่านเครื่องหมายเหล่านั้น"
Time: 0.3423s
ในสายอักขระที่เป็นแหล่งข้อมูลของคอมโบบ็อกซ์ และลิสต์บ็อกซ์ เป็นเครื่องหมายสงวน เพราะมันมีไว้เพื่อแบ่งแยกจำนวนสมาชิก
ผมเคยติดปัญหานี้เช่นกัน ผมใช้วิธีเลี่ยงโดยการ ไม่ให้ข้อมูลมันมีเครื่องหมายพวกนี้ (พอดี ข้อมุลของผลจัดการง่ายครับ เลยผ่านไปได้ด้วยดี คือสามารถจำกัดได้ว่า ห้ามมีเครื่องหมาย พวกนี้)
ที่ตอบมาคืออยากเล่าให้ฟังถึงสาเหตุครับ แต่ทางแก้คงต้องรอ อาจารย์ท่านอื่นๆ ต่อครับ (ถ้ากรณีไม่สามารถกำจัดเครื่องหมายในข้อมูลได้ อย่างของผม)