• HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX
  • HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    TrongLam > 10-05-20, 12:19 PM

    Chào anh chị thuthuataccess.com.
    Anh/Chị cho em hỏi cách hiển thị số tăng dần trong textbox (Số lớn nhất trong bảng +1). 
    Em tạo Form với 1 Textbox(txt_so), 1 nút THÊM MỚI(cmd_them), và subform load dữ liệu từ bảng tên là BIENBAN có trường SOBB 
    Em muốn textbox(txt_so) hiển thị mặc định là số lớn nhất của SOBB + 1 . Mỗi lần click nút THÊM(cmd_them) thì txt_so hiển thị tăng lên 1.

    Cám ơn !
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    dotrung > 10-05-20, 01:09 PM

    Trong diễn đàn rất nhiều bài tương tự rất hữu ích, bạn chịu khó tìm kiếm, không được thì gửi file để mọi người giúp đỡ nhé.
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    Xuân Thanh > 10-05-20, 02:53 PM

  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    tranthanhan1962 > 10-05-20, 11:39 PM

    Cách xử lý số  tăng dần + 1 trong field có nhiều cách, dùng count record +1, dùng DAO viết code, thậm chí cũng có thể dùng query. Nhưng thực ra chưa có cách nào là OK cả. Dùng recordcount khi bị xóa record thì xảy ra việc record cuối cùng có STT nhỏ hơn record trước đó và có thể bị trùng. Ví dụ có 100 record, record cuối cùng STT là 100, Khi xóa 10 record từ 21 đến 30 thì recordcount là 90. Khi tạo recocord mới sẽ có STT là 91 < STT record trước đó (100) và trùng với STT record trước đó (91), Viết code DAO phải dùng Do While, nếu số lượng record lớn sẽ rất chậm và nếu dùng query thì nặng khủng khiếp.
    Trường auto number rất hay, Tự tạo ra dãy thứ tự +1, số TT record tạo sau bao giờ cũng lơn hơn record tạo trước, nhược điểm của nó là khi bị xóa thì tạo ra những lổ hỏng không liên tục. Tuy vậy, tôi đã phát hiện ra một công thức. Bình thường, auutonumber sẽ đánh số liên tục cho dù xóa hết record khi tạo mới nó vẫn ra số kế tiếp. Nhưng nếu sau lệnh:
    DoCmd.RunSQL "DELETE Table.* FROM Table;"
    thêm lệnh reset cột STT:
    DoCmd.RunSQL " ALTER TABLE [Table] ALTER COLUMN [STT] COUNTER(1,1);"
    Thì khi tạo record mới nó sẽ đánh STT (autonumber)=1
    Như vậy, chỉ cần tạo một table tạm có file là autonumber. Khi cần tạo lại số thứ tự thì xóa table tạm + chạy lệnh reset, rồi dùng append query đưa dữ liệu cần thiết qua table tạm cho nó đánh lại STT sau đó dùng update query cập nhật lại field STT cho table chính Thì mấy lệnh RunSQL này xử lý cực nhanh và chính xác
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    Xuân Thanh > 11-05-20, 06:48 AM

    (10-05-20, 11:39 PM)tranthanhan1962 Đã viết: Cách xử lý số  tăng dần + 1 trong field có nhiều cách, dùng count record +1, dùng DAO viết code, thậm chí cũng có thể dùng query. Nhưng thực ra chưa có cách nào là OK cả. Dùng recordcount khi bị xóa record thì xảy ra việc record cuối cùng có STT nhỏ hơn record trước đó và có thể bị trùng. Ví dụ có 100 record, record cuối cùng STT là 100, Khi xóa 10 record từ 21 đến 30 thì recordcount là 90. Khi tạo recocord mới sẽ có STT là 91 < STT record trước đó (100) và trùng với STT record trước đó (91), Viết code DAO phải dùng Do While, nếu số lượng record lớn sẽ rất chậm và nếu dùng query thì nặng khủng khiếp.
    Trường auto number rất hay, Tự tạo ra dãy thứ tự +1, số TT record tạo sau bao giờ cũng lơn hơn record tạo trước, nhược điểm của nó là khi bị xóa thì tạo ra những lổ hỏng không liên tục. Tuy vậy, tôi đã phát hiện ra một công thức. Bình thường, auutonumber sẽ đánh số liên tục cho dù xóa hết record khi tạo mới nó vẫn ra số kế tiếp. Nhưng nếu sau lệnh:
    DoCmd.RunSQL "DELETE Table.* FROM Table;"
    thêm lệnh reset cột STT:
    DoCmd.RunSQL " ALTER TABLE [Table] ALTER COLUMN [STT] COUNTER(1,1);"
    Thì khi tạo record mới nó sẽ đánh STT (autonumber)=1
    Như vậy, chỉ cần tạo một table tạm có file là autonumber. Khi cần tạo lại số thứ tự thì xóa table tạm + chạy lệnh reset, rồi dùng append query đưa dữ liệu cần thiết qua table tạm cho nó đánh lại STT sau đó dùng update query cập nhật lại field STT cho table chính Thì mấy lệnh RunSQL này xử lý cực nhanh và chính xác

    Dù viết bằng cách nào đi nữa thì sau khi xóa record cũng phải resret lại cột STT(SoCT, SoPhieu....) Vì thế sao không reset ngay trên table chính mà phải qua table tạm để rồi phải thêm cái query Apppend nữa cho tốn time tranthanhan1962?
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    tranthanhan1962 > 11-05-20, 09:46 AM

    (11-05-20, 06:48 AM)Xuân Thanh Đã viết: Dù viết bằng cách nào đi nữa thì sau khi xóa record cũng phải resret lại cột STT(SoCT, SoPhieu....) Vì thế sao không reset ngay trên table chính mà phải qua table tạm để rồi phải thêm cái query Apppend nữa cho tốn time tranthanhan1962?
    Không tìm thấy lệnh reset autonumber khi table đang có dữ liệu, lệnh reset này chỉ trả lại việc đánh số từ 1 khi tạo dữ liệu mới nên phải dùng table tạm. Thưc ra còn cách khác. Dùng VBA delete field autonumber rồi tạo lại, nhưng giờ quên code, mà tìm lại demo chưa thấy
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    tranthanhan1962 > 11-05-20, 11:22 AM

    OK! Góp ý của bác Xuân Thanh tạo cho mình động lực moi móc dữ liệu mấy mươi năm về trước (nói vậy thôi chứ nó chỉ khoảng 16-17 năm gì đó). Minh nhớ nó có trong ổ 10 Gb mình đã không xử dụng từ lâu lắm, mở máy ra thì không gắn được (máy mình không có cổng ATA). Chạy qua nhà thằng em gắn vào mà vẫn sợ bị hỏng, không đọc được. May là nó vẫn OK. Chép hết dữ liệu qua ổ đang xử dụng, rồi vọc. Kết quả bất ngờ. Thì ra việc reset field autonumber lại vô cùng đơn giản. VBA của Em nó đây:
    Giả sử table có tên là TableA và field autonumber có tên là STT:
    Sub ResetSoThuTu()
    Dim XoafieldSQL, TaofieldSQL As String
    XoafieldSQL = "ALTER TABLE TableA DROP COLUMN STT;"
    TaofieldSQL = "Alter Table TableA Add COLUMN STT AutoIncrement"
    CurrentDb.Execute XoafieldSQL
    CurrentDb.Execute TaofieldSQL
    End Sub

    Vậy là sau khi xóa record chỉ cần chạy lệnh này thì field auutonumber lập tức reset liên tục lại ngay  005 , lúc đầu mình cũng nhớ mang máng cái SQL này nhưng lại dung từ khóa field thay gì column. Đâu có nhớ đã sang access mà nó còn dùng từ khóa column như exel  004 , thật là lộn xộn.
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    Xuân Thanh > 11-05-20, 11:51 AM

    Đã dùng Alter thì phải dùng Column rồi. Câu lệnh của T_SQL mà
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    yamakashi2003 > 15-10-20, 06:46 PM

    (11-05-20, 11:22 AM)tranthanhan1962 Đã viết: OK! Góp ý của bác Xuân Thanh tạo cho mình động lực moi móc dữ liệu mấy mươi năm về trước (nói vậy thôi chứ nó chỉ khoảng 16-17 năm gì đó). Minh nhớ nó có trong ổ 10 Gb mình đã không xử dụng từ lâu lắm, mở máy ra thì không gắn được (máy mình không có cổng ATA). Chạy qua nhà thằng em gắn vào mà vẫn sợ bị hỏng, không đọc được. May là nó vẫn OK. Chép hết dữ liệu qua ổ đang xử dụng, rồi vọc. Kết quả bất ngờ. Thì ra việc reset field autonumber lại vô cùng đơn giản. VBA của Em nó đây:
    Giả sử table có tên là TableA và field autonumber có tên là STT:
    Sub ResetSoThuTu()
    Dim XoafieldSQL, TaofieldSQL As String
    XoafieldSQL = "ALTER TABLE TableA DROP COLUMN STT;"
    TaofieldSQL = "Alter Table TableA Add COLUMN STT AutoIncrement"
    CurrentDb.Execute XoafieldSQL
    CurrentDb.Execute TaofieldSQL
    End Sub

    Vậy là sau khi xóa record chỉ cần chạy lệnh này thì field auutonumber lập tức reset liên tục lại ngay  005 , lúc đầu mình cũng nhớ mang máng cái SQL này nhưng lại dung từ khóa field thay gì column. Đâu có nhớ đã sang access mà nó còn dùng từ khóa column như exel  004 , thật là lộn xộn.
    Bac ơi cái câu lệnh này nếu mà để STT là khóa chính thì nó báo lỗi và không cho xóa ạ, liệu có cách nào khác ngoài việc bỏ STT là khóa chính không ạ
  • RE: HIỂN THỊ SỐ TĂNG DẦN TRONG TEXTBOX

    tranthanhan1962 > 15-10-20, 09:33 PM

    (15-10-20, 06:46 PM)yamakashi2003 Đã viết: Bac ơi cái câu lệnh này nếu mà để STT là khóa chính thì nó báo lỗi và không cho xóa ạ, liệu có cách nào khác ngoài việc bỏ STT là khóa chính không ạ
    Cũng vẫn thế! Sử dụng câu lệnh SQL. Thứ tự: 1 gỡ bỏ khóa chính, 2/reset field autonumber, 3/ tạo lại khóa chính cho field autonumber
    Câu lệnh gở bỏ khóa chính:
         "ALTER TABLE TableA DROP CONSTRAINT PrimaryKey"
    Câu lệnh tạo lại khóa chính
         "Alter Table TableA Add Constraint STT Primary Key(STT)"