รบกวนท่านอาจารย์ทุกท่านคับ
กระทู้เก่าบอร์ด อ.Yeadram

 583   4
URL.หัวข้อ / URL
รบกวนท่านอาจารย์ทุกท่านคับ

ผมอยากจะเช็คเลขที่ใบเสร็จว่ามีการกระโดดข้ามบ้างหรือเปล่าครับ
ตัวอย่างเช่น
เครื่อง C01
C01-000001
C01-000002
C01-000004
C01-000006

เครื่อง C02
C02-000001
C02-000002
C02-000004
C02-000005
C02-000007

ที่ C01 นั้นจะมีการข้าม หมายเลข 000003 ส่วน C02 มีการข้าม 000003 และ 000006 คือผมอยากให้แสดงว่ามีเครื่องไหน หมายเลขอะไรที่ข้ามไปครับผมขอรบกวนอาจารย์ทุกท่านด้วยครับ

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

1 @R24050
Dim tmpCode
Dim maxMachine as long
Dim MaxNumber as long
Dim x, y as long

tmpCode = dMax("เลขที่", "ตาราง") ' หาหมายเลขเครื่องลำดับสุดท้าย
maxMachine = cLng(mid(tmpCode,2,2)) 'แปลงค่ารหัสเครื่องเป็นตัวเลข

for x = 1 to maxMachine 'วนลูปตามจำนวนเครื่อง
' หาหมายเลขลำดับสุดท้ายในรหัสของเครื่องนี้
maxNumber = dMax("เลขที่", "ตาราง", "Left(เลขที่,3) like 'C' & '" & format(x,"00") & "'")
for y = 1 to maxNumber 'วนลูปทุกหมายเลขในรหัสเครื่องนี้
tmpCode = "C" & format(x,"00") & "-" & format(y,"000000") 'สร้างเลขจำลองขึ้นมา
if isnull(dCount("เลขที่","ตาราง","เลขที่ Like '" & tmpCode & "'") then ' นำเลขจำลองไปเทียบข้อมูลจริงในตาราง
debug.print tmpCode ' ถ้าเลขจำลองในลูปรอบนี้ ไม่มีอยู่ในตารางให้ปริ๊นท์ออกมา
end if
next y
next x


เป็นแนวทางนะครับ ถ้าเข้าใจแนวทางแล้ว คงสามารถแก้บักเองได้ (ซึ่งคิดว่ามันต้องมี error บ้างแหละ เนื่องจากชนิดข้อมูล)
2 @R24057
อาจารย์ yeadram ครับ เอาเป็นเครื่องเดียวก็ได้ครับผม (C01) จะได้ไม่ยุ่งยากเกินไปครับ ทั้งหมดนี้ผมนำไปไว้ที่ มูลดูลใช่หรือเปล่าครับ
มันมี error ตอนผมคีย์ที่ บรรทัด if ครับผม
ตารางชื่อ T_Order มีฟิวด์ที่เก็บเลขที่ชื่อ OrdCode ครับ
ผมจะให้แสดงที่ Query ยังไงบ้างครับผม
รบกวนอาจารย์ yeadram ด้วยครับ
3 @R24066
Public Function FindLostChain() As String
Dim MyRs As Recordset, nRunNum As Long, i As Long, stResult As String

    stResult = ""
    Set MyRs = CurrentDb.OpenRecordset("SELECT T_Order.OrdCode FROM T_Order ORDER BY T_Order.OrdCode;", dbOpenSnapshot)
    If MyRs.RecordCount > 0 Then
        i = 1
        MyRs.MoveFirst
        Do While Not MyRs.EOF
            nRunNum = Val(Mid(MyRs!OrdCode, 5))
            If nRunNum > 0 And nRunNum <> i Then
               stResult = stResult & Left(MyRs!OrdCode, 4) & Format(nRunNum, "000000") & " "
               i = nRunNum
            End If
            i = i + 1
        Loop
    End If
    MyRs.Close
    Set MyRs = Nothing
    
    FindLostChain = stResult

End Function

วิธีใช้งาน Me.textbox = FindLostChain()

ปล. รูปแบบ OrdCode จะต้องเป็น format แบบที่ให้มาในโจทย์นะครับ
4 @R24067
แก้ไข:-

Public Function FindLostChain() As String
Dim MyRs As Recordset, nRunNum As Long, i As Long, stResult As String

    stResult = ""
    Set MyRs = CurrentDb.OpenRecordset("SELECT T_Order.OrdCode FROM T_Order ORDER BY T_Order.OrdCode;", dbOpenSnapshot)
    If MyRs.RecordCount > 0 Then
        i = 1
        MyRs.MoveFirst
        Do While Not MyRs.EOF
            nRunNum = Val(Mid(MyRs!OrdCode, 5))
            If nRunNum > 0 And nRunNum <> i Then
               stResult = stResult & Left(MyRs!OrdCode, 4) & Format(nRunNum, "000000") & " "
               i = nRunNum
            End If
            i = i + 1
            MyRs.MoveNext
        Loop
    End If
    MyRs.Close
    Set MyRs = Nothing
    
    FindLostChain = stResult

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