Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Trích xuất dữ liệu
#11
(06-04-16, 01:27 AM)binhnguyenthanh Đã viết: [quote='ongke0711' pid='30411' dateline='1459876413']
Muốn nối thêm vào trường ghi thì code như sau:
-----------------------------
Dim rs as DAO.Recordset
Set rs=CurrentDb.OpenRecordset ("table của bạn", DbOpenDynaset)
With rs
     .Edit
     !GhiChu=!GhiChu & "-" & Me.TextboxNgay
     .Update
End With
rs.Close
Set rs = Nothing
----------------------------

Như thế này thì chỉ edit được 01 bản ghi thôi ạ. Em muốn edit tất cả bản ghi do query tạo ra cơ ạ.

Bạn dùng vòng lặp cho nó.
With rs
     .MoveFirst
     Do until rs.EOF
          .Edit
          !GhiChu=!GhiChu & "-" & Me.TextboxNgay
          .Update
          .MoveNext
     Loop
End With
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 binhnguyenthanh
#12
(06-04-16, 01:40 AM)binhnguyenthanh Đã viết:
(04-04-16, 08:26 PM)ongke0711 Đã viết: 1. Bạn tạo 1 table phụ "Đợt tour" có các 2 cột chính (như bạn đã làm): [Mã đợt tour],[Ngày đi tour],[ Ghi chú]... Vd: 
[MaTour]      [NgayTour]
012016        15/01/2016      => [mã tour] qua năm sau thì sẽ quay lại. Vd: 012017,.., 202017
- Trong table lưu lịch sử đi tour chỉ cần lưu [mã tour] của từng KH cho gọn.
2. Khi ds đi tour được duyệt thì Update cột [mã tour] cho khách hàng đó.
Khi query danh sách, để loại nhưng KH đã đi tour rồi thì cho điều kiện là: 
   + [Ngày đi tour]< 2015  -> để lấy ds KH được đi năm nay 2016 (cách 1 năm) và KH nào mới đi 2016 cũng bị loại ra.
3. Danh sách này cũng đơn giản nên bạn thiết kế form excel các cột cho chuẩn theo yêu cầu rồi import vô access thôi. Sau khi import, bạn dùng Find unmatch query để đối chiếu dữ liệu lịch sử bạn đã lưu với file mới import này để kiểm tra danh sách.
Có thể còn nhiều vấn đề phát sinh cần giải quyết, bạn cứ đưa dữ kiện rồi thảo luận tiếp.

Theo cách này cơ bản em đã xử lý được vấn đề chính. Em có một vướng mắc tiếp như sau: Mỗi tỉnh sẽ gửi 1 danh sách khách hàng đi tour, số  lượng khách hàng ở mỗi tỉnh là khác nhau. Vậy với mỗi tỉnh sẽ phải tạo 1 bảng dữ liệu phụ để import file excel vào => sẽ mất thời gian. Vậy phải xử lý như thế nào ạ?

Tôi cũng chưa hiểu lắm ý này. Số lượng KH khác nhau thì ảnh hưởng như thế nào khi import?
Bạn chỉ cần import vô 1 table tổng hợp của tất cả các tỉnh. Vd tableTongHop
Import ds 1 tỉnh vô 1 table tạm, sau đó đổi chiếu với tbelTongHop để xem có trùng lắp không, nếu không thì append tiếp vô tableTongHop, xóa table tạm. Khi Append thì bạn thêm các thông tin phụ như: mã phụ, ngày giờ import, tỉnh v.v..để đối chiếu tìm record import trùng lắp.
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 binhnguyenthanh
#13
(06-04-16, 01:56 AM)ongke0711 Đã viết:
(06-04-16, 01:27 AM)binhnguyenthanh Đã viết: [quote='ongke0711' pid='30411' dateline='1459876413']
Muốn nối thêm vào trường ghi thì code như sau:
-----------------------------
Dim rs as DAO.Recordset
Set rs=CurrentDb.OpenRecordset ("table của bạn", DbOpenDynaset)
With rs
     .Edit
     !GhiChu=!GhiChu & "-" & Me.TextboxNgay
     .Update
End With
rs.Close
Set rs = Nothing
----------------------------

Như thế này thì chỉ edit được 01 bản ghi thôi ạ. Em muốn edit tất cả bản ghi do query tạo ra cơ ạ.

Bạn dùng vòng lặp cho nó.
With rs
     .MoveFirst
     Do until rs.EOF
          .Edit
          !GhiChu=!GhiChu & "-" & Me.TextboxNgay
          .Update
          .MoveNext
     Loop
End With

