09/10/2018, 17:56

Lỗi truy xuất đồng bộ ở ASP

Tôi có một website về Dịch vụ Tuyển dụng trên mạng, bây giờ nó có một lỗi này:

Khi Công ty A đăng ký xong, thì lúc nhập vào công việc X cần tuyển dụng, thì tên công việc đó lại thuộc về một công ty B khác, tương tự một công việc Y của công ty C, lại thuộc về công ty A.

Trường hợp này rất ít xảy ra, tôi nghĩ là do cả ba người cùng đăng ký một lúc, rồi lỗi xảy ra.

Vậy tôi phải qiải quyết vấn đề này như thế nào?

Language: ASP
Database: Access

Xin cám ơn
White_Rose viết 20:05 ngày 09/10/2018
Access là DBMS không multi vì vậy lỗi bạn nói là do code của bạn thôi.
ptran viết 19:57 ngày 09/10/2018
Bài viết được gửi bởi cutidatinh
Tôi có một website về Dịch vụ Tuyển dụng trên mạng, bây giờ nó có một lỗi này:

Khi Công ty A đăng ký xong, thì lúc nhập vào công việc X cần tuyển dụng, thì tên công việc đó lại thuộc về một công ty B khác, tương tự một công việc Y của công ty C, lại thuộc về công ty A.

Trường hợp này rất ít xảy ra, tôi nghĩ là do cả ba người cùng đăng ký một lúc, rồi lỗi xảy ra.

Vậy tôi phải qiải quyết vấn đề này như thế nào?

Language: ASP
Database: Access

Xin cám ơn
cho dù cả ba cùng đăng ký một lúc thì cũng không thể xảy ra chuyện như vậy được vì ba công việc đó là 3 records khác nhau không phải là chuyê.n update 1 record cùng lúc . Coi lại các sql statements coi có phân` "where congtyID = " không, có thể lỗi tại đó .
cutidatinh viết 20:07 ngày 09/10/2018
Đúng là lỗi ở phần ID...

Xin cám ơn các cao thủ

Cho tôi hỏi thêm một tí:
Nếu trong trường hợp khác (ứng dụng web khác), tôi chỉ sử dụng một record và nếu nhiều người cùng đồng thời truy cập record đó thì tôi phải xử lý đồng bộ thế nào? Nên dùng database nào? Và giải thuật thế nào?

Xin cám ơn
White_Rose viết 20:01 ngày 09/10/2018
Bạn phải nói là bạn sử dụng DBMS nào.
Nếu là Access thì nói chung không cần quan tâm vì nó là single.
Nếu là các hệ multi thì nói chung, để đảm bào tính toàn vẹn, bạn nên tạo các transaction trước khi thay đổi (cẩn thận thì cả truy xuất).
Khanh Ngan viết 20:01 ngày 09/10/2018
tạo các transaction là như thế nào hả white_Rose
White_Rose viết 19:57 ngày 09/10/2018
Đơn giản, nó đảm bảo mọi công việc mà bạn thực hiện hoặc sẽ hoàn thành, hoặc không có cái nào hoàn thành.
Chi tiết bạn nên coi trong sách thì sẽ có giải thích rõ ràng (cả dài nữa )
ptran viết 20:12 ngày 09/10/2018
Có những trường hợp cần xem xét như sau:
A va B connection vô database để
A: update field1=valueA, field2=valueA+2 (không pha?i trên một lê.nh update sql statement).
B: update field1=valueB.
Nếu không làm đúng thì có thể xảy ra trường hợp lệnh 1 cu?a A, lê.nh 1 cu?a B, lệnh 2 của A -> kết quả sẽ là field1=valueB, field2=valueB+2 (PT nói đây là nói theo lý thuyết có trường hợp này xảy ra). Ðó là 1 table, nếu edit 2 tables thì phải dùng transaction để bảo đảm một table vì lý do gì đó không fails thì roll back lại tất cả các tables đã updated.

Còn mô.t trường hợp khác phải lưu ý trong ASP:
nếu nói đơn giản là chỉ có một record thôi . Có hai người log vô để update cùng lúc . Giả sử cả hai đều update field1.

dùng ASP. cả hai log vô, get data, close connection . Như vậy cả hai đều có record đó với field1 = "$12.00".
A muốn gia?m giá bán hàng xuống $1.00 để bán giá $11.00 thì vẫn còn có lời. Trong lúc A đang edit value (trong form). thì B submit lệnh sửa đổi giá bán xuống còn "$11.00". A submit lê.nh "update field2 - 1" -> kết qua? ra là bán gía $9.00.

Chú ý các trường hợp có thể xảy ra .
cutidatinh viết 19:57 ngày 09/10/2018
Cái này thì tôi biết về lý thuyết, chứ thực hành thì chưa xử lý bao giờ

Về lý thuyết , ta sẽ xử lý trường hợp này bằng miền găng (critical section). Tôi chỉ biết vậy thôi...hihi, các bạn có thể xem thêm trong sách HĐH Nâng cao của cô Trần Hạnh Nhi (ĐH Khoa học tự nhiên) để hiểu rõ hơn.

Rất mong các bạn chỉ giáo thêm
vanHienKid viết 19:56 ngày 09/10/2018
trong SQL server và trong VB đều có hàm hỗ trợ transaction hết đó bạn. Bạn có thể tham khảo bằng MSDN. Trong thương mại điện tử việc sử dụng chúng để đảm bảo cho việc trả tiền nhận hàng .
Bài liên quan
0