Query ขึ้น Overflow
กระทู้เก่าบอร์ด อ.Yeadram

 1,029   4
URL.หัวข้อ / URL
Query ขึ้น Overflow

คาดว่าเป็นที่ field ที่ใส่ code นี้ครับ ก่อนหน้านี้ Query ก็ Run ปกติ
status_Report:
IIf(IsNull([date_out3]),"In Process",
IIf([status_inv]="wait","In Process",
IIf([status_inv]="Warning","In Process",
IIf([status_inv]="Warning2","In Process",
IIf([status_inv]="Over Due","In Process",
IIf([status_inv]="Dead line","In Process",
IIf(([date_out3] Or [date_out3_auto]<>0,
IIf(IsNull([Due_date]),"Complete",
IIf(CInt([date_out3]-[Due_date])<=-7,"Complete",
IIf(CInt([date_out3]-[Due_date])>-7,"Complete Over Due","In Process"
))))))))))

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R22469
ผมว่าคุณควรเขียนเป็น Public Function เพื่อหาค่าสถานะ โดยส่งฟิลด์ทั้ง 4 ที่เกี่ยวข้องไปให้ฟังก์ชั่น ใส่ฟังก์ชั่นไว้ใน Module แล้วเรียกฟังก์ชั่นนี้จากคิวรี่ จะดีกว่าเรียกใช้ IIF ซ้อนกันมากมายอย่างนี้ครับ ในคิวรี่ก็จะเป็น

status_Report : ชื่อฟังก์ชั่น([date_out3],[status_inv]),[date_out3_auto],[Due_date])
2 @R22481
อาจาร์ยครับ แนะนำหน่อยครับ   ผมไม่เคยเขียน Public Function และ Module เลยครับ
3 @R22482
สร้างโมดูลใหม่ แล้วใส่โค้ดนี้ แต่ผมดูแล้วแปลกๆ ไม่แน่ใจคุณเขียนเงื่อนไขครบหรือไม่ จุดที่น่าสงสัยคือที่ผมเขียน ??? คุณต้องไปตรวจสอบและปรับปรุงเอาเองนะครับ

Public Function GetInvStatus(date_out3 As Variant, status_inv As String, date_out3_auto As Variant, Due_Date As Variant) As String
    If IsNull(date_out3) Then
        GetInvStatus = "In Process"
    Else
        If status_inv = "wait" Then
            GetInvStatus = "In Process"
        Else
            If status_inv = "Warning" Then
               GetInvStatus = "In Process"
            Else
               If status_inv = "Warning2" Then
                    GetInvStatus = "In Process"
               Else
                    If status_inv = "Over Due" Then
                        GetInvStatus = "In Process"
                    Else
                        If status_inv = "Dead line" Then
                            GetInvStatus = "In Process"
                        Else
                            If date_out3 Or date_out3_auto <> 0 Then    ' ???
                                If IsNull(Due_Date) Then
                                    GetInvStatus = "Complete"
                                Else
                                    If CInt(date_out3 - Due_Date) <= -7 Then
                                        GetInvStatus = "Complete"
                                    Else
                                        If CInt(date_out3 - Due_Date) > -7 Then
                                           GetInvStatus = "Complete Over Due"
                                        Else
                                           GetInvStatus = "In Process"
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
               End If
            End If
        End If
    End If
End Function


ส่วนในคิวรี่ ช่องฟิลด์ของ status_Report ก็ควรจะเป็น

status_Report : GetInvStatus([date_out3],[status_inv]),[date_out3_auto],[Due_date])
4 @R22505
ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1589s