Autonumber รูปแบบ "ปี" ตัวเลข เช่น 540001
กระทู้เก่าบอร์ด อ.Yeadram

 6,023   15
URL.หัวข้อ / URL
Autonumber รูปแบบ "ปี" ตัวเลข เช่น 540001

ผมอยากตั้งรหัสลูกค้าให้เป็นแบบ Auto Number โดยที่ 2 หลักแรกอยากให้มันรันตามปีเดียวกับคอมพิวเตอร์ ส่วนใน 4 หลักสุดท้ายให้รันเป็น AutoNumber เช่น 540001, 540002 ,550001 เป็นตั้น

อย่างนี้ทำได้มั้ยครับ

15 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R11230
ถ้าเป็น Case ปกติ ไม่น่าจะ ทำได้

แต่มี วิธี ที่ ใส่Manual เอง

โดย ADD RECORD สุดท้่าย ให้ เป็น เลข 540000

พอเป็น ปี 55 ก็เขียนโปรแกรม Add new record เป็น 550000
ให้เขียนโปรแกรม Addnew record ทุึกปี ครับ
2 @R11233
แล้วโปรแกรม Add new record ทำยังไงครับ ผมมือใหม่ต้องจอโทษด้วยนะครับ
3 @R11235
ทำไมต้องตั้งรหัสเป็นแบบนี้ครับ?
ทำเพื่อตอบสนองใคร?
มีเหตุผลหนักแน่นพอหรือไม่?
4 @R11239
ขอบคุณ คุณPichaiTC สำหรีบคำถามมากเลยนะครับ พอได้ตอบคำถามแล้วก็คิดได้
เหตุผลแรกที่ตั้งรหัสแบบนี้ เพราะอาจจะรู้ว่าลูกค้ามาใช้บริการของเราเมื่อปีไหน มีลูกค้าเก่า ใหม่มีอัตราส่วนมากต่อกันแค่ไหน เพื่อแค่อยากรู้เฉยๆครับ ผมคิดว่าถ้ามันทำได้ไม่ยากก็จะทำ แต่ถ้ามันยากไปก็ไม่จำเป็นขนาดนั้นหรอกครับ
5 @R11241
กรณีนี้ให้ รหัสลุกค้า เป็น autonumber ธรรมดา
แต่เพิ่มเก็บวันที่บันทึกครั้งแรก หรือวันที่ติดต่อลูกค้าครั้งแรก หรือจะเก็บแค่ปีก็ได้
เวลาอยากรู้ก็ sum ตามปีเอา
6 @R11244
ใช่ ครับ วิธี ของ คุณ PichaiTC ง่ายกว่า วิธี ของผมเยอะ ครับ
7 @R11245
ขอบคุณมากครับบ คิดไม่ถึง
8 @R11250
ผมใช้แบบนี้ ครับ

Private Sub Form_Open(Cancel As Integer)
    'ตรวจสอบหมายเลย Lab Request สุดท้ายของเดือน
    If DCount("LabNo", "T_TPT_LabNo", "Year(Date)=" & Year(Now()) & " And Month(Date)=" & Month(Now()) & "") > 0 Then
        tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(Date)=" & Year(Now()) & " And Month(Date)=" & Month(Now()) & "") + 1
            'เริ่มนับหนึ่ง เมื่อเริ่มเดือนใหม่
            Else
               tLabNo = 1
    End If
    
    'ตรวจสอบหมายเลย HN สุดท้ายของเดือน
    If DCount("HN", "T_TPT_HN", "Year(Date)=" & Year(Now()) & " And Month(Date)=" & Month(Now()) & "") > 0 Then
        tHN = DMax("HN", "T_TPT_HN", "Year(Date)=" & Year(Now()) & " And Month(Date)=" & Month(Now()) & "") + 1
            Else
               'ตรวจสอบหมายเลข HN สุดท้ายของปี เมื่อเริ่ม พ.ศ. ใหม่ + 1
               If Left(DMax("HN", "T_TPT_HN"), 2) = Right(Year(Now) + 543, 2) Then
                    tHN = DMax("HN", "T_TPT_HN") + 1
                        Else
                            tHN = (Right(Year(Now) + 543, 2)) * 1000000 + 1
               End If
        End If
