Generate Auto Number แบบ Fixed Format



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

25 พ.ค. 61 , 10:57:20
อ่าน 768 ครั้ง

udomchok

  • สมาชิกไท.Access
  • กระทู้: 3

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

Generate Auto Number แบบ Fixed Format
« เมื่อ: 25 พ.ค. 61 , 10:57:20 »
ขอความช่วยเหลือด้วยค่ะ ไม่ทราบว่า ผิดตรงไหน ทำให้ขึ้นหน้าต่าง error ตามไฟล์แนบ
Private Sub Text352_Click()
Dim rs As Recordset
Dim Q As String
Set rs = CurrentDb.OpenRecordset("SELECT JobDetail.Team1, Max(Val([DptRef])) AS Ref, Left([JobRunning],2) AS [year] FROM JobDetail GROUP BY JobDetail.Team1, Left([JobRunning],2) HAVING JobDetail.Team1=[Forms]![CaseTrack-AdminTab]![Team1] AND Left([JobRunning],2)=61")
Q = Val(rs.Fields(1)) + 1
Me.DptRef = Format(Q, "0000")
End Sub
« แก้ไขครั้งสุดท้าย: 25 พ.ค. 61 , 12:13:01 โดย udomchok »

 

25 พ.ค. 61 , 11:22:39
ตอบกลับ #1

ปิ่นณรงค์

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #1 เมื่อ: 25 พ.ค. 61 , 11:22:39 »
Generate Auto Number แบบ Fixed Format
อยากได้ผผลลัพท์ออกมา แบบไหนครับลองอธิบายเพิ่มอีกนิดนะครับ
อาจจะมีวิธีอื่นๆ
« แก้ไขครั้งสุดท้าย: 25 พ.ค. 61 , 11:28:49 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: udomchok

25 พ.ค. 61 , 12:07:49
ตอบกลับ #2

udomchok

  • สมาชิกไท.Access
  • กระทู้: 3

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #2 เมื่อ: 25 พ.ค. 61 , 12:07:49 »
หนูสร้างฟอร์มแล้วมีการ Generate Auto Number ซึ่ง่ไม่ได้ใช้ Dmax เพราะทำให้โปรแกรมช้าค่ะ แค่ต้องการแค่ Run เลข 4 หลักแบบ "0000" โดยมีเงื่อนไขเพิ่มคือ อิงรหัสหน่วยงาน เพราะแต่ละหน่วยงานมีเลขรัน ไม่เท่ากันค่ะ สิ่งที่หนูทำคือ
สร้าง query หาค่า max ของรหัส ของแต่ละหน่วยงานก่อน และ copy sql ไปใส่ที่คำสั่ง recordset ค่ะ
เวลาบันทึกข้อมูล พอเรา เลือกหน่วยงาน พอคลิกที่ฟิลด์รหัสงาน มันก็จะนำค่า Max มาบวกเพิ่มอีก 1 ใส่ลงในฟิลด์ที่เราคลิกค่ะ
ตามไฟล์แนบ inputscreen ค่ะ
« แก้ไขครั้งสุดท้าย: 25 พ.ค. 61 , 12:13:43 โดย udomchok »

 

25 พ.ค. 61 , 12:56:02
ตอบกลับ #3

ปิ่นณรงค์

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #3 เมื่อ: 25 พ.ค. 61 , 12:56:02 »
ถ้าใช้ Dlast ละผมว่าไม่น่าจะทำให้ช้านะเดี่ยวลองทำให้ดูคับ
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: udomchok

25 พ.ค. 61 , 13:57:23
ตอบกลับ #4

ปิ่นณรงค์

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #4 เมื่อ: 25 พ.ค. 61 , 13:57:23 »
ตัวอย่างนี้เพื่อให้เห็นภาพว่า มันสามารถกำหนดค่าให้โดยแยกหมวดหมู่ของ หน่วยงานนะครับ โดยหาค่า Dlast ของแต่ละหน่วยงาน

