กระทู้เก่าบอร์ด อ.Yeadram
1,257 4
URL.หัวข้อ /
URL
รบกวนอาจารย์หน่อยค่ะไม่เข้าใจโค๊ดค่ะ
ก่อนอื่นต้องขออภัยอาจารย์ทุกๆท่านด้วยนะคะที่ทำให้ต้องเสียเวลา หนูเป็นมือใหม่น่ะค่ะ มีปัญหาเกี่ยวกับการทำ Auto Number ใน Form ค่ะ ก็ไปเจอกระทู้เก่าอยู่อันนึงค่ะ
คำตอบของคุณ krathok-man (R00057)
คือหนูไม่เข้าใจค่ะว่าตรงไหนแทนอะไร,ในฟอร์ม,ในQueryหรือในตาราง งงมากค่ะคิดว่าจะเอามาปรับใช้แต่ไม่สำเร็จสักที ไม่ทราบว่าต้องสร้าง ตารางใหม่หรือQueryใหม่ด้วยหรือเปล่าคะ กราบขอบพระคุณอาจารย์ทุกๆท่านที่สละเวลานะคะ
**คุณ krathok-man ได้ให้คำตอบถามว่า**
เขียนแบบ งูๆ ปลาๆ ถามอาจารย์สันติบ้าง หาจากWeb บ้าง แต่รับรองว่าใช้ได้ครับ
เพราะใช้มานาน การใช้ คือเอา primary key มาอ้างครับ
เช่น มี ID อยู่ก็ใช้
=rec1([id]) ครับ
แต่ผมใช้ บน FORM ถ้าใช้ ใน QUERY น่าจะคล้ายกันลองปรับเอานะครับ
Public Function Rec1(a As Variant) As Variant
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
If rst.RecordCount > 0 Then
rst.MoveLast
rst.MoveFirst
Else: Exit Function
End If
Do Until rst.EOF
If rst!ID = a Then
Rec1 = rst.AbsolutePosition + 1
Exit Function
End If
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
If Me.NewRecord Then GoTo Rec1_Exit
Rec1_Exit:
On Error Resume Next
rst.Close: Set rst = Nothing
Exit Function
End Function
คำตอบของคุณ krathok-man (R00057)
คือหนูไม่เข้าใจค่ะว่าตรงไหนแทนอะไร,ในฟอร์ม,ในQueryหรือในตาราง งงมากค่ะคิดว่าจะเอามาปรับใช้แต่ไม่สำเร็จสักที ไม่ทราบว่าต้องสร้าง ตารางใหม่หรือQueryใหม่ด้วยหรือเปล่าคะ กราบขอบพระคุณอาจารย์ทุกๆท่านที่สละเวลานะคะ
**คุณ krathok-man ได้ให้คำตอบถามว่า**
เขียนแบบ งูๆ ปลาๆ ถามอาจารย์สันติบ้าง หาจากWeb บ้าง แต่รับรองว่าใช้ได้ครับ
เพราะใช้มานาน การใช้ คือเอา primary key มาอ้างครับ
เช่น มี ID อยู่ก็ใช้
=rec1([id]) ครับ
แต่ผมใช้ บน FORM ถ้าใช้ ใน QUERY น่าจะคล้ายกันลองปรับเอานะครับ
Public Function Rec1(a As Variant) As Variant
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
If rst.RecordCount > 0 Then
rst.MoveLast
rst.MoveFirst
Else: Exit Function
End If
Do Until rst.EOF
If rst!ID = a Then
Rec1 = rst.AbsolutePosition + 1
Exit Function
End If
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
If Me.NewRecord Then GoTo Rec1_Exit
Rec1_Exit:
On Error Resume Next
rst.Close: Set rst = Nothing
Exit Function
End Function
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R17908
คุณหมายถึงการทำ running number บนฟอร์มหรือเปล่าครับ ถ้าใช่ลองค้นหาคำว่า running number ดูครับ
3 @R17913
กราบขอบพระคุณอาจารย์ PichaiTC และอาจารย์TTT มากนะคะ
ทีนี้หนูมีอีกคำถามค่ะ คือถ้าหนูต้องการให้ตัวเลขมันวนและซํ้ากันได้ล่ะคะ
เช่น
ฟิลด์1= Machine_ID | ฟิลด์2=Count
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 1 จะได้ M1 | 1
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 2 จะได้ M1 | 2
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 3 จะได้ M1 | 3
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 1 จะได้ M2 | 1
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 2 จะได้ M2 | 2
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 3 จะได้ M2 | 3
ความต้องการของหนูคือ ฟิลด์2=Count เป็นตัวเลขเดี่ยวๆ ไม่นำเอา Machine_ID มาผูกด้วย
Machine_ID เป็นเพียงตัวอ้างอิงค่ะ
ทีนี้หนูมีอีกคำถามค่ะ คือถ้าหนูต้องการให้ตัวเลขมันวนและซํ้ากันได้ล่ะคะ
เช่น
ฟิลด์1= Machine_ID | ฟิลด์2=Count
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 1 จะได้ M1 | 1
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 2 จะได้ M1 | 2
สั่งงานเครื่องจักรตัวที่ 1 ครั้งที่ 3 จะได้ M1 | 3
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 1 จะได้ M2 | 1
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 2 จะได้ M2 | 2
สั่งงานเครื่องจักรตัวที่ 2 ครั้งที่ 3 จะได้ M2 | 3
ความต้องการของหนูคือ ฟิลด์2=Count เป็นตัวเลขเดี่ยวๆ ไม่นำเอา Machine_ID มาผูกด้วย
Machine_ID เป็นเพียงตัวอ้างอิงค่ะ
4 @R17918
อื่ม ถ้าคุณต้องการทำ Running Number ยังไงก็ต้องมีฟิลด์เก็บค่าลักษณะเหมือน ID สำหรับไว้สำหรับเวลาเปรียบเทียบอะไรก่อนหลังครับ
ไม่รู้จะตรงตามความต้องการหรือเปล่านะครับผมยกตัวอย่างให้ดูแล้วกัน
ตัวอย่าง สมมุติผมมีตารางเก็บข้อมูลชื่อ Table1 ดังนี้:
NO Machine_ID
1 สั่งงานเครื่องจักรตัวที่ 1
2 สั่งงานเครื่องจักรตัวที่ 1
3 สั่งงานเครื่องจักรตัวที่ 1
4 สั่งงานเครื่องจักรตัวที่ 2
5 สั่งงานเครื่องจักรตัวที่ 2
6 สั่งงานเครื่องจักรตัวที่ 2
- ผมต้องการทำฟิลด์ Running Number ให้รันตัวเลขเรียงลำดับ 1...2...3 โดยแบ่งกลุ่มนับ เครื่องจักรตัวที่ 1 ก็นับแยกจากเครื่องจักรตัวที่ 2 ดังนี้:
NO Machine_ID Count
1 สั่งงานเครื่องจักรตัวที่ 1 1
2 สั่งงานเครื่องจักรตัวที่ 1 2
3 สั่งงานเครื่องจักรตัวที่ 1 3
4 สั่งงานเครื่องจักรตัวที่ 2 1
5 สั่งงานเครื่องจักรตัวที่ 2 2
6 สั่งงานเครื่องจักรตัวที่ 2 3
ผมจะเขียน SQL ในคิวรี่ประมาณนี้
SELECT T1.[NO], T1.Machine_ID, (SELECT Count(*) FROM Table1 AS T2 WHERE (T2.Machine_ID = T1.Machine_ID) AND (T2.NO <= T1.NO)) AS [Count]
FROM Table1 AS T1
ORDER BY T1.[NO], T1.Machine_ID;
ปรับใช้ดูครับ
ไม่รู้จะตรงตามความต้องการหรือเปล่านะครับผมยกตัวอย่างให้ดูแล้วกัน
ตัวอย่าง สมมุติผมมีตารางเก็บข้อมูลชื่อ Table1 ดังนี้:
NO Machine_ID
1 สั่งงานเครื่องจักรตัวที่ 1
2 สั่งงานเครื่องจักรตัวที่ 1
3 สั่งงานเครื่องจักรตัวที่ 1
4 สั่งงานเครื่องจักรตัวที่ 2
5 สั่งงานเครื่องจักรตัวที่ 2
6 สั่งงานเครื่องจักรตัวที่ 2
- ผมต้องการทำฟิลด์ Running Number ให้รันตัวเลขเรียงลำดับ 1...2...3 โดยแบ่งกลุ่มนับ เครื่องจักรตัวที่ 1 ก็นับแยกจากเครื่องจักรตัวที่ 2 ดังนี้:
NO Machine_ID Count
1 สั่งงานเครื่องจักรตัวที่ 1 1
2 สั่งงานเครื่องจักรตัวที่ 1 2
3 สั่งงานเครื่องจักรตัวที่ 1 3
4 สั่งงานเครื่องจักรตัวที่ 2 1
5 สั่งงานเครื่องจักรตัวที่ 2 2
6 สั่งงานเครื่องจักรตัวที่ 2 3
ผมจะเขียน SQL ในคิวรี่ประมาณนี้
SELECT T1.[NO], T1.Machine_ID, (SELECT Count(*) FROM Table1 AS T2 WHERE (T2.Machine_ID = T1.Machine_ID) AND (T2.NO <= T1.NO)) AS [Count]
FROM Table1 AS T1
ORDER BY T1.[NO], T1.Machine_ID;
ปรับใช้ดูครับ
Time: 0.3471s
http://www.thai-access.com/yeadram_view.php?topic_id=3098&page=1
จะเห็นว่ามีหลายวิธี
เช่น กำหนดให้ field เป็นแบบ AutoNumber, กำหนด ที่ default ของ control ด้วย function DMax(...) + 1, หรือเขียน code เอง
ลองดูว่าแบบไหนที่เข้าใจที่สุด ก็ใช้ไปก่อน