• 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

Số Thứ Tự Trong Access

Nơi trao đổi về VBA (Visual Basic for Application), lập trình cho ứng dụng Microsoft Office, AutoCAD...

Moderator: tungblt

Pherotao
Thành viên chính thức
Thành viên chính thức
Posts: 18
Joined: Tue 29/12/2009 1:57 pm
Contact:

Số Thứ Tự Trong Access

Postby Pherotao » Tue 29/12/2009 2:40 pm

Xin các anh chị vui lòng cho tôi hỏi một vấn đề thuộc lĩnh vực Access :
* Tôi có 1 CSDL gồm 1 Table T_SoSach và 1 Form F_NhapoSach. Table T_SoSach gồm các trường sau: - MaSo, TenSo, TenKH, Ngay, Ghichu.
* Tôi muốn rằng: Khi nhập liệu thì sott (cụ thể là trường MaSo) sẽ tự động tăng dần tùy theo năm của trường Ngày (Year(ngay)).
* Cụ thể như sau:
+ nếu Ngay = 01/03/2009, thì MaSo là : "MaSo_Year_sott" --> MaSo20090001,
+ nếu Ngay = 06/09/2009, thì MaSo là : "MaSo_Year_sott" --> MaSo20090002,
... ... ...
+ nếu Ngay = 05/07/2005, thì MaSo là : "MaSo_Year_sott" --> MaSo20050001,
+ nếu Ngay = 15/09/2005, thì MaSo là : "MaSo_Year_sott" --> MaSo20050002,
... ... ...
* Tùy theo Year(Ngay) mà sott trong MaSo tính lại là "0001" (nếu chưa có số nào trong năm đó) hoặc là tăng dần lên theo thứ tự trong năm đó.
* Khi xóa MaSo nào thì MaSo đó sẽ không lặp lại nữa, trừ khi ta reset lại T_SoSach.
Xin Các Anh Chị vui lòng giúp đỡ. Tôi rất chân thành cảm ơn!



User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Số Thứ Tự Trong Access

Postby tungcan5diop » Tue 29/12/2009 3:46 pm

cái này cũng đơn giản mà bạn,trong forum cũng nói khá nhiều về cái này,bạn có thể Search hoặc theo mình thì làm như sau
mình ví dụ cái MaSo "MaSo_Year_sott"/MaSo20090001 sẽ là cố định bao nhiêu chữ số,ở đây mình cố định là 4 chữ số
mình sẽ tách phần Year ra bằng cách dùng hàm left(index,lengh).ví dụ:left(3,4)sẽ lấy đựoc cái Year/2009
mình so sánh cái Year vừa lấy được với cái Year hiện tại,nếu có thì mình chỉ việc tăng số thứ tự phía sau mà thôi(vấn đề tăng số chạy forum nói nhiều rồi)
ngược lại mình sẽ ghép cái mới(như cách quy định trên của bạn)bạn nên quy định số chạy là 8 hay 10 luôn đi cho dễ xử lý
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

User avatar
gtdcomputer
Thành viên danh dự
Thành viên danh dự
Posts: 1296
Joined: Fri 18/07/2008 12:08 pm
Location: Kiên Giang
Has thanked: 8 times
Been thanked: 117 times
Contact:

Re: Số Thứ Tự Trong Access

Postby gtdcomputer » Thu 31/12/2009 1:08 pm

Hàm left của bạn nói là sao. Index là sao??

Nếu mình nhớ không lầm thì hàm bạn nói là hàm
[vb]Mid(String, Index, Lenght)[/vb]
Nếu chuỗi mã số là cố định thì có thể làm thía này.
[vb]Year = Mid(Maso, 5, 4)[/vb]
Phải ý bạn thía không.
Rồi dùng hàm SQL để mò cái số thứ tự ra theo mình thì như thia này mới đúng
[vb]Rs.Open "Select * from Bang Where Maso Like 'Maso"& Year &"%' Order by Maso Desc"[/vb]
Rồi lấy thằng đầu ra mà ++ nó lên :D
Con người không quan tâm đến sự thật. Họ tin cái họ muốn, và về sau, cái đó sẽ trở thành sự thật

Pherotao
Thành viên chính thức
Thành viên chính thức
Posts: 18
Joined: Tue 29/12/2009 1:57 pm
Contact:

Re: Số Thứ Tự Trong Access

Postby Pherotao » Fri 01/01/2010 8:29 pm

Dĩ nhiên số thứ tự của MaSo tôi muốn là chạy từ 0001 --> 9999 rồi! Nhưng ý của tôi, các anh - chị nói chưa rõ lắm. Ý tôi là: Khi nhập trường Ngay(dd/mm/yyyy), thì số thứ tự sẽ theo Year(Ngay) mà tăng SoTT. Tức là tăng theo năm, để đảm bảo vấn đề khóa chính (vì tôi lấy MaSo làm khóa chính mà). Năm 2005 có thể có 512 mẩu tin, và MaSo cuối cùng tôi muốn là MaSo20050512. Hoặc Năm 2009 có 445 mẩu tin, thì MaSo cuối cùng là MaSo20090445. Nếu trong năm đó, có một mã số tôi xóa đi, thì sẽ không lặp lại MaSo đó nữa, trừ phi tôi Reset lại Table T_SoSach. Xin Các Anh - Chị nói cụ thể hơn vấn đề này. Thực sự tôi rất cần hoàn thành Form này. Xin Cảm ơn!

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Số Thứ Tự Trong Access

Postby truongphu » Sat 02/01/2010 10:29 am

Pherotao wrote:Tôi muốn rằng: Khi nhập liệu thì sott

Nghĩa là bạn chỉ muốn thao tác thần túy trên file Access và không cần code!
Pherotao wrote:(cụ thể là trường MaSo) sẽ tự động tăng dần tùy theo năm của trường Ngày

Nghĩa là field autonumber sẽ tăng theo đúng định dạng yêu cầu
Pherotao wrote:Cụ thể như sau:
+ nếu Ngay = 01/03/2009, thì MaSo là : "MaSo_Year_sott" --> MaSo20090001,
......
* Tùy theo Year(Ngay) mà sott trong MaSo tính lại là "0001" (nếu chưa có số nào trong năm đó) hoặc là tăng dần lên theo thứ tự trong năm đó.
* Khi xóa MaSo nào thì MaSo đó sẽ không lặp lại nữa, trừ khi ta reset lại T_SoSach.

1- Đã là autonumber thì bạn có xóa record thì số mới sinh cũng không lập lại
2- Về nguyên tắc, field autonumber không can thiệp được, tuy nhiên cũng có thể.
3- Tôi chưa biết cách ghép các trường, vd thêm mã số, thêm năm. Nhưng trên một field autonumber, bạn có thể định dạng thêm chút ít: ví dụ: 2009001, 2009002...
các số trên có 2 thành phần: thành phần không đổi là 2009 và thành phần increment 001...
vậy thì: Mở Table theo Design View, field autonumber bạn khai vào hàng Format là
"2009"000
chỉ thế thôi. Các vấn đề khác tôi tiếp tục nghiên cứu.
Lưu ý: Thay vì "2009"000, bạn cũng có thể ghi thêm, ví dụ: "ABC2009"000
o0o--truongphu--o0o

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

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Số Thứ Tự Trong Access

Postby truongphu » Sat 02/01/2010 4:00 pm

Phải nói rằng sử dụng Access mà không dùng code thì khó thật! Tất cả chỉ gói gọn trong 1 dòng của ô Format thuộc field Autonumber

Sau đây là tìm tòi thêm, dù ít liên quan đến câu hỏi của bạn Pherotao, tôi vẫn ghi lại làm tài liệu:

* Nhuộm màu cho cột ID (autonumber)
"2010"0000[Red]

* Bắt đầu từ số lớn hơn 1, ví dụ từ trên 500: sẽ có các số 501, 502...
\500

Hay không? :>
Mò (internet) tiếp.... :D
o0o--truongphu--o0o

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

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Số Thứ Tự Trong Access

Postby truongphu » Sun 03/01/2010 4:01 pm

Pherotao wrote:Tôi có 1 CSDL gồm 1 Table T_SoSach và 1 Form F_NhapoSach


He he, bây giờ đọc kỹ lại, hóa ra bạn có một Form và cần Code, vậy thì đơn giản hơn...
Chỉ là phép ghép chuỗi như tungcan5diop có nói:
Bạn có field MaSo, và yêu cầu có Text tự động theo định dạng MaSo-2009-0012

Ví dụ gõ MaSo là Sony004 thì bạn sẽ có kết quả tự động là Sony004-2009-0012
ta có 2 TextBox: Text1 để gõ mã số và Text2 là Mã số định dạng thu được

Ở Sub Text1_Change, bạn lệnh

Code: Select all

Text2 = Text1.Text & "-" & Year(Date) & "-" & Format(yy + 1, "0000")


