กระทู้เก่าบอร์ด อ.Yeadram
        
           1,736   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.1409s
    
      
		
และฟิลด์ Nocar ควรเป็นฟิลด์ประเภท Numeric เช่น Long Integer แต่ในโปรแกรมคุณเขียนเหมือนมันจะเป็นฟิลด์ประเภท Text โดยดูจากตรงที่คุณเขียนว่า ...VALUES ( ' " & txtcar & " ', ' " &... ถ้าฟิลด์มันเป็นประเภท Numeric อยู่แล้ว ตรงนี้ก็ควรแก้ไขเป็น ...VALUES ( " & txtcar & " , ' " &...