สอบถามหาค่ากลาง Run ต่อเนื่องค่า
กระทู้เก่าบอร์ด อ.Yeadram

 2,400   12
URL.หัวข้อ / URL
สอบถามหาค่ากลาง Run ต่อเนื่องค่า

พอดีหนูเขียน Code Runing Number ตามนี้ค่ะ
ผลลัพย์นะคะ IPP0001/06/56
ซึ่ง IPP ค่าคงที่, 0001 =รันนัมเบอร์ค่ะ , / คั่นหน้าวันที่ค่ะ ,09/56 คือ เดือนปี
หนูเขียนได้คือ

Private Sub B_NoIPI_Click()
     Dim intMax As Integer
     Dim strPrefix As String
     Dim strPrefix1 As String
     Dim istrPrefix2 As String
     Dim AA As String
     Dim BB As String
      strPrefix1 = Format(Date, "mm/yy")
      strPrefix2 = DLast("B_NoIPI", "Qr_TwoPD2Last")

      AA = "IPI"
      BB = "/"
      If Me.B_NoIPI = "" Or IsNull(Me.B_NoIPI) Then
        Me.B_NoIPI = "IPI" & "0001" & "/" & strPrefix1
    Else

     intMax = DMax("Val(Mid(B_NoIPI,4,7))", "Qr_TwoPD2Last")
    Me.B_NoIPI = AA & Format(intMax + 1) & BB & strPrefix1
      End If
     
End Sub

หนูติดตรง

              intMax = DMax("Val(Mid(B_NoIPI,4,7))", "Qr_TwoPD2Last")
              Me.B_NoIPI = AA & Format(intMax + 1) & BB & strPrefix1

มันไม่ยอม Run ค่ะ พี่ๆ อาจารช่วยดูและชี้แนะด้วยค่ะ
ขอบคุณค่ะ


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

1 @R16256
IPP0001/06/56
IPP0002/06/56
IPP0003/06/56

ประมาณนีค่ะ
2 @R16257
น่าจะ Mid(B_NoIPI,4,4) ไม่ใช่หรือ
3 @R16258
เรียนท่านอาจารย์ สันติสุข ค่ะ

จากที่เปลี่ยนตามอาจารแล้วมันขึ้น

Run-Time Error '3464' Data Type Mismatch In Criteria Expression

ซึ่งตัวเลขอันแรกได้ค่ะ   
IPP0001/06/56

แต่แถวที่ 2 มันก็ขึ้นตัวเดิมค่ะ
มันไม่บวก1 ค่ะ และมันก็เกิน   Error ค่ะขออาจารย์ช่วยชี้แนะค่ะ

ขอบคุณค่ะ
4 @R16259
เรียนอาจารค่ะหนูแก้ไขในส่วนท้าย

intMax = DMax("Val(Mid(B_NoIPI,4,7))", "B_NoIPI")


ตอนนี้ คลิกที่Text 2ครั้งถึงจะเป็น   IPI2/06/56

โดยคลิกครั้งแรกเป็นค่า IPI0001/06/56 ตัวเดิม
คลิกครั้งที่2เป็นค่า IPI2/06/56
แล้วพอแถวใหม่
คลิกครั้ง1เป็นค่า IPI0001/06/56
คลิกครั้งที่2เป็นค่า IPI3/06/56        เป็นแบบนี้ไปเรื่อยๆค่ะ


อยากถามอาจารว่า ทำไมต้องมันไม่คลิกครั้งเดียวแล้วเปลี่ยนค่า+1เลยค่ะ
และ ทำไมมันไม่เป็น IPI0002/06/56   ค่ะ คือ 000 มันหายไปค่ะ

ขอบคุณค่ะ

5 @R16260
1. ผมยังเชื่อว่าควรจะเป็น Mid(B_NoIPI,4,4) แม้ว่า Mid(B_NoIPI,4,7) จะให้ผลลัพธ์ออกมาได้เช่นกัน แต่ยังไม่เข้าใจว่าทำไมถึงเกิด error นั้นได้

2. คุณต้อง debug โปรแกรมเป็น ถึงจะเช็คได้ว่ามันเกิดจากปัญหาอะไรกันแน่

3. จะให้มี 0 นำหน้าตัวเลข ต้องใช้ Format(intMax + 1, "0000")

4. จริงๆวิธีเก็บข้อมูลค่อนข้างจะไม่เหมาะสมนะ คุณควรแยกฟิลด์ คือ
    - เก็บคำว่า "IPI" แต่ถ้าคิดว่าในอนาคตก็จะไม่มีคำอื่นนอกจาก "IPI" แล้ว จะไม่เก็บเลยก็ได้
    - เก็บค่า running number เอาไว้เป็นอีกฟิลด์ แล้วกำหนดอินเด็กซ์ที่ฟิลด์นี้
    - เก็บเดือนและปี เป็นอีกฟิลด์ หรือจะเก็บแยกเดือนกับปีเป็นคนละฟิลด์เลยก็ได้
    - สร้างอินเด็กซ์ให้เหมาะสม
   ด้วยวิธีนี้ แม้มีข้อมูลเยอะเป็นล้านเรคอร์ด ความเร็วในการหาเลขสุดท้ายก็แทบจะไม่แตกต่าง ตอนจะแสดงก็ค่อยเอามาต่อเชื่อมกันครับ
