• Cần xin Demo như hướng dẫn trong bài báo!
  • Cần xin Demo như hướng dẫn trong bài báo!

    nhphuqui > 21-09-15, 09:59 PM

    Lần trước mình có lập topic để hỏi về chủ đề khôi phục record đã xóa nhưng có thể do văn phong của mình hơi tệ nên 1 số anh em không hiểu, mình tìm được 1 bài báo có hướng dẫn vấn đề mình mong muốn. Nên mình mong anh em có thể xem hướng dẫn trong bài báo làm cái Demo giúp mình. Cảm ơn mọi người!: 
    "Tạo ra một table “thùng rác”, đặt tên kiểu như tblRecycle chẳng hạn, với các Field tương tự như table chứa dữ liệu cần xoá của bạn và thêm các Field chứa một vài thông tin phụ khác phục vụ cho việc phục hồi và tìm kiếm, ví dụ như ngày giờ xoá (Kiểu datetime, giá trị default Value = Now()), vị trí cũ trong bảng dữ liệu... Khi xảy ra sự kiện xoá Record, bạn cần viết code chặn sự kiện Form_Delete và viết đoạn code có chứa câu lệnh truy vấn Append để update các thông tin của Record sẽ bị xoá vào bảng tblRecycle rồi mới cho phép sự kiện Form_Delete tiếp tục tiến hành. Như vậy với động tác này khi người dung nhấn nút Delete để xoá Record, các dữ liệu sẽ được chuyển vào lưu tại tblRecycle để lưu trữ như Recycle Bin của Windows. Khi muốn phục hồi lại Record đã xoá này, bạn cần thiết kế Form, ví dụ như frmRecycle, lấy dữ liệu nguồn từ tblRecycle và thông qua một vài truy vấn cho phép tìm nhanh chóng Record cần được phục hồi. Khi người dùng cần phục hồi Record, họ sẽ nhấn vào một nút được bạn thiết kế sẵn. Nút này sẽ thực hiện đoạn code đọc thông tin từ Record được chọn để phục hồi và lại thực hiện lệnh Append ngược lại bảng dữ liệu của bạn để phục hồi dữ liệu cho bạn vào Bảng dữ liệu chính. Để đảm bảo đúng thứ tự của các Record sau động tác xoá-lưu Recycle-phục hồi như chưa từng xảy ra động tác xoá, bạn cần thiết kế thêm một Field đại khái như Số thứ tự (AutoNumber hoặc tương tự). Mỗi một Record khi được nhập vào sẽ được tự động gán một số thứ tự tăng dần. Khi xoá Record và chuyển vào Recycebin, Field Số thứ tự này cũng sẽ được lưu trữ để khi phục hồi Fỉeld này sẽ được sắp xếp lại về đúng vị trí của nó ban đầu." Link: http://vietbao.vn/Vi-tinh-Vien-thong/Lay...53020/228/
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    maidinhdan > 21-09-15, 10:30 PM

    (21-09-15, 09:59 PM)nhphuqui Đã viết: Lần trước mình có lập topic để hỏi về chủ đề khôi phục record đã xóa nhưng có thể do văn phong của mình hơi tệ nên 1 số anh em không hiểu, mình tìm được 1 bài báo có hướng dẫn vấn đề mình mong muốn. Nên mình mong anh em có thể xem hướng dẫn trong bài báo làm cái Demo giúp mình.....

    Demo Phân quyền đăng nhập + Ghi lại lịch sử nó cũng tương tự cái ý này thôi, chỉ khác cái tên gọi mà bạn không suy luận ra thì thật là kho.

    Vì thế, bạn gửi file bạn lên đây đi, thiết kế sẳn các nút lệnh rồi ghi chú lên Topic này ( ghi lại table nào muốn xóa, muốn lưu trước khi xóa...), mình viết code cho rồi post demo theo như bài bạn luôn.

    Thân mến!
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    tranthanhan1962 > 22-09-15, 12:57 AM

    (21-09-15, 09:59 PM)nhphuqui Đã viết: Lần trước mình có lập topic để hỏi về chủ đề khôi phục record đã xóa nhưng có thể do văn phong của mình hơi tệ nên 1 số anh em không hiểu, mình tìm được 1 bài báo có hướng dẫn vấn đề mình mong muốn. Nên mình mong anh em có thể xem hướng dẫn trong bài báo làm cái Demo giúp mình.....

    Hình như mình có trả lời cho bạn câu hỏi này rồi nhưng nằm ở đâu thì mình không nhớ. Thôi đành post lại vậy.
    Để xử lý việc này có 2 cách: Giả sử bạn có 1 table là tableA và hai form là formA và formThungRac

    Cách thứ 1: Không cần tạo thêm table. 
         - Tạo thêm 1 field trên tableA đặt tên là ThoiGianXoa. Field ThoiGianXoa có data type là Date/Time, mặc định là Null
         - Record souce của formA là select query của tableA với điều kiện giá trị của field ThoiGianXoa = is null.
         - Trên formA thiết đặt properties là AllowAdditions = No, có nút xóa nhưng code nút này không phải là xóa mà là set giá trị cho field ThoiGianXoa của record = Now(). Tất nhiên khi field ThoiGianXoa của record = Now() – tức là not null nó sẽ không còn được hiển thị trên formA
         - Record souce của formThungRac là select query của tableA với điều kiện giá trị của field ThoiGianXoa = is not null. Vì vậy form này chỉ show những record đã bị xóa trên formA.
         - Trên formThungRac có 2 nút PhucHoi và Xoa. Nút PhucHoi có nhiệm vụ set lại giá trị của field ThoiGianXoa của record Null và ẩn nó đi, còn nút Xoa ở đây sử dụng lệnh xóa giải quyết nó luôn.
        * Chú ý khi xử lý công việc khác nhớ loại trừ các record field ThoiGianXoa = is not null (vì các record này đã bị xóa).

    Cách thứ 2: Tạo thêm một table tên là tableThungRac. 
         formA có RecordSource là tableA, formThungRac có RecordSource tableThungRac
         - Tạo các SQL append query. Giả sử SQL_X sẽ append record có field ThoiGianXoa = is not null của tableA vào tableThungRac và SQL_PH sẽ append record có field ThoiGianXoa = is null của tableThungRac vào tableA.
         - Lệnh của nút Xoa trên formA tuần tự như sau: set giá trị field ThoiGianXoa của record = Now() – chạy DoCmd.RunSQL SQL_X - DoCmd.RunCommand acCmdDeleteRecord để xóa record hiện hành.
         - Lệnh của nút PhucHoi trên formThungRac tuần tự như sau: set giá trị field ThoiGianXoa của record = Null – chạy DoCmd.RunSQL SQL_PH – DoCmd.RunCommand acCmdDeleteRecord để xóa record hiện hành. Còn nút xóa thì del luôn record hiện hành mà không quan tâm đến lệnh khác.
        Vì không bạn không có database post lên nên mình chỉ có thể hỗ trợ bấy nhiêu thôi.

    Bổ sung cách thứ 3:
        Trước khi xóa xử lý Msgbox hỏi kỹ, buộc người xử lý phải nghiêm túc suy nghĩ trước khi xóa, nếu có hành động sai lầm thì ráng chịu. Còn nếu user nào không  được quyền xóa thì khóa luôn. AllowDeletions = False.
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    bvchauthanh > 22-09-15, 09:02 AM

    (22-09-15, 12:57 AM)tranthanhan1962 Đã viết:
    (21-09-15, 09:59 PM)nhphuqui Đã viết: Lần trước mình có lập topic để hỏi về chủ đề khôi phục record đã xóa nhưng có thể do văn phong của mình hơi tệ nên 1 số anh em không hiểu, mình tìm được 1 bài báo có hướng dẫn vấn đề mình mong muốn. Nên mình mong anh em có thể xem hướng dẫn trong bài báo làm cái Demo giúp mình.....

    Hình như mình có trả lời cho bạn câu hỏi này rồi nhưng nằm ở đâu thì mình không nhớ. Thôi đành post lại vậy.
    Để xử lý việc này có 2 cách: Giả sử bạn có 1 table là tableA và hai form là formA và formThungRac

    Cách thứ 1: Không cần tạo thêm table. 
         - Tạo thêm 1 field trên tableA đặt tên là ThoiGianXoa. Field ThoiGianXoa có data type là Date/Time, mặc định là Null
         - Record souce của formA là select query của tableA với điều kiện giá trị của field ThoiGianXoa = is null.
         - Trên formA thiết đặt properties là AllowAdditions = No, có nút xóa nhưng code nút này không phải là xóa mà là set giá trị cho field ThoiGianXoa của record = Now(). Tất nhiên khi field ThoiGianXoa của record = Now() – tức là not null nó sẽ không còn được hiển thị trên formA
         - Record souce của formThungRac là select query của tableA với điều kiện giá trị của field ThoiGianXoa = is not null. Vì vậy form này chỉ show những record đã bị xóa trên formA.
         - Trên formThungRac có 2 nút PhucHoi và Xoa. Nút PhucHoi có nhiệm vụ set lại giá trị của field ThoiGianXoa của record Null và ẩn nó đi, còn nút Xoa ở đây sử dụng lệnh xóa giải quyết nó luôn.
        * Chú ý khi xử lý công việc khác nhớ loại trừ các record field ThoiGianXoa = is not null (vì các record này đã bị xóa).

    Cách thứ 2: Tạo thêm một table tên là tableThungRac. 
         formA có RecordSource là tableA, formThungRac có RecordSource tableThungRac
         - Tạo các SQL append query. Giả sử SQL_X sẽ append record có field ThoiGianXoa = is not null của tableA vào tableThungRac và SQL_PH sẽ append record có field ThoiGianXoa = is null của tableThungRac vào tableA.
         - Lệnh của nút Xoa trên formA tuần tự như sau: set giá trị field ThoiGianXoa của record = Now() – chạy DoCmd.RunSQL SQL_X - DoCmd.RunCommand acCmdDeleteRecord để xóa record hiện hành.
         - Lệnh của nút PhucHoi trên formThungRac tuần tự như sau: set giá trị field ThoiGianXoa của record = Null – chạy DoCmd.RunSQL SQL_PH – DoCmd.RunCommand acCmdDeleteRecord để xóa record hiện hành. Còn nút xóa thì del luôn record hiện hành mà không quan tâm đến lệnh khác.
        Vì không bạn không có database post lên nên mình chỉ có thể hỗ trợ bấy nhiêu thôi.

    Bổ sung cách thứ 3:
        Trước khi xóa xử lý Msgbox hỏi kỹ, buộc người xử lý phải nghiêm túc suy nghĩ trước khi xóa, nếu có hành động sai lầm thì ráng chịu. Còn nếu user nào không  được quyền xóa thì khóa luôn. AllowDeletions = False.

    Theo mình thì cách 1 nhanh gọn và hiệu quả (không cần tạo thêm table khác, chỉnh query một chút là xong, mình cũng sài cách này cho một số ứng dụng của mình, thấy cũng rất hiệu quả). Thanks!
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    tranthanhan1962 > 22-09-15, 09:26 AM

    (22-09-15, 09:02 AM)bvchauthanh Đã viết: Theo mình thì cách 1 nhanh gọn và hiệu quả (không cần tạo thêm table khác, chỉnh query một chút là xong, mình cũng sài cách này cho một số ứng dụng của mình, thấy cũng rất hiệu quả). Thanks!

    Cách nào cũng có cái hay riêng của nó:
    - Các thứ 1 đơn giản, nhanh gọn. Nhưng phải luôn luôn ghi nhớ "loại trừ các record đã bị xóa" mỗi khi xử lý
    - Cách thứ 2 phức tạp, phải tạo thêm table. Nhưng khỏe ở chổ "table nào ra table đó".
    Dù gì thì hai cách này cũng phải kết hợp với phân quyền để xử lý FormThungRac. Vì vậy mình sử dụng cách 3 phối hợp thêm một chút. Nhân viên nhập dữ liệu có quyền xóa trước khi lưu. Nhưng khi đã lưu thì mất quyền xóa. Quyền này được giao cho cán bộ cao cấp hơn. Tất nhiên lưu dữ liệu nhập sai thì sẽ bị rầy. Bị rầy vài lần sẽ bỏ tật ẩu. Còn trong trường hợp đặc biệt thì mấy khi xóa dữ liệu chính xác, Vì nếu điều chỉnh dữ liệu bằng cách xóa thì một năm nhiều lắm cũng chỉ có vài trường hợp.
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    levanchon1801 > 22-09-15, 12:24 PM

    Mình có góp ý nhỏ: Nếu chọn cách 1 thì nên lưu ý, các khóa chính đã xóa thì không thể tạo mới mà phải khôi phục dữ liệu đã xóa
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    nhphuqui > 22-09-15, 05:24 PM

    Đây là mẫu chương trình của mình, mọi người làm trực tiếp lên file luôn:https://drive.google.com/file/d/0BwC5fm1...sp=sharing
  • RE: Cần xin Demo như hướng dẫn trong bài báo!

    tranthanhan1962 > 22-09-15, 09:58 PM

    (22-09-15, 05:24 PM)nhphuqui Đã viết: Đây là mẫu chương trình của mình, mọi người làm trực tiếp lên file luôn:https://drive.google.com/file/d/0BwC5fm1...sp=sharing
    Bạn nên nghiên cứu lại cơ sở dữ liệu.
    1/Phân tích lại cơ sở dữ liệu hợp lý hơn. Tạo các primary key cụ thể hợp lý tại bảng relationships. CSDL của bạn post lên tự thân query QuanLiViPham_QXemDSViPham đã không cho sửa xóa thì viết code như thế nào để sửa, xóa. Các primary key của bạn toàn là autonumber, quan hệ không hợp lý có cái là 1 - 1 chứ không phải 1 - nhiều mà cũng không thể tạo được quan hệ.
    2/Có những table có thể sử dụng giá trị field chính để làm primary key thì không cần tạo các primary key bằng ID auto number. Ví dụ table Loai_Vi_Pham (field LoaiViPham)
    3/Khi bạn nhờ hỗ trợ bạn phải tạo điều kiện dễ dàng cho người giúp bạn. CSDL của bạn ẩn hết các objet là bắt người giúp bạn phải xử lý thao tác không cần thiết trong qua trình giúp bạn. Điều này có thể gây ra sự phản cảm