ต้องการให้เลขที่บิลเพิ่มทีละหนึ่ง แบบไม่ปกติ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 416   13
URL.หัวข้อ / URL
ต้องการให้เลขที่บิลเพิ่มทีละหนึ่ง แบบไม่ปกติ

ต้องการให้เลขที่บิล(LongInteger)เพิ่มทีละหนึ่ง(อันนี้ไม่ใช่ปัญหา ทำได้) ปัญหาคือถ้าให้มันรันไปเรื่อยก็ไม่มีปัญหาแต่ถ้าเราคีย์เลขที่ข้ามไปเวลาลำดับต่อไปโปรแกรมคำนวณจะได้ค่าสูงสุดบวกหนึ่งซึ่งผมไม่ต้องการ ต้องการให้มันรันต่อจากของเดิมก่อน ตัวอย่างเช่น

เลขที่บิล
1 คีย์เอง
2 โปรแกรมคำนวณ DLast[เลขที่บิล]+1
3 โปรแกรมคำนวณ DLast[เลขที่บิล]+1
7 คีย์เอง
10 คีย์เอง
4 โปรแกรมคำนวณ ปัญหาอยู่ตรงนี้คือต้องการให้มันรันต่อจากสามมาก่อนถ้าเจอเจ็ดมันซ้ำให้ข้ามไป

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

1 @R05586
คุณต้องเขียน Code เพื่อ control ต่างหาก
โดยสร้าง Table RunningNumber

2 @R05587
ID=Dlookup(runnungnumber)+1
แล้วให้เช็ค ID ใน Table ของคุณว่ามีหรือไม่ ถ้ามีแล้วก็ +1 ไปเรื่อยๆ
จนได้เลขที่ต้องการแล้ว Save Runningnubmer+1 ไว้ด้วย
3 @R05588
ขอไฟล์ตัวอย่าง ได้ไหม นึกภาพไม่ค่อยออก
4 @R05598
1. สร้าง table Runningnumber เพิ่ม
2. ตอน add record ใหม่ ให้เขียน code เพื่ออ่าน number จาก table Runningnumber +1
3. เช็คว่า Table ที่จะ add มี ID นี้หรือยัง ถ้ายังไม่มีก็ให้ Add เข้าไป แล้ว
update ID ลงใน Table Runningnumber
ถ้ามีแล้วก็ให้ +1 และเริ่มข้อ 3. ใหม่




5 @R05625
Dim db As dao.Database
Dim rst As dao.Recordset
Dim billfirst As Long, billpre As Long, billnext As Long, billlast As Long

Set db = CurrentDb()
Set rst = db.OpenRecordset("select BillID from TBill order by BillID", dbOpenDynaset)

If rst.EOF = True Then
Me.BillID = 1

Else
rst.MoveLast
billlast = rst!BillID

If billlast = 1 Then
Me.BillID = 2
End If

rst.MoveFirst

Do While rst!BillID < billlast
billpre = rst!BillID
rst.MoveNext
billnext = rst!BillID

If (billnext - billpre) > 1 Then
Me.BillID = billpre + 1
Exit Do
ElseIf (billpre + 1) = billlast Then
Me.BillID = billlast + 1
Exit Do
End If
Loop

End If

rst.Close
db.Close
Set rst = Nothing
Set db = Nothing

ลองปรับใช้ดูนะครับ ยังไงให้ผู้ที่เชี่ยวชาญตรวจสอบอีกทีนะครับ เขียนแบบงง
6 @R05632
ผมทำแล้วก็ไม่ได้ ช่วยดูในตัวอย่างให้หน่อยครับ
7 @R05651
ผมก็อยากรู้อยู่เหมือนกัน Access ทำได้หรือป่ะ ถ้าใช้DLast มันจะบวกเพิ่มไปเรื่อย ๆ มันไม่กลับมาเช็กย้อนหลังให้ว่าเลขใดยังไม่รัน
8 @R05652
จากกระทู้นะครับ
******************
เลขที่บิล
1 คีย์เอง
2 โปรแกรมคำนวณ DLast[เลขที่บิล]+1
3 โปรแกรมคำนวณ DLast[เลขที่บิล]+1
7 คีย์เอง
10 คีย์เอง
4 โปรแกรมคำนวณ ปัญหาอยู่ตรงนี้คือต้องการให้มันรันต่อจากสามมาก่อนถ้าเจอเจ็ดมันซ้ำให้ข้ามไป
******************
ลำพังมี field เลขที่บิล field เดียวเครื่องจะรู้ได้ยังไงครับว่าตัวเลขไหนที่เราคีย์เองตัวเลขไหนที่ ใช้โปรแกรมคำนวนเพราะค่าที่เห็น number ทั้งหมด ผมว่ามันน่าจะเพิ่ม field ที่บอกได้ว่า number ที่เห็นเนี่ยมาจากเครื่อง หรือว่า เราคีย์เข้าไปเอง
เลขที่บิล status
1 Com
2 Com
3 Com
7 Manual
10 manual

ทีนี้ถ้าจะให้เครื่องคำนวนก็ให้เรียกเงื่อนไขที่ Status = Com แล้วใช้ Dmax ก็ได้ +1 เข้าไป ถ้าซ้ำกับเลขที่มีอยู่ก็ให้เพิ่มไปทีละ1 จนไม่ซ้ำกัน ก็น่าจะ okแล้ว
9 @R05657
คุณ K ครับ

ฟังชั่นที่ผมทำเป็นตัวอย่างให้ดู จะต้องใช้กับ Event Last Update ของ อีก field ครับ
10 @R05670
คุณตุ้มเม้ง สมมติถ้าเพิ่มฟิลด์status อีก1อัน แล้วเราเขียนโค้ดยังไงให้ฟิลด์นี้เช็คเองว่าฟิลด์เลขที่บิลมันถูกคำนวณหรือถูกพิมพ์เอง

คือผมเพิ่งเรียนหัดใช้อยากให้ช่วยแนะนำทีละขั้นจะดีกว่า ถ้าแนบตัวอย่างมาให้ด้วยได้ก็จะทำให้เข้าใจยิ่งขึ้น

ขอบคุณทุกท่าน ๆมากเลย
11 @R05671
ลองไปปรับดูครับ เผื่อจะตรงกะที่ต้องการ (ค่าจ้างเอาเป็นโอเลี้ยงแก้วนึงนะครับ5555)
12 @R05685
ขอเกริ่นก่อนนะครับคือ
chqNo ของผมจะมีรูปแบบ 8 หลัก เช่น 46120280 ผมต้องการเริ่มจากเลขนี้เลย
พอคีย์ไปมัน error ไม่ทราบว่าต้องเปลี่ยนตัวแปรตรงไหนบ้าง
และอีกคำถามในตัวอย่างถ้ากด save มันจะใส่ค่าไปลงตารางTable1 ฟิลด์ ChqNo ถามว่าเขียนโค้ดเพิ่มยังไงให้มันใส่ค่านี้ไปที่ตาราง Table2 ฟิลด์ ChqNo2 ได้พร้อมกันด้วย
13 @R05696
1. Number 46120280 Err. น่าจะเป็นตอนที่ประกาศตัวแปรเป็น Integer ซึ่งตัวเลขที่สามารถรับค่าได้ ผมคุ้นๆว่าจะไม่เกิน 3หมื่นกว่าๆ เนี่ยแหละซึ่งถ้าต้องการเก็บเลขที่มากกว่านั้นต้องไปประกาศตัวแปรใหม่ เป็น Dim i As Long
2.ลองเพิ่ม
dim rst2 as recordset
set rst2 = dbs.openrecord("table2",dbopendynaset)
rst2.addnew
rst2![chgno2]=i
rst2.update
rst2.close

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