Chào các bạn.
Mình có dòng code để lấy số dư đầu kỳ từ CSDL là Acces như sau:
Đoạn code trên không bị sai đoạn nào cả. Vấn để ở chỗ, nếu ngày tháng mình nhập vào (bdate) là ngày 1/1/2008 thì dòng code không chạy được, nếu đưa ngày tháng (bdate) là ngày 2/1/2008 thì dòng code lại chạy ngon lành. Còn nếu mình thêm dấu "=" vào "where [ngay]<=#" & bdate & "#" thì ngày tháng nhập liệu như thế nào cũng chạy ngon, nhưng như thế thì sai kết quả tính toán (Dữ liệu tại table bên Access được bắt đầu từ ngày 1/1/2008). Nguyên nhân của vấn đề này là khi nhập ngày 1/1/2008 khi thực thi câu lệnh Open thì biến kết nối rst sẽ có giá trị rỗng.
Mình chưa biết cách xử lý như thế nào cho đúng, các bạn giúp mình nhé
Thanks,
Mình có dòng code để lấy số dư đầu kỳ từ CSDL là Acces như sau:
Mã:
Sub soquy()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim dieukien, ketqua As Double
[COLOR=cyan]'Lấy định dạng ngày tháng cho phù hợp với Access[/COLOR]
bdate = Mid(Usersoquy.TextBox3.value, 4, 2) & "/" & Left(Me.TextBox3.value, 2) & "/" & Right(Me.TextBox3.value, 2)
edate = Mid(Me.TextBox4.value, 4, 2) & "/" & Left(Me.TextBox4.value, 2) & "/" & Right(Me.TextBox4.value, 2)
[COLOR=cyan]'Lấy số dư của 111 theo số dư đầu kỳ tại ngày 1/1[/COLOR]
Set rst = New ADODB.Recordset
dieukien = "ma='" & CStr(me.ComboBox1.value) & "'"
With rst
ql = "select[ma],[no],[co]from[mtk]" [COLOR=blue]'Trong CSDL có table: mtk[/COLOR]
.Open ql, cnn, , adLockOptimistic
.Find dieukien, , , adBookmarkFirst
If Not .EOF Then
ketqua = CDbl(.Fields(1).value) - CDbl(.Fields(2).value)
End If
End With
[COLOR=cyan]'Lấy số dư trong phát sinh
[/COLOR]Set rst = New ADODB.Recordset
With rst
ql = "select[no],[co],[ps]from[data]" & _ [COLOR=blue]'Table data chứa dữ liệu
[/COLOR] [COLOR=red]"where [ngay]<#" & bdate & "#" 'Các bạn chú ý chỗ này
[/COLOR] .Open ql, cnn
.MoveFirst
Do While Not .EOF
If Val(Left(.Fields(0).value, Len(Me.ComboBox1.value))) = Val(Me.ComboBox1.value) Then
ketqua = ketqua + CDbl(.Fields(2).value)
ElseIf Val(Left(.Fields(1).value, Len(Me.ComboBox1.value))) = Val(Me.ComboBox1.value) Then
ketqua = ketqua - CDbl(.Fields(2).value)
End If
.MoveNext
Loop
End With
[COLOR=cyan]'Đưa số dư ra ô H10 của Excel[/COLOR]
ActiveSheet.Cells(10, 8).value = ketqua
Mình chưa biết cách xử lý như thế nào cho đúng, các bạn giúp mình nhé
Thanks,
Chỉnh sửa lần cuối bởi điều hành viên: