กระทู้เก่าบอร์ด อ.Yeadram
1,540 5
URL.หัวข้อ /
URL
autoruncode
เรียนถาม
ผมมีปัญหาเรือง autoruncode รบกวนดูให้ห่อยครับว่าผิดตรงไหนเพราะว่ามันไม่เริ่มต้นใหม่เมือเปลี่ยนเดือนใหม่
1. Table ประกอบด้วย ID , Date , LabNo (ส่วนนี้เริมต้นนับ 1 ใหม่เมื่อเปลี่ยนเดือน)
2 Form---- Code
Option Compare Database
Dim T_LabNo_Rst as recodset
Private Sub Form_Open(Cancel As Integer)
tDate = Date
Set dbs = CurrentDb
Set T_LabNo_Rst = dbs.OpenRecordset("T_LabNo")
'ให้คำสั่งตรวจสอบ วัน เดือน ปี ในตาราง เพื่อตรวจสอบหมายเลขสุดท้าย
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
End sub
Private Sub CMD_SaveRecord_Click()
With T_TPT_LabNo_Rst
.AddNew
.Fields("Date") = tDate
.Fields("LabNo") = tLabNo
.UpDate
'ให้คำสั่งตรวจสอบ วัน เดือน ปี ในตาราง เพื่อตรวจสอบหมายเลขสุดท้าย
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
End With
คำถามคือ LabNo เมื่อเปลี่ยนเดือนกลับไม่เริ่มนับ 1 ใหม่ แต่กลับปรากฎ LabNo ต่อเนื่องไป
เมื่อไม่ set date ในฟอร์ม กลับ นับ 1 ให้ เมื่อ set date กลับให้เลขที่ต่อเนื่อง ไมนับ 1 ใหม่
แก้มาหลายวันแล้วไม่สำเร็จครับ
ผมมีปัญหาเรือง autoruncode รบกวนดูให้ห่อยครับว่าผิดตรงไหนเพราะว่ามันไม่เริ่มต้นใหม่เมือเปลี่ยนเดือนใหม่
1. Table ประกอบด้วย ID , Date , LabNo (ส่วนนี้เริมต้นนับ 1 ใหม่เมื่อเปลี่ยนเดือน)
2 Form---- Code
Option Compare Database
Dim T_LabNo_Rst as recodset
Private Sub Form_Open(Cancel As Integer)
tDate = Date
Set dbs = CurrentDb
Set T_LabNo_Rst = dbs.OpenRecordset("T_LabNo")
'ให้คำสั่งตรวจสอบ วัน เดือน ปี ในตาราง เพื่อตรวจสอบหมายเลขสุดท้าย
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
End sub
Private Sub CMD_SaveRecord_Click()
With T_TPT_LabNo_Rst
.AddNew
.Fields("Date") = tDate
.Fields("LabNo") = tLabNo
.UpDate
'ให้คำสั่งตรวจสอบ วัน เดือน ปี ในตาราง เพื่อตรวจสอบหมายเลขสุดท้าย
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
End With
คำถามคือ LabNo เมื่อเปลี่ยนเดือนกลับไม่เริ่มนับ 1 ใหม่ แต่กลับปรากฎ LabNo ต่อเนื่องไป
เมื่อไม่ set date ในฟอร์ม กลับ นับ 1 ให้ เมื่อ set date กลับให้เลขที่ต่อเนื่อง ไมนับ 1 ใหม่
แก้มาหลายวันแล้วไม่สำเร็จครับ
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R06688
ขอโทษด้วยครับ T_LabNo ต้องเป็น T_TPT_LabNo นะครับ พิมพ์ผิดไป
2 @R06692
คุณใช้เงื่อนไขใน Dmax กับ Dcount ผิดครับ
เท่าที่ดู เห็นว่าตารางของคุณ ไม่มีฟิลด์ที่ชื่อ tDate
แต่คุณเขียนให้มันเข้าไปค้นข้อมูลโดยตรวจสอบเงื่อนไขจากฟิลด์ชื่อ tDate ดังนั้นผลการตรวจสอบเงื่อนไข มันจึงออกมาเป็น Null ไม่ใช่ True หรือ False
จริงๆ แล้วคุณควรจะเช็คฟิลด์ที่ชื่อ [Date] ไม่ใช่ tDate
แล้วสิ่งที่จะให้มาเปรียบเทียบที่คุณต้องการ มันคือค่าใน textbox หรือเปล่า หรือว่าจะเป็นวันเวลาปัจจุบันของเครื่อง อันนี้ต้องตรวจสอบความต้องการของตัวเองอีกที
,"format([DATE],'mmyy' = " & format(tDate,'mmyy')
เท่าที่ดู เห็นว่าตารางของคุณ ไม่มีฟิลด์ที่ชื่อ tDate
แต่คุณเขียนให้มันเข้าไปค้นข้อมูลโดยตรวจสอบเงื่อนไขจากฟิลด์ชื่อ tDate ดังนั้นผลการตรวจสอบเงื่อนไข มันจึงออกมาเป็น Null ไม่ใช่ True หรือ False
จริงๆ แล้วคุณควรจะเช็คฟิลด์ที่ชื่อ [Date] ไม่ใช่ tDate
แล้วสิ่งที่จะให้มาเปรียบเทียบที่คุณต้องการ มันคือค่าใน textbox หรือเปล่า หรือว่าจะเป็นวันเวลาปัจจุบันของเครื่อง อันนี้ต้องตรวจสอบความต้องการของตัวเองอีกที
,"format([DATE],'mmyy' = " & format(tDate,'mmyy')
3 @R06693
ในตารางมี field ที่เก็บวันที่ อยู่ในตารางชื่อ field Date แต่ในส่วนคำสั่งผมใช้ผิด
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
หากต้องเป็น (แก้ไข)
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
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
แสดงว่า ใช้คำสั่งในการตรวจสอบวันที่ ใน DCount และ Dmax แทนที่จะเป็นการไปตรวจสอบวันที่จากตาราง เพื่อหาวันที่ครั้งสุดท้ายของเดือน ที่จะได้ค่าจำนวนครั้งสุดท้ายมากที่สุด กลับกลายเป็นการตรวจสอบวันที่ในส่วนของ Form แทน เพราะ tDate เป็นชื่อ textbox ใน Form ทำให้ไม่สามารถนับเริ่มต้น 1 ใหม่เมื่อเปลี่ยนเดือน ถูกหรือเปล่าครับ
ขอบคุณครับ
If DCount("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") > 0 Then
tLabNo = DMax("LabNo", "T_TPT_LabNo", "Year(tDate)=" & Year(Now()) & " And Month(tDate)=" & Month(Now()) & "") + 1
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
หากต้องเป็น (แก้ไข)
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
'เริ่มนับ 1 ใหม่เมื่อเปลี่ยนเดือน
Else
tLabNo = 1
End If
แสดงว่า ใช้คำสั่งในการตรวจสอบวันที่ ใน DCount และ Dmax แทนที่จะเป็นการไปตรวจสอบวันที่จากตาราง เพื่อหาวันที่ครั้งสุดท้ายของเดือน ที่จะได้ค่าจำนวนครั้งสุดท้ายมากที่สุด กลับกลายเป็นการตรวจสอบวันที่ในส่วนของ Form แทน เพราะ tDate เป็นชื่อ textbox ใน Form ทำให้ไม่สามารถนับเริ่มต้น 1 ใหม่เมื่อเปลี่ยนเดือน ถูกหรือเปล่าครับ
ขอบคุณครับ
4 @R06694
ความเข้าใจของคุณ น่าจะใกล้เคียงแล้วล่ะ (เมื่อเทียบเคียงกับโค้ดที่คุณได้ลองปรับแก้
เพิ่มเติมอีกนิดครับ
ตัวอย่างโค้ดสั้นๆ ที่ผมให้ไป มองให้ดีๆ นะครับ
ฝั่งข้างหน้า (อยู่ก่อนเครื่องหมายเท่ากับ) จะเป็นชื่อฟิลด์ในตาราง (หากใช้ตรงกับคำสงวน เช่นคำว่า Date ที่คุณใช้อยู่นั้น ต้องมีเครื่องหมายสี่เหลี่ยมคร่อมไว้ด้วย) และฝั่งด้านหลัง จะเป็นชื่อ textbox ที่อยู่ในฟอร์ม
ความหมายคร่าวๆ คือ ให้ไปค้นข้อมูล (เลขที่) จากตาราง โดยให้มองหาเฉพาะเรคคอร์ดที่มีวันที่ = ค่าที่อยู่ใน textbox
สรุปง่ายๆ คือให้เปรียบเทียบข้อมูลของตารางกับข้อมูลในฟอร์มปัจจุบัน
เพิ่มเติมอีกนิดครับ
ตัวอย่างโค้ดสั้นๆ ที่ผมให้ไป มองให้ดีๆ นะครับ
ฝั่งข้างหน้า (อยู่ก่อนเครื่องหมายเท่ากับ) จะเป็นชื่อฟิลด์ในตาราง (หากใช้ตรงกับคำสงวน เช่นคำว่า Date ที่คุณใช้อยู่นั้น ต้องมีเครื่องหมายสี่เหลี่ยมคร่อมไว้ด้วย) และฝั่งด้านหลัง จะเป็นชื่อ textbox ที่อยู่ในฟอร์ม
ความหมายคร่าวๆ คือ ให้ไปค้นข้อมูล (เลขที่) จากตาราง โดยให้มองหาเฉพาะเรคคอร์ดที่มีวันที่ = ค่าที่อยู่ใน textbox
สรุปง่ายๆ คือให้เปรียบเทียบข้อมูลของตารางกับข้อมูลในฟอร์มปัจจุบัน
5 @R06696
ครับผม code ที่ยกตัวอย่างที่ให้มาก้อดีครับ สั้นกระทัดรัด ของปรับดูแล้วครับ อย่างก้อขอขอบคุณมากครับ
Time: 0.2453s