สอบถามการใช้ Auto Number ครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

22 มิ.ย. 62 , 12:48:07
อ่าน 632 ครั้ง

Nick_1234

สอบถามการใช้ Auto Number ครับ
« เมื่อ: 22 มิ.ย. 62 , 12:48:07 »
ผมจะกำหนดค่า Auto Number เองครับแล้วให้มันเพิ่มค่าทีละ 1 โดยเมื่อถึงจนถึง ค่าที่ 25 แล้วให้ใส่ตัวเลขใหม่เพื่อให้นับต่อไปอีก 25 ค่าครับ ต้องมีการเขียนโค้ดหรือวิธีการอย่างไรบ้าง ช่วยบอกผมด้วยนะครับ



 

22 มิ.ย. 62 , 15:57:27
ตอบกลับ #1

OddyWriter

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #1 เมื่อ: 22 มิ.ย. 62 , 15:57:27 »
ความงงกับคำถามระดับ 5 ตามมาตราริกเตอร์
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

22 มิ.ย. 62 , 19:18:07
ตอบกลับ #2

Nick_1234

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #2 เมื่อ: 22 มิ.ย. 62 , 19:18:07 »
ความงงกับคำถามระดับ 5 ตามมาตราริกเตอร์
 

สมมุติผมใส่ตัวเลข 11156 มันก็จะเพิ่มขึ้นที่ละหนึ่งค่า 11157 11158 11159 ... 11181 ซึ่งจะสิ้นสุดที่ค่าที่ 25 แล้วหลังจากนั้น ก็จะใส่ตัวเลขใหม่คือ 22221 แล้วก็ให้มันเพิ่มที่ละ 1 ค่า จนสิ้นสุดค่า ที่ 25 ตามข้างต้นครับ แล้วก็ใส่ตัวเลขค่าใหม่ วนแบบนี้ซ้ำไปมาอะครับ  ขอโทษด้วยครับ ที่เขียนไม่รู้เรื่อง

 
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

23 มิ.ย. 62 , 19:40:41
ตอบกลับ #3

UnKnown

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #3 เมื่อ: 23 มิ.ย. 62 , 19:40:41 »
คือประมาณว่าท่านจะทำระบบกึ่งออโต้ลำดับที่ใช้ใหมครับ นั่นคือ
ลำดับที่อันแรกท่านจะใส่เอง สมมุติใส่ 11156 พอรายการต่อๆมาให้มัน +1 ออโต้ไปเรื่อยๆเลยจนครบ 25รายการโดยที่ท่านไม่ต้องมานั่งใส่เลขเองใช้หรือไม่ครับ :question:(25รายการถ้านับรวม 11156ด้วยจะจบที่ 11180นะ)
แล้วเมื่อมันครบ25แล้วล่ะ อยากให้มัน... :question:
แล้วแนวการใส่เลขคุณเป็นอย่างไร  :question:
คือประมาณว่า
ชุดที่1 เริ่ม 11156-11180
ชุดที่2 เริ่ม 22221-22245
ชุดที่3 เริ่ม 20001-20025 < ลำดับแทนที่ดันไปแทรกกลางชุด1-2 หรือไม่

 
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

24 มิ.ย. 62 , 00:36:09
ตอบกลับ #4

สันติสุข

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #4 เมื่อ: 24 มิ.ย. 62 , 00:36:09 »
ผมคิดออกแต่วิธีทื่อๆตรงๆนะครับ ไม่เทคนิคอะไร ผมคิดว่าต้องทำการป้อนผ่านฟอร์มเท่านั้นเพราะจะต้องเขียนโค้ดใน Form_BeforeUpdate event เพื่อควบคุมและค้นหาเลขตัวต่อไปของ Autonumber ซึ่event นี้จะเกิดก่อนที่จะบันทึกเรคอร์ด สิ่งที่ต้องทำก็คือ

1. เปลี่ยนประเภทข้อมูลของฟิลด์ Autonumber (สมมุติว่าชื่อฟิลด์คือ A แล้วกัน) ให้เป็น Long Integer เพื่อโปรแกรมจะได้ควบคุมค่านี้เอง เราจะไม่ปล่อยให้ Access หาค่ามาใส่ให้อย่างแต่ก่อนอีกแล้ว และต้องกำหนด A ให้คุณสมบัติ Unique Index เป็น True ด้วย ถ้า A เป็น PrimaryKey อยู่แล้ว ก็จะเป็น Unique Index โดยอัตโนมัติ

2. เพิ่มฟิลด์อีกฟิลด์เพื่อบอกให้เรารู้ว่า นี่เป็นเรคอร์ดของกลุ่มเดียวกันใน 26 เรคอร์ด เรียกชื่อว่าฟิลด์ DT สำหรับใส่ TimeStamp ก็แล้วกัน  DT มีประเภทข้อมูลเป็น Date/Time  โปรแกรมจะใส่วันเวลาปัจจุบันลงไปใน DT ให้เรคอร์ดแรกของกลุ่ม  (#2.1) ส่วนเรคอร์ดอื่นๆ โปรแกรมจะก็อปปี้ค่า DT จากเรคอร์ดชุดสุดท้ายมาใส่ให้แทน (#2.2)  หมายเหตุ : ฟิลด์ DT ไม่จำเป็นต้องใส่ในฟอร์ม

3. ในฟอร์ม ถ้ามันเป็นเรคอร์ดแรกในชุดของ 26 เรคอร์ดชุดใหม่ โปรแกรมจะใช้ค่าในฟิลด์ A ที่คุณต้องป้อนในฟอร์ม (#3.1) นำมาเป็นค่าเริ่มต้น แต่ถ้าไม่ใช่เรคอร์ดแรก โปรแกรมจะไม่สนใจค่าที่คุณป้อน แต่จะหาค่าล่าสุดของ A ในกลุ่ม 26 เรคอร์ดสุดท้าย บวกด้วย 1 แล้วเอามาใส่ที่ฟิลด์ A แทน (#3.2)

4. ถ้าเกิดกรณีที่ป้อนค่า A ซ้ำ โปรแกรมจะให้ป้อนใหม่  (#4.1) ถ้ากรณีบวก 1 แล้วเจอค่าซ้ำกับเรคอร์ดเก่า  โปรแกรมจะบวก 1 เพิ่มเติมต่อไปเรื่อยๆจนกว่าจะไม่ซ้ำ (#4.2)

ไปเปลี่ยนชื่อฟิลด์ของเทเบิลและบนฟอร์มให้ตรงกับที่คุณมีด้วยครับ
โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)

Const MaxRec = 26
Dim DB          As DAO.Database
Dim RS          As DAO.Recordset
Dim MaxDTStr    As String   ' วันเวลาล่าสุดของกลุ่มเรคอร์ด (แต่เป็น string เพื่อลดความยาวของโค้ด)
Dim MaxA        As Long     ' ค่าสูงสุดของ A ในกลุ่มเรคอร์ดล่าสุด
Dim NeedA       As Boolean  ' TRUE = ระบบต้องการค่า A บนฟอร์ม

    NeedA = False
   
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("select max(DT) as MaxDT from TB")
    If IsNull(RS!MaxDT) Then
        NeedA = True
    Else
        ' #2.2
        MaxDTStr = Format$(RS!MaxDT, "dd/mmm/yyyy hh:nn:ss")
        Set RS = DB.OpenRecordset("select count(*) as N from TB where DT = #" & MaxDTStr & "#")
        If RS!N = 0 Or RS!N >= MaxRec Then NeedA = True
    End If
   
    If NeedA Then
        ' #3.1
        If Nz(Me.A, 0) = 0 Then
            MsgBox "ป้อน A ด้วย"
            Me.A.SetFocus
            Cancel = True: Exit Sub
        End If
       
        If Not DB.OpenRecordset("select A from TB where A = " & CStr(Me.A)).EOF Then  ' #4.1
            MsgBox "A ซ้ำของเดิม"
            Me.A.SetFocus
            Cancel = True: Exit Sub
        End If
       
        Me.DT = Now()   ' #2.1
    Else
        ' #3.2
        Me.A = DB.OpenRecordset("select max(A) as MaxA from TB where DT = #" & MaxDTStr & "#")!MaxA
        Do
            Me.A = Me.A + 1
        Loop Until DB.OpenRecordset("select A from TB where A = " & CStr(Me.A)).EOF   ' #4.2
       
        Me.DT = CDate(MaxDTStr) ' #2.2
    End If
End Sub
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Nick_1234

25 มิ.ย. 62 , 09:34:06
ตอบกลับ #5

Nick_1234

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #5 เมื่อ: 25 มิ.ย. 62 , 09:34:06 »
คือประมาณว่าท่านจะทำระบบกึ่งออโต้ลำดับที่ใช้ใหมครับ นั่นคือ
ลำดับที่อันแรกท่านจะใส่เอง สมมุติใส่ 11156 พอรายการต่อๆมาให้มัน +1 ออโต้ไปเรื่อยๆเลยจนครบ 25รายการโดยที่ท่านไม่ต้องมานั่งใส่เลขเองใช้หรือไม่ครับ :question:(25รายการถ้านับรวม 11156ด้วยจะจบที่ 11180นะ)
แล้วเมื่อมันครบ25แล้วล่ะ อยากให้มัน... :question:
แล้วแนวการใส่เลขคุณเป็นอย่างไร  :question:
คือประมาณว่า
ชุดที่1 เริ่ม 11156-11180
ชุดที่2 เริ่ม 22221-22245
ชุดที่3 เริ่ม 20001-20025 < ลำดับแทนที่ดันไปแทรกกลางชุด1-2 หรือไม่


ไม่ต้องแทรกครับ ขึ้นเป็นลำดับใหม่ไปเลยครับ แล้วเมื่อครบ 25 แล้วอยยากให้มันขึ้นป้อนเลขใหม่เพื่อต่อจากเลขชุดที่แล้ว ครับ
« แก้ไขครั้งสุดท้าย: 25 มิ.ย. 62 , 09:55:55 โดย Nick_1234 »

 

25 มิ.ย. 62 , 14:59:51
ตอบกลับ #6

OddyWriter

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #6 เมื่อ: 25 มิ.ย. 62 , 14:59:51 »
จนถึงตอนนี้ ผมก็ยังคงงงอยู่

สรุปแล้วคือคุณต้องการอย่างไรแน่ครับ

แบบนี้หรือเปล่า

1,2,3,...,24,25,1,2,3,...,24,25...

หรือ

0001,0002,0003,...,0024,0025,1001,1002,1003,...,1024,1025,...

ขอชัดๆ หน่อยครับ

งงระดับ 10 แล้ว
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un, ปิ่นณรงค์

25 มิ.ย. 62 , 16:56:32
ตอบกลับ #7

UnKnown

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #7 เมื่อ: 25 มิ.ย. 62 , 16:56:32 »
ไม่ต้องแทรกครับ ขึ้นเป็นลำดับใหม่ไปเลยครับ แล้วเมื่อครบ 25 แล้วอยยากให้มันขึ้นป้อนเลขใหม่เพื่อต่อจากเลขชุดที่แล้ว ครับ

กล่าวคือแนวคิดนั้นจะทำเป็นระบบกึ่งออโต้ทั้งหมดโดยที่ สามตัวหน้าเป็นเลขชุด+สองตัวหลัง 01-25 เช่น
ท่านใส่         00101   = 00101-25 จนครบ25
ออโต้รันต่อที่   00201   = 00201-25 จนครบ25
ออโต้รันต่อที่   00301   = 00301-...
ท่านเปลี่ยนมา         10101   = 10101-25 จนครบ25
ออโต้รันต่อที่   10201   = 10201-...
ใช้แนวคิดแบบนี้ใหมครับนี่ :question:

 
โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์

26 มิ.ย. 62 , 10:12:48
ตอบกลับ #8

Nick_1234

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #8 เมื่อ: 26 มิ.ย. 62 , 10:12:48 »
ไม่ต้องแทรกครับ ขึ้นเป็นลำดับใหม่ไปเลยครับ แล้วเมื่อครบ 25 แล้วอยยากให้มันขึ้นป้อนเลขใหม่เพื่อต่อจากเลขชุดที่แล้ว ครับ

กล่าวคือแนวคิดนั้นจะทำเป็นระบบกึ่งออโต้ทั้งหมดโดยที่ สามตัวหน้าเป็นเลขชุด+สองตัวหลัง 01-25 เช่น
ท่านใส่         00101   = 00101-25 จนครบ25
ออโต้รันต่อที่   00201   = 00201-25 จนครบ25
ออโต้รันต่อที่   00301   = 00301-...
ท่านเปลี่ยนมา         10101   = 10101-25 จนครบ25
ออโต้รันต่อที่   10201   = 10201-...
ใช้แนวคิดแบบนี้ใหมครับนี่ :question:


ครับแบบนี้เลยครับ

 

26 มิ.ย. 62 , 10:13:18
ตอบกลับ #9

Nick_1234

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #9 เมื่อ: 26 มิ.ย. 62 , 10:13:18 »
จนถึงตอนนี้ ผมก็ยังคงงงอยู่

สรุปแล้วคือคุณต้องการอย่างไรแน่ครับ

แบบนี้หรือเปล่า

1,2,3,...,24,25,1,2,3,...,24,25...

หรือ

0001,0002,0003,...,0024,0025,1001,1002,1003,...,1024,1025,...

ขอชัดๆ หน่อยครับ

งงระดับ 10 แล้ว

แบบ 2 ครับ

 

26 มิ.ย. 62 , 13:15:39
ตอบกลับ #10

UnKnown

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #10 เมื่อ: 26 มิ.ย. 62 , 13:15:39 »
เป็นอันจบการตีโจทย์ รออาจารย์มาตอบวิธีทำกันอีกทีเน้อ

 

27 มิ.ย. 62 , 12:39:20
ตอบกลับ #11

OddyWriter

: สอบถามการใช้ Auto Number ครับ
« ตอบกลับ #11 เมื่อ: 27 มิ.ย. 62 , 12:39:20 »
โค้ดแบบสั้นๆ ง่ายๆ ตามไฟล์แนบครับ
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: Nick_1234


บอร์ดเรียนรู้ Access สำหรับคนไทย