Em nghĩ là vẫn không đúng ạ vì nếu dùng vòng lặp thì tất cả các bản ghi của bảng kết nối sẽ đều được cập nhật
Set rs=CurrentDb.OpenRecordset ("table của bạn", DbOpenDynaset)
Có lẽ phải có phần tương tự như where bang.ID = Query.ID để chỉ câp nhật dòng dữ liệu khi chạy query.
Em đã thử thay "table của bạn" bằng "queey của bạn" nhưng báo lỗi "too few paramaters" ạ.
Em chỉ hiểu nguyên lý còn câu lệnh chính xác thì mò mãi chưa ra ạ!
Chữ ký của binhnguyenthanh Xin chào, mình là binhnguyenthanh, Tham gia http://thuthuataccess.com/forum từ ngày 31-10 -14.
Reply
Những người đã cảm ơn
#14
Có thể câu lệnh SQL của bạn sai phần điều kiện. Chú ý dùng dấu ngoặc đơn " ' " trước các tham số dạng text.
Không có dữ liệu mẫu thì cũng khó tìm lỗi.
Câu lệnh SQL bạn thay chỗ "Table" là gì?
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
#15
(06-04-16, 02:20 AM)ongke0711 Đã viết:
(06-04-16, 01:40 AM)binhnguyenthanh Đã viết:
(04-04-16, 08:26 PM)ongke0711 Đã viết: 1. Bạn tạo 1 table phụ "Đợt tour" có các 2 cột chính (như bạn đã làm): [Mã đợt tour],[Ngày đi tour],[ Ghi chú]... Vd: 
[MaTour]      [NgayTour]
012016        15/01/2016      => [mã tour] qua năm sau thì sẽ quay lại. Vd: 012017,.., 202017
- Trong table lưu lịch sử đi tour chỉ cần lưu [mã tour] của từng KH cho gọn.
2. Khi ds đi tour được duyệt thì Update cột [mã tour] cho khách hàng đó.
Khi query danh sách, để loại nhưng KH đã đi tour rồi thì cho điều kiện là: 
   + [Ngày đi tour]< 2015  -> để lấy ds KH được đi năm nay 2016 (cách 1 năm) và KH nào mới đi 2016 cũng bị loại ra.
3. Danh sách này cũng đơn giản nên bạn thiết kế form excel các cột cho chuẩn theo yêu cầu rồi import vô access thôi. Sau khi import, bạn dùng Find unmatch query để đối chiếu dữ liệu lịch sử bạn đã lưu với file mới import này để kiểm tra danh sách.
Có thể còn nhiều vấn đề phát sinh cần giải quyết, bạn cứ đưa dữ kiện rồi thảo luận tiếp.

Theo cách này cơ bản em đã xử lý được vấn đề chính. Em có một vướng mắc tiếp như sau: Mỗi tỉnh sẽ gửi 1 danh sách khách hàng đi tour, số  lượng khách hàng ở mỗi tỉnh là khác nhau. Vậy với mỗi tỉnh sẽ phải tạo 1 bảng dữ liệu phụ để import file excel vào => sẽ mất thời gian. Vậy phải xử lý như thế nào ạ?

Tôi cũng chưa hiểu lắm ý này. Số lượng KH khác nhau thì ảnh hưởng như thế nào khi import?
Bạn chỉ cần import vô 1 table tổng hợp của tất cả các tỉnh. Vd tableTongHop
Import ds 1 tỉnh vô 1 table tạm, sau đó đổi chiếu với tbelTongHop để xem có trùng lắp không, nếu không thì append tiếp vô tableTongHop, xóa table tạm. Khi Append thì bạn thêm các thông tin phụ như: mã phụ, ngày giờ import, tỉnh v.v..để đối chiếu tìm record import trùng lắp.

Em hiểu ý bác nói ạ. Ý của em muốn hỏi là kỹ thuật làm table tạm ấy ạ. Nếu copy, paste thì sẽ rất thủ công vậy nên theo em hiểu thì quy trình sẽ là khi nhận được file excel đăng ký từ các tỉnh thì sẽ tiến hành xóa nội dung bảng tạm hay xóa hẳn bảng tạm rồi mới  import dữ liệu mới vào và so sánh. Mong bác gợi ý một số dòng lệnh demo ạ.
Chữ ký của binhnguyenthanh Xin chào, mình là binhnguyenthanh, Tham gia http://thuthuataccess.com/forum từ ngày 31-10 -14.
Reply
Những người đã cảm ơn
#16
(06-04-16, 02:31 AM)ongke0711 Đã viết: Có thể câu lệnh SQL của bạn sai phần điều kiện. Chú ý dùng dấu ngoặc đơn " ' " trước các tham số dạng text.
Không có dữ liệu mẫu thì cũng khó tìm lỗi.
Câu lệnh SQL bạn thay chỗ "Table" là gì?

Query của em có 3 điều kiện được lấy từ các textbox trên form và đã test chạy bình thường bằng nút lệnh trên Form. Em thay " tên_Table" bằng "tên_query" thôi ạ. 
Đây là nội dung query của em:

SELECT Nhaphoso.SoQD, Nhaphoso.NgayKetqua, Nhaphoso.Nguoicocong, Nhaphoso.Nguoihuonghangthang, Nhaphoso.Nguoihuongmotlan, Nhaphoso.Xa, Nhaphoso.Huyen, Nhaphoso.LoaiHS, Nhaphoso.Doituong, Nhaphoso.NguoiGQ, Nhaphoso.Ngaynhan, Nhaphoso.LichsuBC, Nhaphoso.ID
FROM Nhaphoso
WHERE (((Nhaphoso.SoQD) Is Not Null) AND ((Nhaphoso.Doituong)=[Forms]![frmlocloaihoso]![cbolocdoituongtg]) AND ((Nhaphoso.Ngaynhan)>=[Forms]![frmlocloaihoso]![txtngaydau] And (Nhaphoso.Ngaynhan)<=[Forms]![frmlocloaihoso]![txtngaysau]));
Chữ ký của binhnguyenthanh Xin chào, mình là binhnguyenthanh, Tham gia http://thuthuataccess.com/forum từ ngày 31-10 -14.
Reply
Những người đã cảm ơn
#17
Câu lệnh SQL dùng cho VBA khác chút về việc đưa tham số điều kiện cho mệnh đề WHERE.
Bạn phải sửa lại chút.
 
WHERE ((Nhaphoso.SoQD) Is Not Null) AND (Nhaphoso.Doituong)= '" & [Forms]![frmlocloaihoso]![cbolocdoituongtg] & ") AND ((Nhaphoso.Ngaynhan) BETWEEN #" & [Forms]![frmlocloaihoso]![txtngaydau] & "# AND #" & [Forms]![frmlocloaihoso]![txtngaysau]

Về lệnh import thì bạn có thể dùng Menu của Access luôn, có import từ file Excel hoặc thiết kế form với code để import.
Bạn tham khảo link sau:
http://thuthuataccess.com/forum/thread-103.html
http://thuthuataccess.com/forum/thread-5231.html
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 , binhnguyenthanh
#18
Dear bác ongke0711!


Em xin được tiếp tục hỏi về vấn đề vấn đề của mình vì mấy hôm suy nghĩ mà vẫn chưa làm được. Em xin được tóm tắt lại vấn đề của mình như sau: 
Từ một bảng dữ liệu gốc em gọi là bảng A em tạo ra một query có nhiều điều kiện (các điều kiện này được lấy từ các textbox trên form). Mong muốn của em là mỗi lần em chạy Query thì sẽ cập nhật thời gian hiện tại cho tất cả các bản ghi xuất hiện trong query này mà không phải cập nhật tất cả bản ghi cho bảng A. Query đã test và chạy đúng => điều kiện đặt cho query đúng.
Câu hỏi của em là:
1. Khi em mở Form và nhập điều kiện cho query thì có thể dùng câu lệnh như kiểu : 
Set rs = CurrentDb.OpenRecordset("tenbang", dbOpenDynaset) và thay bằng 
Set rs = CurrentDb.OpenRecordset("ten Query", dbOpenDynaset) để kết nối với query và dùng lệnh edit để sửa bản ghi hiện tại của query được không? (em đã thử và không làm được hoặc là làm sai)
2. Nếu cách 1 không được thì có cách nào khác không ạ.
Chữ ký của binhnguyenthanh Xin chào, mình là binhnguyenthanh, Tham gia http://thuthuataccess.com/forum từ ngày 31-10 -14.
Reply
Những người đã cảm ơn
#19
Open recordset bằng query được. Sau khi dùng lệnh rs.Edit, bạn phải rs.Update nó thì nó mới lưu.
các Query tính toán, crosstab thì không update được nhé.
Về việc cập nhật thời gian cho các bản ghi theo điều kiện thì cứ query nó ra rồi update, nó sẽ không update cho toàn bộ bản ghi.
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 , binhnguyenthanh
#20
Em gửi bác ongke0711 file đính kèm. Nhờ bác xem hộ em tại sao không mở kết nối được với query ạ (Vì không tìm được chỗ đính kèm file nên em gửi link mediafire.
https://www.mediafire.com/?xbzr9z779j7cz59
Chữ ký của binhnguyenthanh Xin chào, mình là binhnguyenthanh, Tham gia http://thuthuataccess.com/forum từ ngày 31-10 -14.
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
  [Help] Thiết kế form nhập và lưu trữ dữ liệu theo yêu cầu brianhuynh 16 624 20-10-16, 10:54 PM
Bài mới nhất: brianhuynh
  Xóa tất cả các dữ liệu ChiMai 3 145 15-10-16, 02:47 PM
Bài mới nhất: cpucloi
  [Help] Nhờ tạo form lưu hóa đơn nhập, hóa đơn xuất, hàng nhập hàng xuất không cần tính tồn laxx_xxal 1 131 22-09-16, 02:35 PM
Bài mới nhất: Nguyen Hoang Diep
  Hướng Dẫn Cách lưu (back up database) dữ liệu! danhxetnghiem 20 2,909 07-08-16, 04:40 PM
Bài mới nhất: maidinhdan
  [Help] Nhờ các bạn phục hồi dữ liệu tringuyen 2 129 21-07-16, 06:54 PM
Bài mới nhất: zinzin8x

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ơ