Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] xin hỗ trợ bằng Thủ thuật VBA
#1
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
Chữ ký của Trần Linh Nothing is impossible. Just do it!!! 
Reply
Những người đã cảm ơn
#2
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 à?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Trần Linh
#3
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
Chữ ký của Trần Linh Nothing is impossible. Just do it!!! 
Reply
Những người đã cảm ơn
#4
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] ( SubmitSohdSPtinhtranghdngaythaydoitinhtrang )
SELECT [temp_ Dieu chinh].Submit, [temp_ Dieu chinh].Sohd, [temp_ Dieu chinh].SP, [temp_ Dieu chinh].tinhtranghd, [temp_ Dieu chinh].ngaythaydoitinhtrang
FROM 
[temp_ Dieu chinhLEFT JOIN [Dieu chinhON [temp_ Dieu chinh].Sohd = [Dieu chinh].Sohd
WHERE 
((([temp_ Dieu chinh].chon)=Yes) AND (([Dieu chinh].SohdIs 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
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Trần Linh


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 6 144 29-11-16, 05:18 PM
Bài mới nhất: MinhnHang
  Summary bằng VBA trong MS Access. MinhnHang 6 314 08-11-16, 08:36 AM
Bài mới nhất: MinhnHang
Lightbulb [Thủ Thuật] [Yêu cầu Hàm] Ý tưởng & Nơi yêu cầu thủ thuật maidinhdan 16 810 28-10-16, 11:18 AM
Bài mới nhất: ongke0711
  Gửi tin nhắn SMS bằng Access lmthu 6 337 25-06-16, 12:23 AM
Bài mới nhất: zinzin8x
Photo Hướng dẫn tính tôn kho từ một bảng chi tiết nhập xuất tt1212 8 398 17-06-16, 04:47 PM
Bài mới nhất: tt1212

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ơ