• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Thêm mã tự động tăng dần

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Điều hành viên: tungblt

VisualBassic
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 77
Ngày tham gia: T.Năm 20/08/2009 8:52 am

Thêm mã tự động tăng dần

Gửi bàigửi bởi VisualBassic » T.Hai 21/09/2009 10:44 am

CSDL Access gồm 2 trường (Maphutung, tenphutung). Trên form của em gồm 1 textbox txtTenphutung và một nút lệnh cmdthem.

Khi cho em hỏi viết code như thế nào để bấm vào nút lệnh cmdthem. Thì tự động ở trường Maphutung sẽ tự động tạo ra một record có Maphutung tăng lệnh 1 đơn vị. (Tức là lấy Mã lớn nhất cộng thêm 1 đơn vị).
Ví dụ: Trong CSDL ban đầu có: PT0002, PT0003. Khi bấm vào nút thêm trong CSDL sẽ có thêm một mã mới PT0004.



boy1234
Guru
Guru
Bài viết: 448
Ngày tham gia: T.Hai 13/10/2008 3:12 pm
Đến từ: Dĩ An - Bình Dương
Been thanked: 32 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi boy1234 » T.Hai 21/09/2009 12:06 pm

Mã: Chọn hết

  1. Private Sub cmdThem_Click()  
  2.     Dim rsSPmax As New ADODB.Recordset
  3.     '-----------------------------------------'
  4.     '  lay max Maphutung cuoi cung tang len 1 '
  5.     '-----------------------------------------'
  6.     rsSPmax.Open "SELECT max(right(Maphutung,4)) as SPmax FROM Table", cn, adOpenKeyset, adLockOptimistic, adCmdText
  7.     txtMaphutung.Text = "PT" + Right(("0000" + CStr(rsSPmax.Fields("SPmax") + 1)), 4)
  8.     ........
  9.     rsSPmax.Close
  10. End Sub
Dạo này nghiện honda SS50

tieuyeu
Thành viên chính thức
Thành viên chính thức
Bài viết: 34
Ngày tham gia: T.Năm 11/06/2009 2:39 pm

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi tieuyeu » T.Ba 22/09/2009 12:37 pm

bài của anh boy1234 hay thật,đúng là đang cần cái này,
nhưng anh cho e hỏi
làm theo cách của anh thì khi xóa Mã vẫn cứ tự tăng
VD: có 6 mã 001,002,003,004,005,006,khi xóa 001,002 thì khi ghi cái mới là :007
vậy có cách nào khi ghi nó sẽ là 001,002 không? vì 001,002 bị xóa rồi mà:D
câu hỏi có ngu ngơ quá không nhỉ
Mr Hung

boy1234
Guru
Guru
Bài viết: 448
Ngày tham gia: T.Hai 13/10/2008 3:12 pm
Đến từ: Dĩ An - Bình Dương
Been thanked: 32 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi boy1234 » T.Ba 22/09/2009 1:00 pm

Chắc được đó bạn. Nên đưa giá trị Max ra Textbox rồi sửa theo mã đã xóa trước đó xong Update vào Database chắc được!
Dạo này nghiện honda SS50

tieuyeu
Thành viên chính thức
Thành viên chính thức
Bài viết: 34
Ngày tham gia: T.Năm 11/06/2009 2:39 pm

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi tieuyeu » T.Ba 22/09/2009 4:20 pm

boy1234 đã viết:Chắc được đó bạn. Nên đưa giá trị Max ra Textbox rồi sửa theo mã đã xóa trước đó xong Update vào Database chắc được!

a nói vậy nghĩa là như thế nào?
a có thể nói rõ và code ví dụ không?
Mr Hung

Hình đại diện của người dùng
skatervn
Thành viên danh dự
Thành viên danh dự
Bài viết: 181
Ngày tham gia: T.Tư 16/04/2008 9:44 am
Đến từ: Đà Nẵng
Been thanked: 2 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi skatervn » T.Ba 22/09/2009 4:43 pm

tieuyeu đã viết:bài của anh boy1234 hay thật,đúng là đang cần cái này,
nhưng anh cho e hỏi
làm theo cách của anh thì khi xóa Mã vẫn cứ tự tăng
VD: có 6 mã 001,002,003,004,005,006,khi xóa 001,002 thì khi ghi cái mới là :007
vậy có cách nào khi ghi nó sẽ là 001,002 không? vì 001,002 bị xóa rồi mà:D
câu hỏi có ngu ngơ quá không nhỉ


Vậy bạn có thể tham khảo đoạn code sau của mình:

Mã: Chọn hết

  1.  
  2. Private Function generateCode() As String
  3.    Dim iCount As Integer
  4.    Dim sQuery As String, Scode As String
  5.    'khoi tao gia tri ban dau cho count va sCode
  6.    iCount = 1: Scode = "pc" + Format(iCount, "0000") 'pc0001
  7.    'kiem tra chung nao ma tao dc khong ton tai thi tra ve gia tri nay
  8.    While mdlMain.kiemtratrung("PHIEU", "SoPhieu", Scode)
  9.       iCount = iCount + 1: Scode = "pc" + Format(iCount, "0000") 'pc0003
  10.    Wend
  11.    generateCode = Scode
  12. End Function
  13.  
  14. Public Function kiemtratrung(tableName As String, fielName As String, value As String) As Boolean
  15.    'On Error Resume Next
  16.    Dim rt As Boolean: rt = False
  17.  
  18.    cn.Open mdlMain.sChuoiKetNoi
  19.    rs.Open "select * from " & tableName & " where " & fielName & "='" & value & "'", cn, adOpenStatic, adLockOptimistic
  20.    If Not (rs.EOF And rs.BOF) Then
  21.       rt = True
  22.    End If
  23.    rs.Close
  24.    cn.Close
  25.  
  26.    kiemtratrung = rt
  27. End Function
  28.  

tieuyeu
Thành viên chính thức
Thành viên chính thức
Bài viết: 34
Ngày tham gia: T.Năm 11/06/2009 2:39 pm

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi tieuyeu » T.Ba 22/09/2009 10:54 pm

a cho e hỏi thế gán giá trị vào text chỗ nào?
trong

Mã: Chọn hết

  1. Private Function generateCode() As String
  2.    Dim iCount As Integer
  3.    Dim sQuery As String, Scode As String
  4.    'khoi tao gia tri ban dau cho count va sCode
  5.    iCount = 1: Scode = "pc" + Format(iCount, "0000") 'pc0001
  6.    'kiem tra chung nao ma tao dc khong ton tai thi tra ve gia tri nay
  7.    While mdlMain.kiemtratrung("PHIEU", "SoPhieu", Scode)
  8.       iCount = iCount + 1: Scode = "pc" + Format(iCount, "0000") 'pc0003
  9.    Wend
  10.    generateCode = Scode
  11. End Function

không thấy chỗ nào gán
txtma=?
e ko biết nên hỏi,mong a trả lời,còn như anh boy1234 thì e làm được rồi
Mr Hung

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1323
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 71 time
Liên hệ:

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi vietteiv » T.Tư 23/09/2009 12:14 am

Mã: Chọn hết

  1. textbox1.text=generateCode

VisualBassic
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 77
Ngày tham gia: T.Năm 20/08/2009 8:52 am

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi VisualBassic » T.Tư 23/09/2009 7:41 am

Vậy lở hỏi rồi,cho em hỏi thêm một ý nửa nhé !.
Giả sử ta nhập mã PT0001,PT0002,PT0003. Nếu ta xóa PT0003. Thì khi thêm vào Record mới thì là PT0004, PT0005,... (nghĩa là PT0003 không tồn tại, nhưng trước đó đã có trong CSDL thì không thể có nữa).

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4760
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi truongphu » T.Tư 23/09/2009 8:06 am

Tặng các bạn Project Trùng Mã

