-
xin hỗ trợ bằng Thủ thuật VBA
Trần Linh > 12-07-16, 01:26 AM
Xin chào anh/chị, em mới nghiên cứu xin nhờ hỗ trợ
Bài toán như sau: có table link [datal] - file thay đổi hàng ngày ,từ datal thỏa mãn điều kiện lọc ban đầu bằng một query, TH thỏa mãn sẽ upend vào temp- Dieuchinh có nút chon tay để kiểm tra 1 lần nữa, TH chon sẽ được upend vào table Dieu chinh.
Nguyên tắc: các dòng trong bảng table Dieu Chinh sẽ được upend các TH thỏa mãn theo ngày.
Vấn đề như sau:
- Sử dung khóa tại trường [sohopdong] ==> TH sohopdong ko bi trung thi ok, nhung khong thong bao la HD da bi trung/ TH sohopdong bi trung khong su dung duoc
- Nếu bài toán ngược lại, muốn quay lai table Dieu chinh cua ngay hôm trước đó, DL sẽ bị đè
Vậy có cách nào dùng code VBA để giải quyết 2 VĐ đó được không ạ?
Có cách nào tạo từng ngày là một table điều chỉnh, table dieu chinh 1107; table dieu chinh 1207 (duoc upend TH thỏa mãn vào table dieu chinh1107)
Em cảm ơn -
RE: xin hỗ trợ bằng Thủ thuật VBA
ongke0711 > 12-07-16, 11:30 PM
Bạn cung cấp thêm dữ liệu nhé.
- Dữ liệu lưu mỗi ngày nó khác nhau trường cơ bản gì ? Mỗi ngày sẽ lưu những [sohopdong] khác nhau?
- Dữ liệu bị đè là làm sao? bạn cho ví dụ cho dễ hiểu.
Thường để tránh trùng dữ liệu khi append record mới vào table thì query sẽ thêm diều kiện lọc, chỉ append những record nào không trùng khóa chính với các records đã append trước đó.
Vd: INSERT INTO tblDIEUCHINH (SoHopDong, NgayHD,..,..)
SELECT SoHopDong, NgayHD,...
FROM tblTemp_DieuChinh
WHERE tblTemp_DieuChinh.SoHopDong <> tblDIEUCHINH.SoHopDong
Nếu các record không có trường nào để phân biệt thì bạn tạo thêm trường phụ làm Index.
Vd: trường [CheckCode] = SoHopDong + yyyymmddhhmm (ngày giờ append dữ liệu)
Còn ý tường tạo nhiều table theo ngày thì sai cơ bản, bạn bỏ ý định đó đi nhé. Sau này nếu bạn muốn truy xuất dữ liệu nguyên năm thì bạn tạo query kết hợp 365 cái table à? -
RE: xin hỗ trợ bằng Thủ thuật VBA
Trần Linh > 13-07-16, 07:05 PM
Xin cảm ơn, gợi ý của ongke0711 ạ, theo gợi ý nhưng vẫn còn vướng mắc như sau:
Với vấn đề 2: ko append các HĐ tồn tại trong table DIEU CHINH
- Với ĐK : WHERE tblTemp_DieuChinh.SoHopDong <> tblDIEUCHINH.SoHopDong ==> phải đặt ĐK giữa hai bang relationship bang [sohd]. Nhưng cả hai table, trường [sohd] đều bị trùng không hiển thị kết quả để append
Với vấn đề 2: bài toán ngược, khi chạy báo cáo quá khứ
Từ Form : ô nhập ngày báo cáo:
TH 1: Nếu ngày hiện tại( tức 13/07), từ Data link vào sẽ được kiểm tra các HD ps trong ngày báo cáo thỏa mãn điều kiện, sau đó Append vao table DIEU CHINH
TH 2: Nếu nhập ngày quá khứ (vd 11/07), query sẽ kiểm tra các HĐ phát sinh trong ngày bc (11/07) thỏa mãn điều kiện, sau đó append và table DIEU CHINH, tuy nhiên việc này đã được cập nhật từ khi user làm báo cáo ngày 12/07, vì vậy sẽ bị lưu đè vào table DIEU CHINH ngay 12/07, và cần thêm bước loại bỏ các sohd điều chỉnh của ngày 12/07. Nhưng như thế ko bảo toàn được dữ liệu gốc
Em xin gửi đường dẫn vào file minh họa ạ: http://www.mediafire.com/download/7b1xee...+cao.accdb
Em cảm ơn -
RE: xin hỗ trợ bằng Thủ thuật VBA
ongke0711 > 13-07-16, 09:06 PM
1. Về vấn đề Append query không hiển thị các [sohd] chưa có trong table DieuChinh là do thiết kế query sai. Ở post trước, tôi gợi ý với bạn cách lý luận để query, khi áp dụng vào query thực tế bạn phải design cho đúng kiểu của nó. Để lấy [sohd] không trùng trong [table Dieu chinh]:
- Phải dùng LEFT JOIN chứ không dùng INNER JOIN như bạn đang làm.
- Điều kiện lọc: [Dieu chinh].[Sohd] Is Null
Mã PHP:INSERT INTO [Dieu chinh] ( Submit, Sohd, SP, tinhtranghd, ngaythaydoitinhtrang )
SELECT [temp_ Dieu chinh].Submit, [temp_ Dieu chinh].Sohd, [temp_ Dieu chinh].SP, [temp_ Dieu chinh].tinhtranghd, [temp_ Dieu chinh].ngaythaydoitinhtrang
FROM [temp_ Dieu chinh] LEFT JOIN [Dieu chinh] ON [temp_ Dieu chinh].Sohd = [Dieu chinh].Sohd
WHERE ((([temp_ Dieu chinh].chon)=Yes) AND (([Dieu chinh].Sohd) Is Null));
2. Vụ "lưu đè", nếu tôi không hiểu sai tức là bạn muốn lưu tất cả các lần điều chỉnh nếu có phát sinh cho 1 sohd. Ví dụ: sohd 130 đã điều chỉnh ngày 12/7, sau đó qua 13/7 bạn muốn điều chỉnh tiếp thì vẫn lưu lần điều chỉnh trước đó để theo dõi. Đúng không?
Nếu không muốn xóa thì bạn tạo thêm trường phụ CheckCode=[Sohd] & Format (Date(),"yyyymmddhhmm"). Mục đích là để phân biệt [Sohd] đã điều chỉnh lúc ngày/tháng/năm/giờ/phút. Khi Append vào table [Dieu chinh] sẽ chạy Update query cập nhật cái [CheckCode] này ở table [Dieu chinh].
Đối với trường hợp này bạn không tìm [sohd] có trùng nhau không mà tìm [CheckCode] có trùng nhau không, nếu không trùng thì Append vào table [Dieu chinh].
Link file demo: http://www.mediafire.com/download/631k0k...sua%29.mdb