Trong câu code trên, có biến yy + 1
Hãy định nghĩa biến yy là integer toàn cục (đầu trang): dim yy as integer, i As integer
Và tìm số tự động lớn nhất của field maSo:

Code: Select all

Private Sub Command1_Click()
For i = 1 To Rs.RecordCount
    If yy < CInt(Right(Rs.Fields("MaSo").Value, 4)) Then yy = CInt(Right(Rs.Fields("MaSoI").Value, 4)) Else yy = yy
    Rs.MoveNext
Next
End Sub


Lưu ý:
Pherotao wrote:Nếu trong năm đó, có một mã số tôi xóa đi, thì sẽ không lặp lại MaSo đó nữa

* Nếu xóa record nằm giữa, thì bảo đảm không lặp lại, Nếu Xóa record cuối thì lặp lại
* Bảo đảm không lặp lại, bạn phải thêm field Autonumber
* Và cách trên, số thứ tự sẽ tăng toàn bộ. Nếu chỉ tăng theo năm, bạn phải lọc năm ở Sub Text1_Change
.
o0o--truongphu--o0o

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

Pherotao
Thành viên chính thức
Thành viên chính thức
Posts: 18
Joined: Tue 29/12/2009 1:57 pm
Contact:

Re: Số Thứ Tự Trong Access

Postby Pherotao » Wed 06/01/2010 4:53 pm

Rất cảm ơn anh truongphu da quan tam trả lời! Nhưng em đã làm theo hướng khác và đạt theo ý mình muốn. Như đã nói, em có 1 Table T_SoSach và 1 Form F_NhapSoSach. Table T_SoSach gồm các trường sau: - MaSo, TenSo, TenKH, Ngay, Ghichu.
loay hoay làm MaSo hoài không được, em quyết định thêm trường SoTT vào T_SoSach. Lúc này em đặt khóa chính cho trường MaSo (thay vì SoTT). Sau đó, vào Form F_NhapSoSach (Lấy nguồn từ T_SoSach), em thêm 1 textbox có tên TestYear (Format dd/mm/yyyy). Trong thuộc tính control source của TestYear = [Ngay] (mặc định Date()). Rồi viết code cho sự kiện Ghi_Click():
Đoạn code này, em sẽ gửi sau. Nếu em có thắc mắc gì về Access, xin anh truongphu vui lòng chỉ thêm cho nhé! Rất vui được giao lưu cùng anh.

Pherotao
Thành viên chính thức
Thành viên chính thức
Posts: 18
Joined: Tue 29/12/2009 1:57 pm
Contact:

Re: Số Thứ Tự Trong Access

Postby Pherotao » Thu 14/01/2010 7:59 am

Private Sub Ghi_Click()
Dim so
so = DMax("SoTT", "T_SoSach", "Year(Ngay)=Year(TestYear)")
If Nz(so, 0) = 0 Then
SoTT = "00001"
Else
SoTT = Right("00000" & CLng(so) + 1, 5)
End If
Me.MSGDCG = VniToUni("MaSo") & Year(Ngay) & SoTT
End Sub

Đây là đoạn code, tôi gửi lên để thực hiện cho số thứ tự mà tôi đề cập. Mong anh chị em góp ý thêm!

lelongvn
Thành viên tích cực
Thành viên tích cực
Posts: 116
Joined: Wed 26/03/2008 11:15 pm

Re: Số Thứ Tự Trong Access

Postby lelongvn » Thu 11/03/2010 2:02 pm

DMax cái này ở đâu ra thế bạn và nó có ý nghĩa ntn?

haquocquan
Thành viên chính thức
Thành viên chính thức
Posts: 12
Joined: Thu 26/11/2009 10:53 pm

Re: Số Thứ Tự Trong Access

Postby haquocquan » Wed 24/03/2010 10:25 pm

Pherotao wrote:Private Sub Ghi_Click()
Dim so
so = DMax("SoTT", "T_SoSach", "Year(Ngay)=Year(TestYear)")
If Nz(so, 0) = 0 Then
SoTT = "00001"
Else
SoTT = Right("00000" & CLng(so) + 1, 5)
End If
Me.MSGDCG = VniToUni("MaSo") & Year(Ngay) & SoTT
End Sub

Đây là đoạn code, tôi gửi lên để thực hiện cho số thứ tự mà tôi đề cập. Mong anh chị em góp ý thêm!

Quá ổn.


Return to “Visual Basic for Application (VBA)”

Who is online

Users browsing this forum: No registered users and 1 guest