6 @R16262
ได้แล้วค่ะขอบคุณมากค่ะ
หนูแก้ไขตามนี้ค่ะ

     If Me.B_NoIPI <> "" Or IsNull(Me.B_NoIPI) Then
      intMax = DMax("Val(Mid(B_NoIPI,4,4))", "Qr_TwoPD2Last", "B_NoIPI")
      Me.B_NoIPI = AA & Format(intMax + 1, "0000") & BB & strPrefix1
       
    Else
     Me.B_NoIPI = "IPI" & "0001" & "/" & strPrefix1
      End If

ขอบคุณค่ะ
****************************************************************************

หนูอยากถามอาจารย์เพิ่มเติมเกี่ยวกับ Run อีกแบบคือ ตามที่คุณ มดเอ็ดถามคุณ TTT ค่ะ

ตัวอย่างคุณ TTT ค่ะ

http://cloudbox.3bb.co.th/share3/NzUzOXw0YWFkZDY2MTkwOGIxODFkMDU5YTExN2YwMmZiYzllY3wzNTMwOA==

ต้องการ Run แบบเดียวกันเลยค่ะ และติดปัญหาเหนือนกับคุณ มดเอ็ด คือ
คือ พอ Run แล้ว มันไม่ได้ 5 แถว คือเกิน5หรือ Run ไปเรื่อยๆเหมือนคุณมดเอ็ดค่ะ และพอเปลี่ยนวันที่ใหม่ โปรแกรมบางทีก็ไม่ยอมเปลี่ยนตัวใหม่ หรือกลับไปRun ตัวเก่าให้ครบ 5 ครั้งแล้วค่อยขึ้นใหม่ ตามคุณมดเอ็ดแจ้งคุณTTT ตามคำถามคุณมดเอ็ดเลยค่ะ
http://www.thai-access.com/yeadram_view.php?topic_id=3490&page=3

แต่จากคุณ TTT แแจ้งคุณมดเอ็ด คุณTTT บอก Run ได้แต่หนูมาลองมันติดเหมือนคุณมดเอ็ดค่ะ

ขอความกรุณาอาจารย์ช่วยดูให้หน่อยนะค่ะ ถือว่าช่วย 2 คนค่ะ
หรืออาจารย์มีแนวทางเขียนแบบใหม่ช่วยแก้ไขทีค่ะ
ขอบคุณอาจารย์ค่ะ




7 @R16270
ยังไม่มีเวลาดูให้นะครับ ต้องรอหน่อย แต่จากที่บอกเงื่อนไขว่า "ตัวเก่าให้ครบ 5 ครั้งแล้วค่อยขึ้นใหม่" ก็ลองใช้ DCount( ) เป็นตัวตรวจสอบดูสิครับ
8 @R16271
มดเอ็ด...พิ้ง...???
9 @R16275
ขอบคุณอาจารย์มากค่ะ
หนูจะรอดูตัวอย่างจากอาจารย์นะค่ะ

และหนูจะลองแก้ไขของคุณมดเอ็ดดูค่ะ

ขอบคุณค่ะ
10 @R16287
ลองทดสอบดูนะครับ

Private Sub zzz_Click()
    Dim SQLDate     As String
    Dim MaxZZZ      As Variant
    Dim CountZZZ    As Integer
    Dim BudYear     As String
    
    If Me.NewRecord Then
        ' หาปี พ.ศ. 2 หลัก
        BhudYear = Right(Year(Date) + 543, 2)
       
        ' วันที่ปัจจุบันที่จะใส่เข้าในเงื่อนไข รูปแบบเป็น เดือน/วัน/ค.ศ.
        SQLDate = "#" & DatePart("m", Date) & "/" & DatePart("d", Date) & "/" & DatePart("yyyy", Date) & "#"
       
        ' ค่า zzz ที่มากที่สุดของปี
        MaxZZZ = DMax("zzz", "qr", "year(aDate) = " & DatePart("yyyy", Date))
       
        ' ถ้าไม่มี ก็ให้เป็นเลขที่ 0001
        If IsNull(MaxZZZ) Then
            zzz = "0001/" & BhudYear
        Else
            ' หาจำนวนของเลขสุดท้ายของวันนี้
            CountZZZ = DCount("zzz", "qr", "aDate = " & SQLDate & " and zzz = '" & MaxZZZ & "'")
            
            ' ถ้าไม่มี หรือมีครบ 5 เรคอร์ดแล้ว ก็เพิ่มเป็นเลขที่ต่อไป
            If CountZZZ = 0 Or CountZZZ = 5 Then
               zzz = Format(Val(Left(MaxZZZ, 4)) + 1, "0000") & "/" & BhudYear
            Else
            ' ไม่เช่นนั้นก็ใช้เลขที่เดิม
               zzz = MaxZZZ
            End If
        End If
    End If
End Sub
11 @R16295
ขอบคุณมากค่ะอาจารย์

สุดยอดเลยค่ะ หนูลองทำ 4 , 5 รอบไม่ได้ซักทีว่าจะถอดใจแล้วเชียว


นับถืออาจารย์มากค่ะ
ขอบคุณค่ะ
12 @R16302
ขอบคุณอาจารย์มากๆครับ

ติดมาหลายวันแล้วครับ
และขอบคุณ คุณพิ้งที่ช่วยตามครับ

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