ADO hoạt động không cộng tổng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

keke355992

Thành viên thường trực
Tham gia
19/1/08
Bài viết
310
Được thích
20
Nghề nghiệp
KẾ TOÁN THUẾ, TƯ VẪN THUẾ
- Xin chào các AC trong diễn đàn
- E đang tập về ADO, và đang thắc mắc phần nội dung em đã trình bày và đính kèm trong File. Nhờ các AC xem giúp với ạ, E xin cảm ơn !
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi sợ mở ba cái file xls lắm vì ngại vi rút.
Bạn đưa câu lệnh cộng tổng lên xem rồi nói chuyện tiếp.

(lúc hỏi vấn đề, tránh viết tắt vì các chữ viết tắt có thể là ký hiệu gì đó trong tính toán)
 
Upvote 0
Tôi sợ mở ba cái file xls lắm vì ngại vi rút.
Bạn đưa câu lệnh cộng tổng lên xem rồi nói chuyện tiếp.

(lúc hỏi vấn đề, tránh viết tắt vì các chữ viết tắt có thể là ký hiệu gì đó trong tính toán)
Vậy em up thành file XLSM đc ko ạ, vì em không biết trình bày như nào cho m.n dễ hiểu ạ.

Sub BanraMao()
With Application
.ScreenUpdating = False: .Calculation = xlCalculationManual
End With
Call KetNoi
' Khai bao thang can tim
iMonth = Sheet11.[E2]
' Khai bao mySql
mySql = "SELECT 1 AS STT, Serie, hoadon, ngaygoc, TenKH, Msthue, diengiai," & vbCr
mySql = mySql & "Sum(Iif(tkco like '511%', stien + BoSungDT, 0)) as TienTruocThue, VATRate / 100 AS Thue, Sum(Iif(tkco like '511%', stien + BoSungDT, 0)) / 10 as ThueGTGT " & vbCr
mySql = mySql & "FROM [data$]" & vbCr
mySql = mySql & "GROUP BY Serie, hoadon, ngaygoc, BoSungDT, TenKH, Msthue, diengiai, VATRate, loaict, HD, LoaiHD" & vbCr
mySql = mySql & "HAVING(HD=True) AND (loaict='BH') AND (LoaiHD='KT') and (month(ngaygoc)=" & iMonth & ")" & vbCr
mySql = mySql & "ORDER BY ngaygoc"
Recex.Open mySql, Cnex, adOpenKeyset, adLockOptimistic

'Copy vao sheet Ban ra

With Sheets("BanRa-Mao")
.[A4:J999].ClearContents
.[A4].CopyFromRecordset Recex


' Tao so thu tu
endR = .[A65000].End(xlUp).Row
With .Range("A4: " & "A" & endR)
.FormulaR1C1 = "=Row() - 3"
.Value = .Value
End With
End With
Call BoKetNoi

With Application
.ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
End Sub

Ở phần em bôi đỏ, Đoạn code gốc của nó là:
mySql = mySql & "Sum(Iif(tkco like '511%', stien, 0)) as TienTruocThue, VATRate / 100 AS Thue, Sum(Iif(tkco like '511%', stien, 0)) / 10 as ThueGTGT " & vbCr
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng hàm Iif thì chắc là cổ máy ACE

Access không dùng SQL chuẩn. Wildcard cho ký tự là '?' chứ khong phải là '%'

Chú: dùng SQL động thì luôn đặt 1 dấu cách trước câu. Về sau này có cắt dán code cũng dễ, không bị lỗi ký tự nối nhau. Cách của bạn là gán một dấu xuống hàng ở cuối câu, cách này không an toàn lắm.
VD
strSQL = " SELECT * FROM Bang"
strSQL = strSQL & " Order By xyz"
 
Upvote 0
Dùng hàm Iif thì chắc là cổ máy ACE

Access không dùng SQL chuẩn. Wildcard cho ký tự là '?' chứ khong phải là '%'

Chú: dùng SQL động thì luôn đặt 1 dấu cách trước câu. Về sau này có cắt dán code cũng dễ, không bị lỗi ký tự nối nhau. Cách của bạn là gán một dấu xuống hàng ở cuối câu, cách này không an toàn lắm.
VD
strSQL = " SELECT * FROM Bang"
strSQL = strSQL & " Order By xyz"
E cám ơn ạ. Nhưng sau khi thử các cách mà vẫn không đáp ứng được yêu cầu của File e tải lên. Không biết vì sao lại như thế. A có thể tải giùm file và xem giúp e k ạ !
 
Upvote 0
mySql = "SELECT 1 AS STT, Serie, hoadon, ngaygoc, TenKH, Msthue, diengiai," & vbCr
mySql = mySql & "Sum(Iif(tkco like '511%', stien + BoSungDT, 0)) as TienTruocThue, VATRate / 100 AS Thue, Sum(Iif(tkco like '511%', stien + BoSungDT, 0)) / 10 as ThueGTGT " & vbCr
mySql = mySql & "FROM [data$]" & vbCr
mySql = mySql & "GROUP BY Serie, hoadon, ngaygoc, BoSungDT, TenKH, Msthue, diengiai, VATRate, loaict, HD, LoaiHD" & vbCr
mySql = mySql & "HAVING(HD=True) AND (loaict='BH') AND (LoaiHD='KT') and (month(ngaygoc)=" & iMonth & ")" & vbCr
mình nghĩ sai chổ màu đỏ
Group by: bỏ chổ màu đỏ, có thể thêm thằng màu đỏ trong Select
thay Having bằng Where và đưa lên trước Group By
mình chưa thử nên không biết có được không
 
