Đánh giá chủ đề:
  • 4 Votes - 4.75 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lọc between trong vba
#1
đây là file mình đang học. trong form Fhandung ở cmbdenngay minh đặt lệnh lọc between mãi mà không được. Mong các bạn chỉ giúp .
http://www.mediafire.com/?k1s9m7j17mmwf8u
Chữ ký của cuongtuyetcz Hoàng hôn trên núi buồn ảm đạm
Thất huyền, Ánh sáng sao lung linh.
Cương thường,nét tạo người có sĩ
Ngôn trên đã tạo người hữu danh.
ღღღღღTài sản của cuongtuyetcz (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
Góp ý thứ nhất là bạn nên để phần chuỗi sql riêng ra 1 biến string. Rồi gọi nó lên sau cho code mình tường minh hơn

Kinh nghiệm thứ 2 khi bạn phát biểu 1 câu sql thì bạn thử dùng lưới xem nó có chạy không đã.Mình nhìn sơ qua thấy bạn có phát biểu sum trong select, nhưng lại không có phát biểu group by. Như vậy cho dù câu sql này không có between thì cũng sai tuốt.

Làm thử lại rùi post câu sql của bạn lên mình sửa tiếp!
007
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
Để đơn giản hóa, bạn chỉ cần đặt Record Source của Fhandungsub là:

Mã:
SELECT hangnhap.mahang, hanghoa.tenhang, hanghoa.gianhap, Sum(hangnhap.soluongnhap) AS SLN, hangnhap.handung FROM hanghoa INNER JOIN hangnhap ON hanghoa.mahang=hangnhap.mahang WHERE (((hangnhap.handung) Between forms!Fhandung!cmbtungay And forms!fhandung!cmbdenngay)) GROUP BY hangnhap.mahang, hanghoa.tenhang, hanghoa.gianhap, hangnhap.handung;


và sự kiện AfterUpdate của cmbdenngay chỉ đơn giản là:

Mã:
Fhandungsub.Requery
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
(11-01-11, 07:34 PM)Noname Đã viết: Góp ý thứ nhất là bạn nên để phần chuỗi sql riêng ra 1 biến string. Rồi gọi nó lên sau cho code mình tường minh hơn

Kinh nghiệm thứ 2 khi bạn phát biểu 1 câu sql thì bạn thử dùng lưới xem nó có chạy không đã.Mình nhìn sơ qua thấy bạn có phát biểu sum trong select, nhưng lại không có phát biểu group by. Như vậy cho dù câu sql này không có between thì cũng sai tuốt.

Làm thử lại rùi post câu sql của bạn lên mình sửa tiếp!
007

mình chưa hiểu góp ý thứ nhất của bạn,bạn có thể ví dụ không.
mình đã thử lại theo gợi ý của bạn, ở trên lưới query ,record source của Fhandungsub ,thì lọc tốt không vấn đề. Còn trên Fhandung thi câu lệnh của mình là
set rs = db.openrecordset(" select hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap " & _
" sum ([hangnhap.soluongnhap]) as SLN,hangnhap.handung " & _
" From hanghoa inner join hangnhap on hanghoa.mahang = hangnhap.mahang " & _
"where ((hangnhap.handung) between " & me.cmbtungay.value & " and " & me.cmbdenngay.value & ")
" group by hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap,hangnhap.handung " )
set Fhandungsub.form.recordset = rs
Fhandungsub.requery

ban xem giúp và chỉ giáo , cám ơn bạn.
Chữ ký của cuongtuyetcz Hoàng hôn trên núi buồn ảm đạm
Thất huyền, Ánh sáng sao lung linh.
Cương thường,nét tạo người có sĩ
Ngôn trên đã tạo người hữu danh.
ღღღღღTài sản của cuongtuyetcz (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
(11-01-11, 07:36 PM)haquocquan Đã viết: Để đơn giản hóa, bạn chỉ cần đặt Record Source của Fhandungsub là:

Mã:
SELECT hangnhap.mahang, hanghoa.tenhang, hanghoa.gianhap, Sum(hangnhap.soluongnhap) AS SLN, hangnhap.handung FROM hanghoa INNER JOIN hangnhap ON hanghoa.mahang=hangnhap.mahang WHERE (((hangnhap.handung) Between forms!Fhandung!cmbtungay And forms!fhandung!cmbdenngay)) GROUP BY hangnhap.mahang, hanghoa.tenhang, hanghoa.gianhap, hangnhap.handung;


và sự kiện AfterUpdate của cmbdenngay chỉ đơn giản là:

Mã:
Fhandungsub.Requery

cám ơn bạn nhìu,cách của bạn cũng hay nhưng mình cũng muốn học thêm cách sử lí bằng tạo biên recordset. Một lần nữa thanks bạn vì bạn rất nhiệt tình
Chữ ký của cuongtuyetcz Hoàng hôn trên núi buồn ảm đạm
Thất huyền, Ánh sáng sao lung linh.
Cương thường,nét tạo người có sĩ
Ngôn trên đã tạo người hữu danh.
ღღღღღTài sản của cuongtuyetcz (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
(11-01-11, 08:19 PM)cuongtuyetcz Đã viết:
(11-01-11, 07:34 PM)Noname Đã viết: Góp ý thứ nhất là bạn nên để phần chuỗi sql riêng ra 1 biến string. Rồi gọi nó lên sau cho code mình tường minh hơn

Kinh nghiệm thứ 2 khi bạn phát biểu 1 câu sql thì bạn thử dùng lưới xem nó có chạy không đã.Mình nhìn sơ qua thấy bạn có phát biểu sum trong select, nhưng lại không có phát biểu group by. Như vậy cho dù câu sql này không có between thì cũng sai tuốt.

Làm thử lại rùi post câu sql của bạn lên mình sửa tiếp!
007

mình chưa hiểu góp ý thứ nhất của bạn,bạn có thể ví dụ không.
mình đã thử lại theo gợi ý của bạn, ở trên lưới query ,record source của Fhandungsub ,thì lọc tốt không vấn đề. Còn trên Fhandung thi câu lệnh của mình là
set rs = db.openrecordset(" select hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap " & _
" sum ([hangnhap.soluongnhap]) as SLN,hangnhap.handung " & _
" From hanghoa inner join hangnhap on hanghoa.mahang = hangnhap.mahang " & _
"where ((hangnhap.handung) between " & me.cmbtungay.value & " and " & me.cmbdenngay.value & ")
" group by hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap,hangnhap.handung " )
set Fhandungsub.form.recordset = rs
Fhandungsub.requery

ban xem giúp và chỉ giáo , cám ơn bạn.

Góp ý thứ nhất, có nghĩa là câu lệnh sql của bạn được lưu trong một biến String. Biến string này bạn dễ dàng kiểm soát được nội dung của nó bằng cách gọi hàm msgbox để hiện thị nó

Cụ thể thế này:

Mã:
Dim Sql As String
Sql = "select hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap, sum ([hangnhap.soluongnhap]) as SLN,hangnhap.handung "
Sql = Sql & " From hanghoa inner join hangnhap on hanghoa.mahang = hangnhap.mahang "
Sql = Sql & "where ((hangnhap.handung) between #" & Me.cmbtungay.Value & "# and #" & Me.cmbdenngay.Value & "#)"
Sql = Sql & " group by hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap,hangnhap.handung "

Sau đó, bạn mới tiến hành open sql và gán nó cho sub form:

Mã:
Set rs = db.OpenRecordset(Sql)
Set Fhandungsub.Form.Recordset = rs
Fhandungsub.Requery

Giờ bạn thử lại xem!
Chúc may mắn
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn haquocquan
#7
(11-01-11, 09:32 PM)Noname Đã viết:
(11-01-11, 08:19 PM)cuongtuyetcz Đã viết:
(11-01-11, 07:34 PM)Noname Đã viết: Góp ý thứ nhất là bạn nên để phần chuỗi sql riêng ra 1 biến string. Rồi gọi nó lên sau cho code mình tường minh hơn

Kinh nghiệm thứ 2 khi bạn phát biểu 1 câu sql thì bạn thử dùng lưới xem nó có chạy không đã.Mình nhìn sơ qua thấy bạn có phát biểu sum trong select, nhưng lại không có phát biểu group by. Như vậy cho dù câu sql này không có between thì cũng sai tuốt.

Làm thử lại rùi post câu sql của bạn lên mình sửa tiếp!
007

mình chưa hiểu góp ý thứ nhất của bạn,bạn có thể ví dụ không.
mình đã thử lại theo gợi ý của bạn, ở trên lưới query ,record source của Fhandungsub ,thì lọc tốt không vấn đề. Còn trên Fhandung thi câu lệnh của mình là
set rs = db.openrecordset(" select hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap " & _
" sum ([hangnhap.soluongnhap]) as SLN,hangnhap.handung " & _
" From hanghoa inner join hangnhap on hanghoa.mahang = hangnhap.mahang " & _
"where ((hangnhap.handung) between " & me.cmbtungay.value & " and " & me.cmbdenngay.value & ")
" group by hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap,hangnhap.handung " )
set Fhandungsub.form.recordset = rs
Fhandungsub.requery

ban xem giúp và chỉ giáo , cám ơn bạn.

Góp ý thứ nhất, có nghĩa là câu lệnh sql của bạn được lưu trong một biến String. Biến string này bạn dễ dàng kiểm soát được nội dung của nó bằng cách gọi hàm msgbox để hiện thị nó

Cụ thể thế này:

Mã:
Dim Sql As String
Sql = "select hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap, sum ([hangnhap.soluongnhap]) as SLN,hangnhap.handung "
Sql = Sql & " From hanghoa inner join hangnhap on hanghoa.mahang = hangnhap.mahang "
Sql = Sql & "where ((hangnhap.handung) between #" & Me.cmbtungay.Value & "# and #" & Me.cmbdenngay.Value & "#)"
Sql = Sql & " group by hangnhap.mahang,hanghoa.tenhang,hanghoa.gianhap,hangnhap.handung "

Sau đó, bạn mới tiến hành open sql và gán nó cho sub form:

Mã:
Set rs = db.OpenRecordset(Sql)
Set Fhandungsub.Form.Recordset = rs
Fhandungsub.Requery

Giờ bạn thử lại xem!
Chúc may mắn

noname à , mình đã thử theo cách bạn chỉ nhưng vẫn không được. nó vẫn báo
rs = nothing và vẫn có lỗi The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect. (Error 3141)
tiếng anh của mình kém lên không hiểu được lỗi gì, bạn xem hộ nhé . Diky
Chữ ký của cuongtuyetcz Hoàng hôn trên núi buồn ảm đạm
Thất huyền, Ánh sáng sao lung linh.
Cương thường,nét tạo người có sĩ
Ngôn trên đã tạo người hữu danh.
ღღღღღTài sản của cuongtuyetcz (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
(13-01-11, 02:28 AM)cuongtuyetcz Đã viết: noname à , mình đã thử theo cách bạn chỉ nhưng vẫn không được. nó vẫn báo
rs = nothing và vẫn có lỗi The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect. (Error 3141)
tiếng anh của mình kém lên không hiểu được lỗi gì, bạn xem hộ nhé . Diky

Không biết bạn làm thế nào. Mình làm thử form Fhandung, bạn xem code nó nhé!
Download
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
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
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 9 227 Hôm qua, 06:11 PM
Bài mới nhất: maidinhdan
  [Thủ Thuật] Tìm số thứ tự bị thiếu trong dãy toanle 8 204 07-12-16, 02:25 PM
Bài mới nhất: toanle
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,694 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  [Hỏi] Kết nối nhiều lần hay kết nối 1 lần trong ADO ưu điểm hơn Minh Tiên 1 124 10-11-16, 10:41 AM
Bài mới nhất: maidinhdan
  Summary bằng VBA trong MS Access. MinhnHang 6 320 08-11-16, 08:36 AM
Bài mới nhất: MinhnHang

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ơ