Đánh giá chủ đề:
  • 3 Votes - 2.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Mong sửa giúp code thêm phiếu mới hay bị lỗi trùng lập nhiều người dùng
#1
Đoạn Code như sau:

Trích dẫn:Private Sub HDMOI_Click()
DoCmd.GoToRecord , , acNewRec
Dim CSDL As Database, TBL As Recordset
Set CSDL = CurrentDb
Set TBL = CSDL.OpenRecordset("T10 HDMAIN", dbOpenSnapshot)
If TBL.RecordCount <> 0 Then
TBL.MoveLast
MAQLHD = Format(Val(TBL!MAQLHD) + 1, "000000")
Else
MAQLHD = "000001"
End If
MADV = "A"
MANV = "A"
DoCmd.RunCommand acCmdSaveRecord
TBL.Close
CSDL.Close
MANV.SetFocus
MANV.Dropdown
End Sub

Khi nhiều người sử dụng click tạo phiếu mới vẫn hay bị lỗi trùng phiếu, mong hướng dẫn giúp!
Chân thành cám ơn!
Chữ ký của chihienphuco Xin chào! Mình là chihienphuco, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn
#2
Cho mình hỏi trong form hiện hành, record source có phải là table T10 HDMAIN, hay query trực tiếp from T10 HDMAIN không?
Nếu phải thì mình tính tiếp, không phải thì phải có hàm nào đó update số hóa đơn mới về bảng đó!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn chihienphuco
#3
(13-01-11, 06:00 PM)chihienphuco Đã viết: Đoạn Code như sau:

Trích dẫn:Private Sub HDMOI_Click()
DoCmd.GoToRecord , , acNewRec
Dim CSDL As Database, TBL As Recordset
Set CSDL = CurrentDb
Set TBL = CSDL.OpenRecordset("T10 HDMAIN", dbOpenSnapshot)
If TBL.RecordCount <> 0 Then
TBL.MoveLast
MAQLHD = Format(Val(TBL!MAQLHD) + 1, "000000")
Else
MAQLHD = "000001"
End If
MADV = "A"
MANV = "A"
DoCmd.RunCommand acCmdSaveRecord
TBL.Close
CSDL.Close
MANV.SetFocus
MANV.Dropdown
End Sub

Khi nhiều người sử dụng click tạo phiếu mới vẫn hay bị lỗi trùng phiếu, mong hướng dẫn giúp!
Chân thành cám ơn!