Mã: Chọn hết

  1. Dim Con As Object
  2. Dim Rec As Object
  3.  
  4. Private Sub Form_Load()
  5. Set Con = CreateObject("ADODB.Connection")
  6. Set Rec = CreateObject("ADODB.Recordset")
  7. Con.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\db1.mdb"
  8. Rec.CursorLocation = 3
  9. Rec.Open "Select * From Table1", Con, 3, 3
  10. Set DataGrid1.DataSource = Rec
  11. End Sub
  12.  
  13. Private Function generateCode() As String
  14.    Dim iCount As Integer, Scode As String
  15.    'khoi tao gia tri ban dau cho count va sCode
  16.    iCount = 1: Scode = "PC" & Format(iCount, "00000")
  17.    'kiem tra chung nao ma tao dc khong ton tai thi tra ve gia tri nay
  18.    While TrungMa("SBD", Scode)
  19.       iCount = iCount + 1: Scode = "PC" & Format(iCount, "00000")
  20.    Wend
  21.    generateCode = Scode
  22. End Function
  23.  
  24. Public Function TrungMa(Field As String, Value As String) As Boolean
  25.     Rec.movefirst
  26.     Rec.Find "" & Field & " = '" & Value & "'" & ""
  27.     If Rec.EOF Then TrungMa = False Else TrungMa = True
  28. End Function
  29.  
  30. Private Sub Command1_Click()
  31. Text1 = generateCode
  32. End Sub
  33.  
  34. Private Sub Command2_Click()
  35. If Text1 = "" Then Exit Sub
  36. Rec.AddNew
  37. Rec!SBD = Text1
  38. Rec.Update
  39. Text1 = ""
  40. End Sub
  41.  
  42. Private Sub Command3_Click()
  43. Rec.Delete
  44. End Sub
  45.  
Tập tin đính kèm
KT Trùng Mã.rar
(9.03 KiB) Đã tải 532 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
skatervn
Thành viên danh dự
Thành viên danh dự
Bài viết: 181
Ngày tham gia: T.Tư 16/04/2008 9:44 am
Đến từ: Đà Nẵng
Been thanked: 2 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi skatervn » T.Tư 23/09/2009 4:14 pm

Hi bạn đọc lại code của mình tí nữa là hiểu mà(hoặc như bác Phú ví dụ cụ thể luôn rồi đó). Ah sẵn đây thank bác Phú vì học hỏi thêm đc một số code trong phần kiểm tra trùng của bác nha.
Code của bạn boy1234 là thêm lần lượt PT1,Pt2,..Ptn và cứ tịnh tiến như thế
Còn của mình là có thể chêm lỗ nếu có phát sinh. Ví như mất pt3, thì khi thêm mới nó sẽ mang giá trị là pt3.
Chúc bạn thành công!

duongit

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi duongit » T.Năm 15/12/2011 12:39 am

bác phú cho em hỏi cái cho Rec.Open "Select * From Table1", Con, 3, 3
trong đó 2 số 3, 3 la cái gi vậy

duongit

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi duongit » T.Năm 15/12/2011 4:20 pm

cái của bác phú mắc một nỗi rùi là khi trong CSDL chua chó dữ liệu thi nó sẽ báo lỗi ngay

Hình đại diện của người dùng
NXK1138
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 88
Ngày tham gia: T.Sáu 19/03/2010 1:29 pm
Has thanked: 2 time
Been thanked: 2 time

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi NXK1138 » T.Hai 19/12/2011 3:41 pm

Theo mình thì ý tưởng của việc này như sau:
Lấy tổng số mã phụ tùng trong bảng CSDL cộng thêm 1 đơn vị.
SoPT=Rec.RecordCount +1
Sau đó dùng For i = SoPT To 1 Step -1 gán mã phụ tùng MaPT="PT" & Format(SoPT, "00000") rồi kiểm tra ngược lại xem đã có trong CSDL chưa?
Nếu chưa có thì dùng mã đó.Còn không, khi i=1 tức là các mã đều có trong CSDL rồi thì tăng thêm một đơn vị nữa bằng cách lấy MaPT="PT" & Format(SoPT+1, "00000")

huandv
Bài viết: 1
Ngày tham gia: T.Sáu 04/05/2018 11:24 pm

Re: Thêm mã tự động tăng dần

Gửi bàigửi bởi huandv » T.Sáu 04/05/2018 11:43 pm

Mình không phải chuyên tin, chỉ biết một chút ít về form access thôi, mình đang muốn lập mã phiếu tăng dần (dạng text), mã này sẽ tăng thêm 1 số so với bản ghi vừa nhập trước đó! Bạn nào cho mình xin đoạn lệnh được không?


Quay về “Visual Basic 6 và Visual Basic Script (VB & VBS)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách