Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Tạo mã số
#1
Hi mọi người
Mình có 1 table có 2 trường.
id : autonumber
maso : number

Sau khi lưu thi  maso= ngay+thang+nam+id+1.Nhưng có 1 lỗi ở đây là hôm nay là ngày 12 mình tạo ra 5 record có maso 12920151 - 12920155. Ngày 13 tạo thêm 1 record nữa thì ma so tự động chuyển thành 13920151-13920156.Ai biết cách khi đã lưu thì nó sẽ ko thay đổi ngày tháng năm nữa giúp mình với
Mã:
Dim db As DAO.Database
   Dim rs As DAO.Recordset
   Dim st As String
   Dim i As Integer
   i = 1
   Set db = CurrentDb
   Set rs = db.OpenRecordset("Table1", dbOpenDynaset)
   rs.MoveFirst
   Do While Not rs.EOF
       st = ""
       st = st & Day(Now) & Month(Now) & Year(Now) & i
       rs.Edit
       rs!maso = CLng(st)
       rs.Update
       i = i + 1
       rs.MoveNext
   Loop
   Set rs = Nothing
Chữ ký của thanhquyt thanhquyt,gia nhập Thủ Thuật Access từ 25-08 -15.
Reply
Những người đã cảm ơn
#2
Cái code của bạn là đi về dòng đầu tiên (rs.movefirst) của table 1 rồi update maso thì nó update lại hết toàn bộ các record cũ rồi còn gì.
Bạn chỉ cần update nhưng dòng nào mà cột maso là Null thôi.
  strSQL="SELECT * FORM Table1 WHERE maso is null;"
 Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

Nhưng tôi có thắc mắc về cách Lưu record của bạn. Bạn nhập tất cả các dòng rồi tạo mã số 1 lần hay sao? Tại sao không tạo dòng nào rồi update maso cho đúng dòng đó thôi? 
Sau khi cột ngày, cột stt được cập nhật thì tạo maso cho cột maso luôn.
Private sub Ngay_AfterUpdate
       Me.maso=Format (Me.Ngay,"ddmmyyy") & Me.stt
End sub
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhquyt , Noname
#3
Do bạn không có điều kiện nên mỗi lần xử lý là vòng lập nó phang lệnh Edit từ trên xuống dưới không quan tâm là dữ liệu của bạn có hay chưa. Bạn chỉ cần thêm điều kiện để nó né các record đã tạo mã ra.


Mã PHP:
Dim db As DAO.Database
Dim rs 
As DAO.Recordset
Dim st 
As String
Dim i 
As Integer
 i 
1
 Set db 
CurrentDb
 Set rs 
db.OpenRecordset("Table1"dbOpenDynaset)
 rs.MoveFirst
 
 Do 
While Not rs.EOF
 st 
""
 st st Day(Now) & Month(Now) & Year(Now) & i
    
If IsNull(rs!maso) Or rs!maso "" Then
       rs
.Edit
         rs
!maso CLng(st)
         rs.Update
         rs
.MoveNext
    Else
         rs
.MoveNext
    End 
If
    i 1
 Loop
 
 Set rs 
Nothing 
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhquyt , Noname , maidinhdan
#4
(13-09-15, 05:19 PM)ongke0711 Đã viết: Cái code của bạn là đi về dòng đầu tiên (rs.movefirst) của table 1 rồi update maso thì nó update lại hết toàn bộ các record cũ rồi còn gì.
Bạn chỉ cần update nhưng dòng nào mà cột maso là Null thôi.
  strSQL="SELECT * FORM Table1 WHERE maso is null;"
 Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

Nhưng tôi có thắc mắc về cách Lưu record của bạn. Bạn nhập tất cả các dòng rồi tạo mã số 1 lần hay sao? Tại sao không tạo dòng nào rồi update maso cho đúng dòng đó thôi? 
Sau khi cột ngày, cột stt được cập nhật thì tạo maso cho cột maso luôn.
Private sub Ngay_AfterUpdate
       Me.maso=Format (Me.Ngay,"ddmmyyy") & Me.stt
End sub

Mã số từng dòng đó bạn
Chữ ký của thanhquyt thanhquyt,gia nhập Thủ Thuật Access từ 25-08 -15.
Reply
Những người đã cảm ơn


Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