Trong access không thể đổi 1 trường đã có dữ liệu thành kiểu AutoNumberLập trường khác rồi đổi lại là được.
Update xong không chuyển về kiểu AutoNumber được.Bạn chuyển kiểu dữ liệu về dạng số nguyên long/int..., rồi UPDATE [Bảng 1] SET [Mã số]=[Mã số]+51
Vì người mở chủ đề không yêu cầu bắt buộc phải là "Auto number" nên tôi gợi ý thế thôi. Vấn đề này tôi từng giải quyết nên cũng chả lạ gì.Trong access không thể đổi 1 trường đã có dữ liệu thành kiểu AutoNumber
Update xong không chuyển về kiểu AutoNumber được.
Kiểu Number thông thường không tự tăng
Theo như hình chụp thì bảng đã có dữ liệu chính thức 13 dòng.Mình dùng bản 2019 ạ
Nếu không phải autonumber từ đầu thì có thể sửa tay, hoặc update bằng SQL mà không cần đổi kiểu long/ integerVì người mở chủ đề không yêu cầu bắt buộc phải là "Auto number" nên tôi gợi ý thế thôi. Vấn đề này tôi từng giải quyết nên cũng chả lạ gì.
CREATE TABLE TableThatIncrements
(
Id AUTOINCREMENT(1001,1)
)
Tự trong Table View thì không được. Nhưng có thể đổi một trường mới qua SQL ViewTheo như hình chụp thì bảng đã có dữ liệu chính thức 13 dòng.
Nhập dữ liệu giả thật đơn giản cho nhanh, chỉ để lấy ID đến 51.
Copy 13 dòng
click chọn dòng {New) và paste
Xóa 51 dòng trên
Cách này nhanh và dễ, đồng thời sử dụng được bảng cũ.
Nếu số dòng dữ liệu ít hơn 52 (giống như trên hình) thì câu UPDATE của tôi vẫn chạy đúng nhé. Còn trong trường hợp khác thì dù sắp xếp thì chạy lệnh UPDATE tương tự như thế vẫn có thể lỗi tè le.Muốn dùng code
[mã số] = [mã số] + 51
thì phải sắp xếp lớn xuống nhỏ
Nếu không sẽ bị lỗi trùng khóa.
Dù trùng hay không trùng thì cách này không dùng được, vì update table xong không chuyển thành autonumber được.Muốn dùng code
[mã số] = [mã số] + 51
thì phải sắp xếp lớn xuống nhỏ
Nếu không sẽ bị lỗi trùng khóa.
Cảm giác có gì đó bất thường với ý kiến trên nên tôi đã thực nghiệm và phát hiện ra là... (các anh/chị cứ thử sẽ rõ)- Nếu trên 51 dòng: Copy 51 dòng đầu paste xuống dưới rồi xóa 51 dòng đầu.
Dùng lại bảng này mà không cần tạo bảng mới, không cần đổi kiểu number, không cần chuyển dữ liệu qua, không cần đổi tên trường, không cần xóa bảng cũ, ...
Tôi luôn luôn thực nghiệm trước khi viết bài. Kể cả kết luận trường number đã có dữ liệu không chuyển thành autonumber được (bài 7) cũng là đã thực nghiệm kỹ. Tôi tự hào là người luôn thực nghiệm trước khi trả lời bất kỳ việc gì, dù nhỏ như là 1 công thức SUM.Cảm giác có gì đó bất thường với ý kiến trên nên tôi đã thực nghiệm và phát hiện ra là... (các anh/chị cứ thử sẽ rõ)
Nếu chưa chắc chắn, tôi cũng phải kiểm nghiệm ý tưởng trước khi comment nhưng tôi chả có cảm giác tự hào gì với những kiến thức phổ thông trên mạng.Tôi luôn luôn thực nghiệm trước khi viết bài. Kể cả kết luận trường number đã có dữ liệu không chuyển thành autonumber được (bài 7) cũng là đã thực nghiệm kỹ. Tôi tự hào là người luôn thực nghiệm trước khi trả lời bất kỳ việc gì, dù nhỏ như là 1 công thức SUM.
Theo yêu cầu giả định (ID bắt đầu từ 11), đáng ra kết quả sau thủ thuật phải là 11-b01, 12-b02...34-b24 chứ sao lại là 11-b11, 12-b12...34-b10 như trong hình minh họa kết quả của ptm0412 được nhỉ?Chẳng hạn tôi thực nghiệm cho mong muốn ID bắt đầu từ 11.
Trường hợp dữ liệu có sẵn 24 dòng. Copy 10 dòng đầu và paste xuống dưới, sau đó xóa 10 dòng đầu:
View attachment 296285 ______View attachment 296286
Mục đích chuyển mã số của bạn là gì?Trong trường hợp này mình muốn đặt khóa chính bắt đầu đếm từ 52 thì làm thế nào vậy mọi người?
View attachment 296268View attachment 296270
Khóa chính mà có ý nghĩa gì đó thì là phản chuẩn (normalisation).Mục đích chuyển mã số của bạn là gì?
Khóa chính theo dạng "Auto number" dùng nhận dạng khác nhau của từng dòng và thứ tự nhập liệu, không nên dùng nó làm "Mã số" thực sự để nhận diện từng người
Rs.Fields.Append "AffectedRows", vbLong
Rs.Open: Rs.AddNew Array(0, 1), Array(Cnn.Execute("Select @@Identity")(0), AffectedRows)
Để tôi đối chiếu "niềm tự hào" của ptm0412 với kết quả mà theo thôi là hợp lý hơn với hình minh họa bên dưới. Sự hợp lý ở đây chính là thứ tự trước sau của các dòng dữ liệu vẫn tương tự như ban đầu, giúp cho người quản lý dữ liệu dễ dàng nắm bắt và cũng để đảm bảo những ràng buộc khi không thể tùy tiện phá vỡ thứ tự các dòng dữ liệu. Giải quyết theo hướng hợp lý này cũng không quá khó với nhiều anh chị ở đây.Vậy thì theo cách ở bài 16 copy ở trên paste xuống dưới ID vẫn bắt đầu bằng 11 nhưng dòng dữ liệu nhập vào đầu tiên hồi năm ngoái sẽ mang số 25 (như phát hiện của bài 17). Tôi không quan tâm vì yêu cầu chỉ nói về ID bắt đầu từ 52 chứ không nói gì về nguyên dòng dữ liệu đầu tiên phải mang số 52.
Và theo tôi thì nó mang số 52 hay 152 hay 1000 chả ảnh hưởng gì đến việc nhập liệu, ra báo cáo, ....
ALTER TABLE TableThatIncrements
ALTER COLUMN Id AUTOINCREMENT(52,1)
Nếu đọc kỹ sẽ thấy tôi tự hào vì cái gì. Không phải tự hào về kiến thức nhá.Để tôi đối chiếu "niềm tự hào" của ptm0412
Như ông chú nói "Tội tự hào là người luôn thực nghiệm ...". Thay vì dùng từ "thực nghiệm", tôi dùng từ "niềm tự hào" như là cách ví von những gì chú đã làm theo đúng tinh thần mà ông chú phát biểu.
Đọc lại dòng chữ đậm và nguyên bài 20. (nhắc lần 2, để không đọc hoặc đọc không hiểu, hoặc cố tình vặn vẹo). Tôi hết!Như ông chú nói "Tội tự hào là người luôn thực nghiệm ...". Ông chú thấy tự hào với việc mình làm nhưng thành quả của nó thì ông chú lại không có cảm xúc tương xứng là sao nhỉ? Nếu Messi phát biểu "Tôi tự hào vì thi đấu cùng đội tuyển tại Worldcup 2002 nhưng không tự hào vì chiếc cúp vô định (thành quả)" thì chú có thấy lời nói anh này có gì bất nhất không?
Theo tôi thì Access được ra lúc máy tính còn yếu. Mà máy yếu thì chạy CSDL LH thật chuẩn sẽ sặc gạch. Do đó phiên bản cũ của Access thường né chuẩn một chút bằng cách đặc chế một số luật mà CSDL LH ngày nay không thấy. Nhiều luật thấy rõ ràng rằng do ràng buộc với loại file ISAM, VSAM (random access), Sequential.Đọc lại dòng chữ đậm và nguyên bài 20. (nhắc lần 2, để không đọc hoặc đọc không hiểu, hoặc cố tình vặn vẹo). Tôi hết!
Một trường dữ liệu được chọn làm key mà chả có ý nghĩa về mặt dữ liệu? Với người biết cách dùng, nó không khác gì "vân tay" của dữ liệu và cho nhiều thông tin hơn là chỉ là một cái mã.- Trường autonumber chả có ý nghĩa gì về mặt dữ liệu (không chứa thông tin), nó cũng không hiện diện trên form nhập liệu, báo cáo. Người dùng cuối có khi còn không biết đến sự tồn tại của nó. Vậy thì dù nó là bao nhiêu cũng chẳng cần biết làm gì.
Trước khi tham gia cái chủ đề này, tôi cũng tưởng là như thế nhưng sau nhiều thử nghiệm thì tôi phát hiện ra là không phải. Với Autonumber chả có gì mất vĩnh viễn cả, một giá trị bị xóa đi dùng lại hoàn toàn bình thường, ít nhất là với Access 365. Và nếu dùng lại một giá trị Autonumber từng bị xóa thì sẽ xẩy ra một điều rất thú vị. Tôi đã thử nghiệm một lần nữa trước khi đưa ra ý kiến này và cũng đã thử vài ba lần trước đó vì không thể tin vào sự thật.- Nếu xóa 1 record mang số ID nào đó, thì số đó mất vĩnh viễn, những số ở dưới không đôn lên. Thì không còn tính liên tục để nhìn cho đẹp mắt.
Đúng vậy bác. Tôi cũng thường dùng cả 2 kiểu tạo khoá chính. Chỉ dùng cách tạo mã bằng việc kết hợp thông tin cho một số bảng dữ liệu có tính đặc trưng, còn lại các bảng dạng lưu record chi tiết (như chi tiết hoá đơn, chứng từ nhập xuất ...), số record lớn thì cứ dùng Autonumber làm khoá chính. Khỏi tốn code tạo mã, index, tìm kiếm khoá dạng số cũng nhanh...Trên thực tế, người ta hy sinh một bậc chuẩn để tăng tốc là chuyện thường tình. Nhưng khi làm chuyện đó người ta biết là mình có "hy sinh", chứ không hề nói là "làm vậy mới đúng".