bạn lên đọc thêm bài của noname về cách tạo thêm hoá đơn theo dạng ngày + STT,trong diễn đàn này có.
bạn hãy áp dụng vào bài của bạn , mình nghĩ sẽ rất hay.
Chữ ký của cuongtuyetcz Hoàng hôn trên núi buồn ảm đạm
Thất huyền, Ánh sáng sao lung linh.
Cương thường,nét tạo người có sĩ
Ngôn trên đã tạo người hữu danh.
ღღღღღTài sản của cuongtuyetcz (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
(13-01-11, 07:48 PM)Noname Đã viết: Cho mình hỏi trong form hiện hành, record source có phải là table T10 HDMAIN, hay query trực tiếp from T10 HDMAIN không?
Nếu phải thì mình tính tiếp, không phải thì phải có hàm nào đó update số hóa đơn mới về bảng đó!

Form nhập mình dùng Query trực tiếp lấy từ bảng T10 HDMAIN và một số bảng cha liên quan, do đang xài chung nên nếu có thể huynh sửa trực tiếp trên code dùm, hoặc có giải pháp nào khác dùng trực tiếp để khắc phục lỗi này. Cám ơn huynh!
Chữ ký của chihienphuco Xin chào! Mình là chihienphuco, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn
#5
Vậy khi mình nhấn nút HDMOI, là trong bảng T10 HDMAIN đã xuất hiện số hóa đơn đó rồi?
vì mấy cái này phải test nhiều nhiều ở nhiều trường hợp, như khi mình click HDMOI, thì qua máy khác đang mở chương trình, mở bảng T10 HDMAIN, xem đã thấy số hóa đơn đó có chưa! Nếu chưa có thì mình phải làm sao cho ở máy ngang hàng nhận biết, Vì mình cũng chưa gặp trường hợp tương tự nên cũng mò vậy thôi!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn chihienphuco
#6
(13-01-11, 10:40 PM)Noname Đã viết: Vậy khi mình nhấn nút HDMOI, là trong bảng T10 HDMAIN đã xuất hiện số hóa đơn đó rồi?
vì mấy cái này phải test nhiều nhiều ở nhiều trường hợp, như khi mình click HDMOI, thì qua máy khác đang mở chương trình, mở bảng T10 HDMAIN, xem đã thấy số hóa đơn đó có chưa! Nếu chưa có thì mình phải làm sao cho ở máy ngang hàng nhận biết, Vì mình cũng chưa gặp trường hợp tương tự nên cũng mò vậy thôi!
Theo huynh gợi ý là lỗi ko load dữ liệu mới khi Form đã mở nên em thêm câu lệnh làm mới Me.requery
trước câu lệnh thêm phiếu mới. Và đang chạy thữ hi vọng sẻ không lỗi trùng phiếu nữa, có gì em liên hệ tiếp.
Chân thành cảm ơn huynh!
Chữ ký của chihienphuco Xin chào! Mình là chihienphuco, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn
#7
Có lẽ mình đã sai từ lúc thiết kế, chắc phải động tay chân đôi chút. Thật mệt mà....
hai2hai;240792 Đã viết:Bạn chọn trường ID là kiểu AutoNumber

Giả sử có 1 chứng từ có phần header như thế này:

ID (PK - AutoNumber)
TransNo (Unique Index)
TransRef
TransDate
.....

Hoặc bảng Inventory_Item bạn làm thế này:

ID (PK - AutoNumber)
ItemCode (Unique Index)
ItemName
ItemCategoryID (FK)
....

Tất cả các bảng quan hệ với nhau thông qua trường ID chứ không nên thông qua trường Code. Trong MS Access, ID nên để là AutoNumber và để hệ thống tự quản lý. Mình ko cần care đến trường đó làm gì. Dĩ nhiên, khi thao tác với bản ghi thì vẫn phải dùng tới trường đó để thao tác (edit, delete...)

Còn bạn muốn cái TransNo (Số hóa đơn tự động tăng) thì bạn viết cái hàm NextText() hoặc IncText() gì đó. Mình ko thể hướng dẫn tiếp cụ thể viết cái hàm đó như thế nào bạn ạ (ở trên forum này cũng có bài liên quan rồi đó)

Huynh noname xem dùm em cách này của huynh hai2hai có chính xác ko? để sửa một lần chạy ổn định. Cám ơn huynh!
Chữ ký của chihienphuco Xin chào! Mình là chihienphuco, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn
#8
(14-02-11, 04:21 PM)chihienphuco Đã viết: Có lẽ mình đã sai từ lúc thiết kế, chắc phải động tay chân đôi chút. Thật mệt mà....
hai2hai;240792 Đã viết:Bạn chọn trường ID là kiểu AutoNumber

Giả sử có 1 chứng từ có phần header như thế này:

ID (PK - AutoNumber)
TransNo (Unique Index)
TransRef
TransDate
.....

Hoặc bảng Inventory_Item bạn làm thế này:

ID (PK - AutoNumber)
ItemCode (Unique Index)
ItemName
ItemCategoryID (FK)
....

Tất cả các bảng quan hệ với nhau thông qua trường ID chứ không nên thông qua trường Code. Trong MS Access, ID nên để là AutoNumber và để hệ thống tự quản lý. Mình ko cần care đến trường đó làm gì. Dĩ nhiên, khi thao tác với bản ghi thì vẫn phải dùng tới trường đó để thao tác (edit, delete...)

Còn bạn muốn cái TransNo (Số hóa đơn tự động tăng) thì bạn viết cái hàm NextText() hoặc IncText() gì đó. Mình ko thể hướng dẫn tiếp cụ thể viết cái hàm đó như thế nào bạn ạ (ở trên forum này cũng có bài liên quan rồi đó)

Huynh noname xem dùm em cách này của huynh hai2hai có chính xác ko? để sửa một lần chạy ổn định. Cám ơn huynh!
Đó cũng là một cách! ID là autonumber thì độ ổn định không phải bàn. Nhưng khuyết điểm của kiểu dữ liệu này là không dùng lại được mà có thể có hiện tượng nhảy cóc theo số phát sinh mới nhất. Bạn cân nhắc xem mình có quan tâm tới giá trị số của chứng từ hay không, nếu có (quan tâm, tỉ như sẽ quay lại vài số trước đó thì buộc phải làm tay thôi, chứ không thể dùng autonumber)
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
Cám ơn huynh noname nhiều lắm!
Chúc huynh Valentine vui nhé!
Chữ ký của chihienphuco Xin chào! Mình là chihienphuco, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại. MinhnHang 6 299 29-11-16, 09:11 PM
Bài mới nhất: ongke0711
  Cần giúp đỡ chuyển số có thập phân ra chữ ledangvan 12 631 07-11-16, 03:56 PM
Bài mới nhất: maidinhdan
  [Hỏi] Viết code có điều kiện " lệnh Chạy tiếp khi đóng tbl cho sẵn" Trần Linh 3 139 21-10-16, 11:11 AM
Bài mới nhất: Minh Tiên
  Giải thích ý nghĩ của đoạn code feeling 3 193 06-10-16, 10:18 AM
Bài mới nhất: vulhu06
  Viết phần quyền sử dụng tt1212 9 491 01-10-16, 12:26 AM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