End sub
9 @R11251
เมื่อจะ save เขียนเพิ่มนิดหน่อย
Private Sub CMD_SaveRecord_Click()
   คำสั่งที่คุณเขียน save
    ตามด้วย2บรรทัดข้างล่าง เพื่อให้หมายยเลข autorun
    tLabNo = DMax("LabNo", "T_TPT_LabNo") + 1
    tHN = DMax("HN", "T_TPT_HN") + 1
End sub

หรือไม่ก็ใช้ Update Query เพื่อเก็บหมายเลขแค่หมายเลขปัจจุบัน
10 @R11258
ขอแสดงความคิด ความเห็น ความรู้สึก ความน่าจะเป็น ด้วยคนนะครับ ...

วิธีของคุณ Rexxy เกือบจะดีแล้วครับ แต่ถ้าปรับอีกนิดจะเ้พิ่มประสิทธิภาพได้มากขึ้นอีก ดังนี้

     - เมื่อ โหลด/เปิด ฟอร์ม ก็ให้อ่านค่าปีปัจจุบัน เช่น 54-xxxxx มาเก็บไว้ในตัวแปร
     - แล้วนับค่าจำนวนเรคคอร์ดที่มีอยู่ทั้งหมด ด้วยวิธีที่ถนัด มาเก็บไว้ในตัวแปร เช่น
               (1) rst.MoveLast
                     myVar1 = rst.RecordCount              หรือ
       
               (2) rst.moveLast
                      myVar2 =rst.AbsolutePosition + 1
ทั้ง (1) และ (2) จะได้ค่าจำนวนของเรคคอร์ด   ทั้งนี้ผมหลีกเลี่ยงการใช้ฟังก์ชั่น D...., D...., D...., ทั้งหลาย เนื่องจากฟังก์ชันเหล่านี้ทำงานช้า

เมื่อจะบันทึกข้อมูล ก็ใช้วิธีคล้าย ๆ กับคุณ Rexxy
แต่เราจะไม่ใช้ ฟังก์ชัน D...., D.... ทำงานอีก เพราะจะยิ่งช้าเป็น n เท่า (เพราะเรียกใช้เป็นครั้งที่ n)
เราจะใช้การเก็บค่้าไว้ในตัวแปรแบบ global ในคลาสแทน จากนั้นค่อยอัพเดทค่าตัวแปรเหล่านี้ เช่น

private tLabNo as Integer
private tHN as Integer

private sub cmdSave _Click()
   ...
   ...
   tLabNo = tLabNo + 1
   tHN = tHN + 1
end sub
11 @R11263
ผมอาจไม่ลึกซึ้งนัก เพราะเพิ่งหัดเหมือนกัน
เรียนถามคุณ U&ME กรณี insert into หาก statement มันยาวมากเราตัด statement เพื่อเริ่มบรรทัดใหม่ต้องเชื่อมแบบไหนครับ ผมติดตรงนี้นานมาก

เช่น "INSERT INTO T_Amphoe (1,2,3,4,5,.......,10)" & _
" values ('" & Forms!F_A.t1 & "',...,'" & Forms!F_A.t1 & "')"

โดยที่ ครง value statement มันยาวครับ
12 @R11264
ตัวอย่าง
13 @R11265
ตัวอย่าง
Set qdfEmployees = dbsNorthwind.CreateQueryDef( _       
      "NewQueryDef", "SELECT FirstName, LastName, " & _
      "BirthDate FROM Employees")

ลองเปรียบเทียบชุดคำสั่งเดิม โดยไม่มีการตัดขึ้นบรรทัดใหม่
(ดูที่เครื่องหมาย _ )
หากเราลบเครื่องหมาย _ ออกไป ก็เท่ากับว่าเราทำการเชื่อม String ธรรมดานั่นเอง(โดยการใช้ "...." & "....")

Set qdfEmployees = dbsNorthwind.CreateQueryDef( "NewQueryDef", "SELECT FirstName, LastName, " & "BirthDate FROM Employees")

เพราะฉะนั้นเราจึงใช้ & _       เพื่อเชื่อมสตริงในบรรทัดปัจจุบันกับบรรทัดใหม่
และใช้ _                             เพื่อเชื่อมโค้ดคำสั่งทั่วไป
14 @R11266
นอกเรื่องนิดหน่อย.



ผมพึ่งสังเกตว่าถ้าข้อความที่ผมตอบกระทู้มีเครื่องหมายอย่างในรูป จะไม่สามารถตอบกระทู้ได้ ไม่ทราบว่าท่านอื่นเป็นด้วยหรือไม่ (ทดสอบดูนะครับ)
15 @R11275
ครับ ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3429s