Upvote 0
- Xin chào các AC trong diễn đàn
- E đang tập về ADO, và đang thắc mắc phần nội dung em đã trình bày và đính kèm trong File. Nhờ các AC xem giúp với ạ, E xin cảm ơn !

Nếu như ý hiểu của mình thì bạn thiếu chỗ này
Khi làm việc với giá trị Null (trống) thì bạn phải để ý cái này.
stien + iif(BoSungDT is null, 0, BoSungDT)
 
Upvote 0
mình nghĩ sai chổ màu đỏ
Group by: bỏ chổ màu đỏ, có thể thêm thằng màu đỏ trong Select
thay Having bằng Where và đưa lên trước Group By
mình chưa thử nên không biết có được không

Đây là lệnh lọc, trường hợp này là lọc trị nguyên mẫu, dùng Where là rất đúng
Tuy nhiên, những chỗ nằm trong Having đều có trong group by. Như vậy là không hẳn sai.
Mặt khác, giữa Having và dấu ngoặc không có 1 khoảng trắng cho nên toi khong rõ Access định liệu thế nào.

Nếu như ý hiểu của mình thì bạn thiếu chỗ này
Khi làm việc với giá trị Null (trống) thì bạn phải để ý cái này.
stien + iif(BoSungDT is null, 0, BoSungDT)

Có thể do null. Vấn đề là:
stien + BoSungDT : nếu BoSungDT = Null thì kết quả là Null
Tuy nhiên hàm Sum tự biết trị số null để loại ra. Như vậy thì chỉ có thể ra kết quả không như ý muốn (tổng thiếu sót) chứ vẫn tổng chỗ còn lại (những chỗ BoSungDT không Null).

@Thớt: nếu quả là sai như bài #7 nếu ra, (kết quả tổng thiếu) thì dùng hàm NZ của Access
NZ(BoSungDT, 0) = iif(BoSungDT is null, 0, BoSungDT)
Nếu chỉ muốn ép Null thành 0 thì dùng NZ(BoSungDT) cũng được

Nếu vẫn còn vấn đề thì bạn cần debug, copy nguyên cái câu lệnh ra (không phải dạng &""...). Đồng thời cho biết 1 vài dòng kết quả, nếu ra nó cộng sai chỗ nào.
 
Lần chỉnh sửa cuối:
Upvote 0
mình nghĩ sai chổ màu đỏ
Group by: bỏ chổ màu đỏ, có thể thêm thằng màu đỏ trong Select
thay Having bằng Where và đưa lên trước Group By
mình chưa thử nên không biết có được không

Nếu như ý hiểu của mình thì bạn thiếu chỗ này
Khi làm việc với giá trị Null (trống) thì bạn phải để ý cái này.
stien + iif(BoSungDT is null, 0, BoSungDT)


Đây là lệnh lọc, trường hợp này là lọc trị nguyên mẫu, dùng Where là rất đúng
Tuy nhiên, những chỗ nằm trong Having đều có trong group by. Như vậy là không hẳn sai.
Mặt khác, giữa Having và dấu ngoặc không có 1 khoảng trắng cho nên toi khong rõ Access định liệu thế nào.



Có thể do null. Vấn đề là:
stien + BoSungDT : nếu BoSungDT = Null thì kết quả là Null
Tuy nhiên hàm Sum tự biết trị số null để loại ra. Như vậy thì chỉ có thể ra kết quả không như ý muốn (tổng thiếu sót) chứ vẫn tổng chỗ còn lại (những chỗ BoSungDT không Null).

@Thớt: nếu quả là sai như bài #7 nếu ra, (kết quả tổng thiếu) thì dùng hàm NZ của Access
NZ(BoSungDT, 0) = iif(BoSungDT is null, 0, BoSungDT)
Nếu chỉ muốn ép Null thành 0 thì dùng NZ(BoSungDT) cũng được

Nếu vẫn còn vấn đề thì bạn cần debug, copy nguyên cái câu lệnh ra (không phải dạng &""...). Đồng thời cho biết 1 vài dòng kết quả, nếu ra nó cộng sai chỗ nào.

Chân thành cảm ơn các bác, Theo hd bài #7 của a quanluu1989 và #8 của a VetMini , E đã sửa câu lệnh và ra được kết quả đúng như ý rùi ạ }}}}}
 
Upvote 0
mình nghĩ sai chổ màu đỏ
Group by: bỏ chổ màu đỏ, có thể thêm thằng màu đỏ trong Select
thay Having bằng Where và đưa lên trước Group By
mình chưa thử nên không biết có được không

Trước e cũng thử các kiểu, cho lên WHERE cũng k được ạ. Theo hd tại #7 & #8 mới hiểu không có dữ liệu là Null và cho nó = 0 thì ms hoạt động chính xác đc !
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom