แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - UnKnown

หน้า: [1] 2 3
1
ใช้
DoCmd.RunCommand acCmdSaveRecord
หรือ
Me.Dirty = False
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

2
ห้อง MS Access / : ไฮไลท์ row ที่โฟกัส
« เมื่อ: 19 มิ.ย. 63 , 16:48:52 »

การสร้าง Highlight ให้กับ Current Record ลองดูตัวอย่างนี้ครับ

1.สร้าง textbox unbound ขึ้นมา 1 อันชื่อ txtHighlight แล้วซ่อนไว้ ไม่ต้องแสดง

2.เลือก textbox ตรง Detail ทั้งหมด แล้วเลือกไปที่ี การจัดรูปแบบตามเงื่อนไข ดังภาพด้านล่าง


3.กำหนดเงื่อนไข นิพจน์ โดยสร้างเงื่อนไขเช็คว่า ถ้าเรคคอร์ดปัจจุบัน = txtHighlight ก็จะแสดง สีตามที่เรากำหนด ดังรูป


4.กำหนดโค้ด Event Form_Current()

Private Sub Form_Current()
Me.txtHighlight = Me.[ID]
End Sub

หมายเหตุ

ถ้าคุณอยากให้ได้แบบการเลือกทีละหลายๆ เรคคอร์ดโดยใช้ In เหมือนตัวอย่างเก่าที่เคยทำ ก็นำมาปรับใช้ได้เลยครับ ใช้วิธีแบบนั้นได้เหมือนกัน
โดยกำหนดเงื่อนไข แบบตัวอย่างข้อ 2
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

3
มันมีใน active x นะครับลองไปเล่นดู

โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

4

ลองไปทดสอบดูนะครับ ผมใช้การจับลำดับของ combobox โดยใช้ Active Control
สาย DIY อีกแล้วนะครับอิอิ โดยใช้ Call select_case ใน Event AfterUpdate() ทุกอันนะครับ
โดยผมจะกำหนด combobox เป็น Nboss_1 แทนของเดิมคือ 01 นะครับ
ข้อดีมีโค้ดชุดเดียวมีกี่ combobox ก็ได้ครับไม่จำกัด

เช่น
Private Sub Nboss_1_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_2_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_3_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_ลำดับ N_AfterUpdate()
Call select_case
End Sub

โค๊ด: [Select]
Sub select_case()
Dim strTextName,GetString,GetNum As String

strTextName = ActiveControl.Name
GetNum = Right(strTextName, Len(strTextName) - InStrRev(strTextName, "_"))
Me("ne_" & GetNum) = Me(strTextName).Column(4)
GetString = Me(strTextName).Column(4)

Select Case GetString
        Case "Undead": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Earth": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Fire": Me("WinNE_" & GetNum).Value = "Water"
        Case "Water": Me("WinNE_" & GetNum).Value = "Wind"
        Case "Wind": Me("WinNE_" & GetNum).Value = "Earth"
        Case "Poison": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Shadow": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Holy": Me("WinNE_" & GetNum).Value = "Shadow"
       Case Else: Me("WinNE_" & GetNum).Value = ""
    End Select
 
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

5
ทำบนฟอร์มหรือเปล่าครับ ที่จริงแล้ว ไม่ใช่แค่สินค้ามีค่าเป็น 0 นะครับ
วิธีการผมว่าน่าจะสร้างการเปรียบเทียบจำนวนคงเหลือ กับ จำนวนเบิกด้วย เช่น
สินค้าคงเหลือ = 3 แต่เบิก = 5 แบบนี้ก็ไม่ได้อยู่แล้ว มันติดลบ
ใช้ IF check ก็ได้เช่น

IF สินค้าเบิก > สินค้าคงเหลือ or สินค้าเบิก = "0" Then
msgbox "ไม่สามารถเบิกได้เกินจำนวนที่มีอยู่ คงเหลือปัจจุบัน" & สินค้าคงเหลือ & " อัน"
End if
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

6
คือคำถามคุณกว้างมากจนไม่รู้จะตอบอย่างไร
ก่อนอื่นคุณต้องถามตัวเองก่อนว่าถ้าไม่ต้องการให้ติดลบแล้วต้องการอย่างไรต่อครับ
1. ต้องการว่าถ้าค่าติดลบ แล้วให้แสดงเป็น 0 แทน
2. ต้องการว่าถ้าค่าติดลบแล้วให้ใส่ข้อมูลนั้นไม่ได้
3. ต้องการว่าถ้าค่าที่จะใส่แล้วทำให้ติดลบ ก็แนะนำว่าให้ใส่ค่าอะไรที่จะพอดีออกมาเป็น 0 แทน

อันนี้ผมคิดแบบฉุกเฉินก็ได้ตั้ง 3 แบบ แล้ว ดังนั้นต้องตอบตรงนี้ให้ได้ก่อนครับ ถึงจะสามารถตอบต่อได้
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

7
สามารถใช้ Tab Control เพื่อใช้เป็นคอนเทนเนอร์บรรจุคอนโทรลอื่นๆรวมทั้งซับฟอร์มคอนโทรลได้อีกชั้นนึง   Tab Control ตัวนึงสามารถมีได้หลาย Page อย่างในรูป ตย.ข้างล่าง ก็มี Page "รายการขาย" และ "ลงบัญชี"
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

8
Private Sub Text185_GotFocus()
If Isnull(Me.txt_shop_id) Then
    MsgBox "ป้อนข้อมูล สาขา ก่อนนะ"
    Me.txt_shop_id.SetFocus
    End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

9
หลักการคือ พอขึ้นเรคอร์ดใหม่ปั๊ป ก็เอา "กล่องเป้าหมาย" ของบรรทัดสุดท้ายมาใส่พร้อมบันทึกเรคอร์ดครับ ก็ใส่โค้ดนี้ลงไปใน Form_Current event procedure

โค๊ด: [Select]
Private Sub Form_Current()

    Dim RS As DAO.Recordset
   
    If Me.NewRecord Then
        Set RS = Me.RecordsetClone
        If RS.RecordCount > 0 Then
            RS.MoveLast
            If Not IsNull(RS("ชื่อฟิลด์กล่องเป้าหมาย")) Then
                Me.ชื่อเท็กซ์บ็อกซ์กล่องเป้าหมาย = RS("ชื่อฟิลด์กล่องเป้าหมาย")
                DoCmd.RunCommand acCmdSaveRecord
            End If
        End If
        RS.Close
    End If
           
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

10
Me.QU_No = "QU" & Right([txtDateTH], 2) & Right("00" & DMax("[QU_No]", "[T_Quot v7]", "Left([QU_No],4) = 'QU'") & Right([txtDateTH], 2) + 1, 2)

แค่ใส่เครื่องหมายผิดที่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

11
ทำไม่ได้ค่ะ
เรา ต้องการให้ขึ้น Record ใหม่ แล้วให้เลขเป็น Autorun แล้วมันไม่ข้ามเลขค่ะ
ปกติถ้าลบ record ทิ้ง เลขที่เป็น Autorun จะรันข้ามไปเรย
Autorun ไม่จำเป็นว่าจะใช้ Datatype แบบ AutoNumber อย่างเดียวครับ ใช้แบบ Number แทนก็ได้เหมือนกัน

โดยเราสามารถใช้การสร้าง การรันตัวเลขไป ตามลำดับได้ โดยใช้ Event ของ ฟอร์มโดยใช้ Function Dmax เพื่อหาค่าสูงสุด นำมา +1 เพื่อให้ได้ลำดับต่อๆไปครับ
ผมจะทำตัวอย่างให้ได้ ลองส่งรูปตัวอย่าง Table รูปตัวอย่างฟอร์มที่ทำอยู่มาดูหน่อยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

12
ลองเข้าไปดูที่นี่นะคะ อ. TTT มีคำตอบอยู่ค่ะ

https://www.thai-access.com/topic_post.asp?CategoryID=1&TopicID=5420
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

13
แต่ถ้าเราเขียนคำสั่งที่จะทำ ให้อยู่ในบรรทัดเดียวกับ If ... Then ได้ เราก็ไม่ต้องมี End If ครับ เช่น

If A=1 Then B=2: C=3 Else B=4: C=5

หมายเหตุ เราใช้เครื่องหมาย : เพื่อคั่นแต่ละคำสั่งที่จะเขียนในบรรทัดเดียวกัน
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

14
ลองศีกษาฟังชั่น DateDiff() ดูครับ สิ่งที่จะได้คือเวลาที่สาย
จากนั้นใช้คำสั่ง If เพื่อใช้คัดกรองผู้ที่มาสาย = 1

ลองเพิ่มรูปแบบคำสั่งนี้เข้าไปใน Query ดูครับ LateChk: IIf(DateDiff("n",[StrtWrk],"08:00")<0,"1","")





ขอขอบคุณความรู้เกี่ยวกับ MS-Access จาก อ. สุภาพ ไชยา
ก็ฝากไว้เผื่อจะสามารถช่วยให้มิตรรักแฟนเพลงท่านหนึ่งท่านใด ก้าวพ้นปัญหาที่กำลังแก้อยู่ได้เร็วขึ้น
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

15
ถ้าใช้การสร้าง Unbound Control ไว้ส่วนหัวแล้วกรอกข้อมูลจากบนนี้ น่าจะพอทำได้คับ
ส่วนการให้ข้อมูลล่าสุดมาแสดงบนสุด ผมใช้การสร้างฟิลล์ อีกฟิลล์ datatype Date/Time กำหนด ค่าเริ่มต้นเป็น Now แล้วกรองค่าจากมากไปหาน้อยครับ
หรือถ้ามี ID แบบ Autonumber ก็เอามากรองได้เลยครับไม่ต้องสร้างฟิลล์เพิ่ม
ตัวอย่างด้านล่าง

โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

16
ที่จริงฟอร์ม ต้นฉบับหรือ ฟอร์มสำเนา ไม่ต้องเปิดขึ้นมาเพื่อจะพิมพ์ก็ได้คับ
ผมสมมุติ ฟอร์มต้นฉบับชื่อ Frm_original
           ฟอร์มสำเนาชื่อ Frm_Copy

คำสั่งที่จะนำไปวางที่ Event ที่ต้องการคือ
โค๊ด: [Select]
Private Sub BtnPrint_Click()

    DoCmd.SelectObject acForm, “Frm_original”, True
    DoCmd.PrintOut , , , , 1
    DoCmd.SelectObject acForm, “Frm_Copy”, True
    DoCmd.PrintOut , , , , 1

End Sub
เท่านี้ก็จะทำการปริ้น ทั้ง 2 ฟอร์ม โดยไม่ต้องเปิดฟอร์มขึ้นมาก็ได้คับ
หมายเหตุ ตรง DoCmd.PrintOut , , , , 1  การกำหนดจำนวนว่าจะปริ้นกี่แผ่นนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

หน้า: [1] 2 3