• Tạo mã số
  • Tạo mã số

    thanhquyt > 13-09-15, 04:16 PM

    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
  • RE: Tạo mã số

    ongke0711 > 13-09-15, 05:19 PM

    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
  • RE: Tạo mã số

    tranthanhan1962 > 13-09-15, 07:17 PM

    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 
  • RE: Tạo mã số

    thanhquyt > 13-09-15, 07:27 PM

    (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