บน Module
โค๊ด: [Select]
Function getDigits(s As String) As String
    Dim retval As String
    Dim i As Integer
    retval = ""
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next
    getDigits = retval
End Function


ที่ TextBox ใน Event Click ชื่อ Serial ใส่คำสั่งดังนี้

Private Sub Serial_Click()
If Me.NewRecord = True Then
    Dim strOldID As String
    Dim lngCurrentNumber As Long
    Dim lngNextNumber As Long
    Dim strNextNumber As String
    Dim strNewID As String
       
    If IsNull(DLast("[JobDetail]", "Query1")) Then
    Me.JobDetail = "0000"
        Else
            strOldID = DLast("[JobDetail]", "Query1")
    Debug.Print strOldID   
    lngCurrentNumber = getDigits(strOldID)
    Debug.Print lngCurrentNumber   
    lngNextNumber = lngCurrentNumber + 1
    Debug.Print lngNextNumber   
    strNextNumber = String(4 - Len(CStr(lngNextNumber)), "0") & CStr(lngNextNumber)
    Debug.Print strNextNumber   
    strNewID = strNextNumber
    Debug.Print strNewID
   
    Me.JobDetail = strNewID
   
End If
      End If
     
End Sub

หมายเหตุ
Me.JobDetail คือ ชื่อ textbox ที่เราจะเพิ่มค่า +1 /ส่วนที่ไม่ที Me.นำหน้าคือชื่อ Field นะครับ พอดีผมตั้งชื่อเหมือนกัน
Query1 คือคิวรี่ที่เราจะหาค่า ของ JobDetail
เลข 4 คือจำนวนค่าที่จะแสดงจำนวน 0 ที่จะแสดง

ตัวอย่างด้านล่าง
« แก้ไขครั้งสุดท้าย: 25 พ.ค. 61 , 18:11:55 โดย ปิ่นณรงค์ »
:love: :grin:
 

25 พ.ค. 61 , 14:18:31
ตอบกลับ #5

udomchok

  • สมาชิกไท.Access
  • กระทู้: 3

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #5 เมื่อ: 25 พ.ค. 61 , 14:18:31 »
ขอบคุณค่ะ คุณปิ่นณรงค์ เดี๋ยวจะลองใช้ดู แล้วจะรายงานผลค่ะ

 

25 พ.ค. 61 , 14:32:55
ตอบกลับ #6

ปิ่นณรงค์

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #6 เมื่อ: 25 พ.ค. 61 , 14:32:55 »
ขอบคุณค่ะ คุณปิ่นณรงค์ เดี๋ยวจะลองใช้ดู แล้วจะรายงานผลค่ะ
ไม่จำเป็นต้อง Bound Control นะครับ Unbound ก็สามารถแสดงผลได้เช่นเดียวกัน
:love: :grin:
 

25 พ.ค. 61 , 20:59:05
ตอบกลับ #7

pizza_p

: Generate Auto Number แบบ Fixed Format
« ตอบกลับ #7 เมื่อ: 25 พ.ค. 61 , 20:59:05 »
ทุกครั้งที่ใช้ RecordSet ให้เช็คผลลัพธ์ก่อนครับว่ามี record มาหรือไม่ ไม่งั้นมันจะ Null หมดนะครับ

Set rs = CurrentDb.OpenRecordset("SELECT JobDetail.Team1, Max(Val([DptRef])) AS Ref, Left([JobRunning],2) AS [year] FROM JobDetail GROUP BY JobDetail.Team1, Left([JobRunning],2) HAVING JobDetail.Team1=[Forms]![CaseTrack-AdminTab]![Team1] AND Left([JobRunning],2)=61")

If rs.RecordCount > 0 then
  Q = Val(rs.Fields(1)) + 1
  Me.DptRef = Format(Q, "0000")
End if
rs.Close

ลองดูครับว่าได้หรือไม่

 


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