hatashibl > 04-04-13, 06:38 PM
muaphonui_2010 > 04-04-13, 09:06 PM
(04-04-13, 06:38 PM)hatashibl Đã viết: Mình có danh mục sản phẩm như với ví dụ sau:
Tên sp | Giá | Áp dụng từ ngày
Bánh mì | 2000| 01/01/2013
3000| 01/03/2013
4000| 01/4/2013
Khi lấy giá vào Form, căn cứ vào ngày hiện tại để lấy Giá phù hợp.
Mong mọi người giúp đơ ^^!
hatashibl > 05-04-13, 01:05 AM
muaphonui_2010 > 07-04-13, 05:47 PM
(05-04-13, 01:05 AM)hatashibl Đã viết: @muaphonui_2010: cảm ơn bạn vì đã hướng dẫn giúp mình.
Mình cũng hiểu là nếu thêm Field denngay thì dùng hàm Dlookup sẽ dễ dàng hơn nhiều vì điều kiện: >= tungay and < denngay.
Nhưng mình thấy như vậy thì mất thời gian hiệu chỉnh khi điều chỉnh giá mới vì phải chỉnh denngay của giá cũ rồi chỉnh tungay và denngay của giá mới mặc dù chưa biết thời gian thay đổi giá.
Vậy nếu bạn hoặc mọi người có cách nào chỉ cần ngày áp dụng và so sánh kiểu >= ngày áp dụng giá cũ và < ngày áp dụng giá mới và xuất giá thỏa điều kiện thì giúp đỡ mình nhé
Xuân Thanh > 07-04-13, 06:10 PM
(04-04-13, 06:38 PM)hatashibl Đã viết: Mình có danh mục sản phẩm như với ví dụ sau:
Tên sp | Giá | Áp dụng từ ngày
Bánh mì | 2000| 01/01/2013
3000| 01/03/2013
4000| 01/4/2013
Khi lấy giá vào Form, căn cứ vào ngày hiện tại để lấy Giá phù hợp.
Mong mọi người giúp đơ ^^!
hatashibl > 09-04-13, 10:21 PM
txtgia = "select Dsgia.Gia from (SELECT Sanpham.Masp, Dsgia.Adtungay, Dsgia.Gia FROM Sanpham INNER JOIN Dsgia ON Sanpham.Masp = Dsgia.Masp WHERE ((Dsgia.Adtungay <= " & NgaythangGD & ") and (Sanpham.Masp ='" & Masp &"'")) ORDER BY Dsgia.Adtungay DESC) where rownum =1 "
Xuân Thanh > 09-04-13, 10:43 PM
hatashibl > 09-04-13, 11:21 PM
Xuân Thanh > 10-04-13, 09:54 PM
Function GiaTim(dNgay As Date, sSP As String) As Double
Dim rs As Recordset
Dim Gia As Double
Dim Thay As Boolean
Thay = False
Dim CauSQL As String
CauSQL = "Select * from tblDSGia Where MaSP = '" & sSP & "' Order By NgayApDung"
Set rs = CurrentDb.OpenRecordset(CauSQL)
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
If rs!NgayApDung < dNgay Then
Gia = rs!Gia: Thay = True
Else
Exit Do
End If
rs.MoveNext
Loop
End If
rs.Close
If Thay = False Then GiaTim = 0 Else GiaTim = Gia
End Function
Private Sub cmdLayGia_Click()
If Me.txtNgay <> "" And Me.txtMaSP <> "" Then
Me.txtGiaApDung = GiaTim(Me.txtNgay, Me.txtMaSP)
End If
End Sub
muaphonui_2010 > 11-04-13, 08:49 AM
(10-04-13, 09:54 PM)Xuân Thanh Đã viết: 1/ Table tblDSGia có các trường STT(Text), MaSP(Text),Gia(Number),NgayApDung(Date/Time)Hình như code trên thiếu 1 điều kiện ngày áp dụng < ngày chứng từ , Vì nếu như vậy thì nó có thể lấy giá lớn hơn ngày chứng từ. Không biết đúng ko nữa.
2/ Trong module tạo hàm GiaTim như sau
Mã PHP:Function GiaTim(dNgay As Date, sSP As String) As Double
Dim rs As Recordset
Dim Gia As Double
Dim Thay As Boolean
Thay = False
Dim CauSQL As String
CauSQL = "Select * from tblDSGia Where MaSP = '" & sSP & "' Order By NgayApDung"
Set rs = CurrentDb.OpenRecordset(CauSQL)
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
If rs!NgayApDung < dNgay Then
Gia = rs!Gia: Thay = True
Else
Exit Do
End If
rs.MoveNext
Loop
End If
rs.Close
If Thay = False Then GiaTim = 0 Else GiaTim = Gia
End Function
3/ Trong form có 3 textbox : txtNgay, txtMaSP, txtGiaApDung và một Commandbuton : cmdLayGia
Mã PHP:Private Sub cmdLayGia_Click()
If Me.txtNgay <> "" And Me.txtMaSP <> "" Then
Me.txtGiaApDung = GiaTim(Me.txtNgay, Me.txtMaSP)
End If
End Sub
Bạn vận dụng vào bài của mình cho phù hợp. Khi GiaTim = 0 là không có giá ( Khi ngày áp dụng giá < giá trị ngay trong table)
Thân mến