กระทู้เก่าบอร์ด อ.Yeadram
1,571 9
URL.หัวข้อ /
URL
run number ไม่ยอมรันต่อครับ
run ไปได้ถึง 691 แล้วมันหยุดไม่ยอมบวกต่อครับ ผมมือใหม่รบกวนดู code ให้หน่อยครับ ว่าผิดตรงไหนช่วยชี้แนะ
Option Compare Database
Option Explicit
Dim IsSave As Boolean
Private car_id As String
Private Sub cmda_Enter()
If IsNull(Me.txtcode) Then
MsgBox "¡ÃسÒãÊèÃËÑÊÊÔ¹¤éÒ¡è͹¡´ Enter", vbCritical
Me.txtcode = ""
Me.txtcode.SetFocus
ElseIf IsNull(DLookup("[id]", "[Data]", "[id]=[txtcode]")) Then
MsgBox "¤Ø³ãÊèÃËÑÊÊÔ¹¤éÒ¼Ô´ ¡ÃسÒãÊèÍÕ¡¤ÃÑé§", vbCritical
Me.txtcode = ""
Me.txtcode.SetFocus
Else
Me.Pic.Visible = True
Me.RecordSource = "qryall"
Me.txtdate = Date
Me.txtTime = Time
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblHistory (Nocar, Date_T, Uname, ProductId, Time_T) VALUES ( ' " & txtcar & " ', ' " & txtdate & " ' , ' " & txtThisUser & " ', ' " & txtcode & " ', ' " & txtTime & " ')"
Me.Requery
DoCmd.SetWarnings True
End If
End Sub
Private Sub cmdclear_Enter()
Me.txtThisUser = gstrThisUser
Me.txtThisRole = gstrThisUserRole
Me.txtcode.SetFocus
Me.ID.Visible = False
Me.Pic.Visible = False
Me.txtcar = " "
Me.txtcode = " "
Me.txtdate = " "
Me.List40.Requery
runnumber
End Sub
Private Sub cmdreset_Click()
If MsgBox("µéͧ¡ÒÃà»ÅÕè¹ÃͺãËÁè ãªèËÃ×ÍäÁè?", vbYesNo) = vbNo Then
cmdclear_Enter
Else
Me.txtcar = 1
Me.txtcode = " "
Me.Pic.Visible = False
Me.txtcode.SetFocus
End If
End Sub
Private Sub Form_Load()
Me.txtThisUser = gstrThisUser
Me.txtThisRole = gstrThisUserRole
Me.txtcode.SetFocus
Me.ID.Visible = False
Me.Pic.Visible = False
Me.txtcar = " "
runnumber
End Sub
Private Sub runnumber()
If IsNull(DLookup("[Nocar]", "[tblHistory]")) Then
Me.txtcar = 1
Else
Me.txtcar = DLast("Nocar", "tblHistory", "Nocar") + 1
End If
End Sub
Private Sub txtcode_AfterUpdate()
Me.txtcode = UCase(txtcode)
End Sub
Option Compare Database
Option Explicit
Dim IsSave As Boolean
Private car_id As String
Private Sub cmda_Enter()
If IsNull(Me.txtcode) Then
MsgBox "¡ÃسÒãÊèÃËÑÊÊÔ¹¤éÒ¡è͹¡´ Enter", vbCritical
Me.txtcode = ""
Me.txtcode.SetFocus
ElseIf IsNull(DLookup("[id]", "[Data]", "[id]=[txtcode]")) Then
MsgBox "¤Ø³ãÊèÃËÑÊÊÔ¹¤éÒ¼Ô´ ¡ÃسÒãÊèÍÕ¡¤ÃÑé§", vbCritical
Me.txtcode = ""
Me.txtcode.SetFocus
Else
Me.Pic.Visible = True
Me.RecordSource = "qryall"
Me.txtdate = Date
Me.txtTime = Time
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblHistory (Nocar, Date_T, Uname, ProductId, Time_T) VALUES ( ' " & txtcar & " ', ' " & txtdate & " ' , ' " & txtThisUser & " ', ' " & txtcode & " ', ' " & txtTime & " ')"
Me.Requery
DoCmd.SetWarnings True
End If
End Sub
Private Sub cmdclear_Enter()
Me.txtThisUser = gstrThisUser
Me.txtThisRole = gstrThisUserRole
Me.txtcode.SetFocus
Me.ID.Visible = False
Me.Pic.Visible = False
Me.txtcar = " "
Me.txtcode = " "
Me.txtdate = " "
Me.List40.Requery
runnumber
End Sub
Private Sub cmdreset_Click()
If MsgBox("µéͧ¡ÒÃà»ÅÕè¹ÃͺãËÁè ãªèËÃ×ÍäÁè?", vbYesNo) = vbNo Then
cmdclear_Enter
Else
Me.txtcar = 1
Me.txtcode = " "
Me.Pic.Visible = False
Me.txtcode.SetFocus
End If
End Sub
Private Sub Form_Load()
Me.txtThisUser = gstrThisUser
Me.txtThisRole = gstrThisUserRole
Me.txtcode.SetFocus
Me.ID.Visible = False
Me.Pic.Visible = False
Me.txtcar = " "
runnumber
End Sub
Private Sub runnumber()
If IsNull(DLookup("[Nocar]", "[tblHistory]")) Then
Me.txtcar = 1
Else
Me.txtcar = DLast("Nocar", "tblHistory", "Nocar") + 1
End If
End Sub
Private Sub txtcode_AfterUpdate()
Me.txtcode = UCase(txtcode)
End Sub
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R07245
เอ้า แก้ๆๆครับ ต้องเป็น DMax("Nocar", "tblHistory") + 1
3 @R07248
สวัสดีครับพี่ สันติสุข
ตรง txtcar เป็น numberic ครับ พอดีตั้งสื่อความหมายผิด
คือผลลัพธ์มันเป็นอย่างนี้ครับ
1
2
3
4
1
2
3
4
ผมอยากได้ค่าสุดท้ายเพื่อมาบวกเพิ่มไปเรื่อย ๆ แต่พอต้องการมาเริ่ม 1 ใหม่ก็จะกดปุ่มเพื่อสั่งให้มันเริ่ม 1 ใหม่จากนั้นมันก็ run ไปเรื่อย ๆ
ตัว nocar ของผมมันไม่ได้เป็น field primary ครับ ตัว primary เป็น autonumber
ผมก็ run ไปเรื่อยแต่พอถึง 691 มันไม่ยอมเปลี่ยนให้กด clear ที่ form ก็ไม่เปลี่ยนครับ
รบกวนช่วยดูหน่อยครั??
ตรง txtcar เป็น numberic ครับ พอดีตั้งสื่อความหมายผิด
คือผลลัพธ์มันเป็นอย่างนี้ครับ
1
2
3
4
1
2
3
4
ผมอยากได้ค่าสุดท้ายเพื่อมาบวกเพิ่มไปเรื่อย ๆ แต่พอต้องการมาเริ่ม 1 ใหม่ก็จะกดปุ่มเพื่อสั่งให้มันเริ่ม 1 ใหม่จากนั้นมันก็ run ไปเรื่อย ๆ
ตัว nocar ของผมมันไม่ได้เป็น field primary ครับ ตัว primary เป็น autonumber
ผมก็ run ไปเรื่อยแต่พอถึง 691 มันไม่ยอมเปลี่ยนให้กด clear ที่ form ก็ไม่เปลี่ยนครับ
รบกวนช่วยดูหน่อยครั??
4 @R07249
- สมมุติว่าฟิลด์ Autonumber ชื่อว่า A
- สมมุติฐานคือ เมื่อฟิลด์ AutoNumber เพิ่มขึ้นค่าของ NoCar จะเพิ่มขึ้นเรื่ิอยๆทีละ 1 หรือไม่ก็จะย้อนกลับไปเป็น 1 อีกที
- ถ้าไม่มีการกดปุ่มเพื่อสั่งเริ่ม 1 ใหม่
Private Sub runnumber()
Dim MaxA as Variant
Dim MaxNo as Variant
' หาเรคอร์ดสุดท้าย นั่นคือหาเรคอร์ดที่ฟิลด์ A มีค่ามากสุด
MaxA = DMax("A", "tblHistory")
' ถ้าหาไม่ได้ ก็แปลว่ายังไม่มีเรคอร์ดอะไรเลย ก็กำหนดเป็น 1 ได้เลย
if Isnull(MaxA) then
Me.txtcar = 1
else
' ถ้าหาได้ ก็ให้หาว่าฟิลด์ Nocar จากเรคอร์ดนั้นเป็นค่าอะไร แล้วบวกเพิ่มอีก 1
Me.txtcar = DLookup("Nocar", "tblHistory", "A = " & cstr(MaxA) + 1
end if
End Sub
- สมมุติฐานคือ เมื่อฟิลด์ AutoNumber เพิ่มขึ้นค่าของ NoCar จะเพิ่มขึ้นเรื่ิอยๆทีละ 1 หรือไม่ก็จะย้อนกลับไปเป็น 1 อีกที
- ถ้าไม่มีการกดปุ่มเพื่อสั่งเริ่ม 1 ใหม่
Private Sub runnumber()
Dim MaxA as Variant
Dim MaxNo as Variant
' หาเรคอร์ดสุดท้าย นั่นคือหาเรคอร์ดที่ฟิลด์ A มีค่ามากสุด
MaxA = DMax("A", "tblHistory")
' ถ้าหาไม่ได้ ก็แปลว่ายังไม่มีเรคอร์ดอะไรเลย ก็กำหนดเป็น 1 ได้เลย
if Isnull(MaxA) then
Me.txtcar = 1
else
' ถ้าหาได้ ก็ให้หาว่าฟิลด์ Nocar จากเรคอร์ดนั้นเป็นค่าอะไร แล้วบวกเพิ่มอีก 1
Me.txtcar = DLookup("Nocar", "tblHistory", "A = " & cstr(MaxA) + 1
end if
End Sub
5 @R07250
บรรทัด Dim MaxNo as Variant ไม่ต้องแล้วนะครับ ตัดออกไปได้
6 @R07251
แก้อีกทีครับ เขียนผิด ลืมวงเล็บปิด
Me.txtcar = DLookup("Nocar", "tblHistory", "A = " & cstr(MaxA)) + 1
Me.txtcar = DLookup("Nocar", "tblHistory", "A = " & cstr(MaxA)) + 1
7 @R07254
ขอบคุณพี่ สันติสุขมากครับ
ตรง "A = " & cstr(MaxA)
มีความหมายว่าอะไรครับ
พึ่งหัดทำครับเลยไม่ค่อยเข้าใจความหมายเท่าไหร่
ตรง "A = " & cstr(MaxA)
มีความหมายว่าอะไรครับ
พึ่งหัดทำครับเลยไม่ค่อยเข้าใจความหมายเท่าไหร่
8 @R07256
เนื่องจาก parameter ตัวที่ 3 ใน DLookup( ) ต้องการข้อมูลประเภท string ดังนั้นเราจึงต้องแปลง MaxA จากประเภท Variant ให้เป็นประเภท string ด้วยฟังก์ชั่น CStr( )
จริงๆแล้วภาษา VB หรือ VBA จะแปลงอะไรให้เราตามประเภทข้อมูลที่มันต้องการอยู่แล้ว แต่ในความเห็นของผม การเขียนโปรแกรมที่ดีควรจะแปลงให้มันเลย เพราะถ้าให้มันแปลงเอง ในบางครั้งมันอาจแปลงผิดจากที่เราต้องการก็ได้
ผมแนะนำให้คุณติดตั้ง Help File เพื่อจะได้หาอ่านได้ว่าฟังก์ชั่นอะไรทำงานอย่างไร มันเป็นไปไม่ได้เลยที่เราจะเขียนโปรแกรมโดยไม่รู้ว่าระบบมันมีอะไรให้เราใช้ได้บ้าง หรือใช้อย่างไรนะครับ
จริงๆแล้วภาษา VB หรือ VBA จะแปลงอะไรให้เราตามประเภทข้อมูลที่มันต้องการอยู่แล้ว แต่ในความเห็นของผม การเขียนโปรแกรมที่ดีควรจะแปลงให้มันเลย เพราะถ้าให้มันแปลงเอง ในบางครั้งมันอาจแปลงผิดจากที่เราต้องการก็ได้
ผมแนะนำให้คุณติดตั้ง Help File เพื่อจะได้หาอ่านได้ว่าฟังก์ชั่นอะไรทำงานอย่างไร มันเป็นไปไม่ได้เลยที่เราจะเขียนโปรแกรมโดยไม่รู้ว่าระบบมันมีอะไรให้เราใช้ได้บ้าง หรือใช้อย่างไรนะครับ
9 @R07257
ขอบคุณ พี่สันติสุขมากครับ
Time: 0.2388s
และฟิลด์ Nocar ควรเป็นฟิลด์ประเภท Numeric เช่น Long Integer แต่ในโปรแกรมคุณเขียนเหมือนมันจะเป็นฟิลด์ประเภท Text โดยดูจากตรงที่คุณเขียนว่า ...VALUES ( ' " & txtcar & " ', ' " &... ถ้าฟิลด์มันเป็นประเภท Numeric อยู่แล้ว ตรงนี้ก็ควรแก้ไขเป็น ...VALUES ( " & txtcar & " , ' " &...