แสดงกระทู้

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 4
19
มันขยายไม่ได้แล้วจริงๆครับ ผมปรับ width เป็น maximum แล้ว ตอนเปิดฟอร์มจึงแสดงผลได้แค่ครึ่งจอครับ


ที่คุณ UnKnown บอกมาคือไม่ได้กำหนดขนาดฟอร์มใช้ใหญ่เท่าขนาดจอครับ
แต่หมายถึงการกำหนดความละเอียด หรือ pixel ของเครื่องคอมที่จะแสดงบนหน้าจอทีวีมากกว่า
ยิ่งความละเอียดหน้าจอคอมยิ่งมากการแสดงผลที่ จอทีวีก็จะยิ่งใหญ่ขึ้น

และผมลงค้นข้อมูลการกำหนดให้ แสดงผลเต็มหน้าจอ monitor ลองดูจากเว็บไซส์นี้ครับ
มีตัวอย่างโค๊ด และ ไฟล์ access ให้ลองใช้งานและดูการแสดงผลด้วย

https://codedocu.com/Office-365/Access/Basics/vba-Code/Automatically-adjust-Access-forms-to-the-maximum-monitor-size?2505
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

20
B > รับ PIPE 20 M ......

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

21
บันทึก เปิดใหม่ ใช้ไม่ได้แล้วครับ
แต่ถ้าเปิดใหม่มาแล้วสร้าง combo box ใหม่ จะใช้ได้ครับ ทำวนไป

แต่สังเกตว่าเวลาเราพิมพ์ข้อความลงไปแม้ว่าจะพิมพ์ถูกต้องครบทุกตัวอักษร แต่มันก็แจ้งว่าข้อความที่พิมพ์ไม่ตรงถูก ต้องเลือกเท่านั้น
งงจริงครับ -..-



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

22
Access Options > Current Database > Display Document Tabs
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

23
ถ้าหากจะใช้การตัดวันที่ ที่ผ่านมาออกไปแสดงเฉพาะวันที่ปัจจุบันเป็นต้นไปยังไม่เคยทำครับ

แต่ถ้าจะใช้การกำหนดเงื่อนไขว่าถ้าเลือกวันที่ๆผ่านมาแล้วให้แจ้งเตือนและให้ระบุใหม่ก็ลองแบบนี้
สมมุติ textbox เลือกวันที่ ชื่อ txtDatePick

Private Sub txtDatePick_AfterUpdate()
If Me.txtDatePick < Date() Then
MsgBox "ไม่สามารถเลือกวันที่ย้อนหลังได้", vbCritical, "แจ้งเตือน"
Me.Text0 = Null
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

24
ท่านไปจับ Event Before Update ก็ไม่ได้อยู่แล้วครับ
เพราะตัวแปรที่เก็บค่าไว้จะถูกให้รับค่าใหม่ก่อนที่จะได้แสดงผล
ตรงที่ท่านเรียกใช้ NameDocinSu นั้นท่านจะมาใส่ไว้ใน beforupdate ไม่ได้ครับ
ควรจะให้ทำงานที่ event อื่นแล้วค่อยมาเรียกใช้ OldItem ใน BeforeUpdate เอา
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

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

26
ยอดเยี่ยมมากๆครับ  :love:
อาจจะมีวิธีอื่นๆที่ง่ายกว่านี้ แต่วิธีนี้สาย DIY คิดได้แค่นี้ แต่ก็สามารถนำไปใช้งานได้เหมือนกัน
ส่วน Left , Mid , Right
บางคนเขาก็จะใช้ Mid อย่างเดียวเลยก็ได้เหมือนกัน เพราะมันสามารถกำหนดช่วงของการนับได้ทั้งหมดอยู่แล้ว
แต่ผมใช้ทั้งสามแบบ เพื่ออยากให้ได้ศึกษาการใช้ Function เหล่านี้ไปประยุกต์ใช้กับงานอื่นๆ ต่อได้ครับ
ขอบคุณที่ช่วยอธิบายได้ละเอียดมากๆครับ

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

27
ถ้าหมายถึงชื่อฟิลด์คือ Approved, ชื่อ Option Group คือ O, Checkbox Yes ที่ผูกอยู่ภายใน Option Group ตั้งค่าเป็น 1, No ตั้งค่าเป็นค่าอื่นๆที่ไม่ใช่ 1 

แต่ไม่รู้ว่า O คือค่าที่ต้องการอัพเดตลงเรคอร์ด หรือเป็นเงื่อนไขที่เลือกเรคอร์ดที่จะอัพเดต ถ้าเป็นกรณีแรก ก็จะได้โค้ดเป็นลักษณะ
โค๊ด: [Select]
CurrentDB.Execute "update [P] inner join [I] on [P].[ITEM] = [I].[ITEM] set [P].[Approved] = " & iif(Me.O=1, "TRUE", "FALSE") & " where [I].[PK] = xxx", dbFailOnError
ถ้ากรณีที่สอง ก็จะเป็น
โค๊ด: [Select]
CurrentDB.Execute "update [P] inner join [I] on [P].[ITEM] = [I].[ITEM] set [P].[BALQTY] = [I].[FWQTY] - [I].[ISSUEQTY] where [I].[PK] = xxx and Approved = " & iif(Me.O=1, "TRUE", "FALSE") , dbFailOnError
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

28
ห้อง MS Access / : ความเข้าใจ .Tag code vb access
« เมื่อ: 17 ก.ย. 63 , 00:06:50 »
.Tag property คือพื้นที่ว่างๆในคอนโทรลต่างๆที่ให้เราใส่ค่าอะไรลงไปก็ได้ เปรียบเหมือนตัวแปรนึง ไม่มีผลต่อการทำงานหรือคุณสมบัติใดๆต่อตัวคอนโทรลนั้นๆ ความหมายของค่าก็แล้วแต่เราจะกำหนดเอาเอง ในงานที่ผมเคยใช้ ก็เช่นตอนก่อนจะบันทึก ผมก็จะวิ่งอ่านแต่ละคอนโทรลดูว่า .Tag ไหนมีข้อความบ้าง ถ้ามี แต่ผู้ใช้ไม่ได้เป้อนค่าลงคอนโทรลนั้น ก็จะเอาข้อความใน .Tag ไปแสดงเป็นข้อความเตือนให้ผู้ใช้รับรู้ว่าข้อมูลที่ขาดหายไปมีอะไรบ้าง ผมก็จะได้ไม่ต้องมาเขียนโค้ดเช็คทีละคอนโทรล ซึ่งแต่ละฟอร์มก็มีคอนโทรลที่แตกต่างกัน ผมก็จะสามารถเขียนโค้ดเป็น Public Function ที่ทำการเช็คเอาไว้แค่ที่เดียว โค้ดเดียว ก็พอ เช่น ในเท็กซ์บ็อกซ์ Customer Name ผมก็ใส่คำว่า "ชื่อลูกค้า", ในเท็กซ์บ็อกซ์ Purchase Order ก็ใส่คำว่า "เลขที่ใบสั่งซื้อ" เป็นต้น

ส่วนในบรรทัดแรกนั้น เป็นการเช็คว่าถ้า .Tag ไม่มีค่า , แต่จริงๆไม่มีความจำเป็นต้อง & กับ "" เพียงเขียนว่า if txtID.Tag = "" then ก็พอแล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

29
Make Table Query พอจะมีอ็อปชั่น IN เพื่อสร้างเทเบิลในฐานข้อมูลอื่นได้ครับ
SELECT field1, field2, ... INTO new_table IN "drive:\path\...\file_name.accdb" FROM source_table;

แต่ก็ตามที่คุณ Unknown บอกครับ เราสามารถ JOIN ลิงค์เทเบิลจากฐานข้อมูลอื่น กับ เทเบิลในฐานข้อมูลเราได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

30
ห้อง MS Access / : รวมฟิวส์ Text
« เมื่อ: 31 ส.ค. 63 , 16:03:16 »
เราสามารถที่จะพอทำได้ครับ โดยใช้การกำหนด ประกาศตัวแปรเป็น Public นะครับ
ผมสมมุติ text1 ถึง text3 และ textbox แสดงชื่อ total
เพราะโดยปกติ .Text จะใช้ได้กับ คอนโทรลที่ โฟกัสอยู่เท่านั้น
เราจึงควรสร้างตัวแปรขึ้นมาเก็บค่าไว้ก่อนเพื่อนำไปต่อกับ ตัวแปรต่อๆไป ครับ

ดังตัวอย่างโค้ดนี้

โค๊ด: [Select]
Option Compare Database
Public strText1, strText2, strText3 As Variant

Private Sub Form_Current()
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub

Private Sub Text1_Change()
If Len(Me.Text1.Text) > 0 Then
strText1 = Me.Text1.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
Private Sub Text2_Change()
If Len(Me.Text2.Text) > 0 Then
strText2 = Me.Text2.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
Private Sub Text3_Change()
If Len(Me.Text3.Text) > 0 Then
strText3 = Me.Text3.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

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

32
ควรสร้างเท็กซ์บ็อกซ์ชื่อเดียวกันแต่มีเลขลงท้ายไล่ไปตั้งแต่ 1 ถึง 12   สมมุติชื่อ Textbox1 - 12 
ใส่ sub procedure ไว้ในฟอร์ม

Private Sub CopyText(N As Integer)
   Dim I As Integer

   For I = N+1 to 12
      Me("Textbox" & CStr(I)) = Me("Textbox" & CStr(N))
   Next
End Sub

และในทุก AfterUpdate event procedure ของ Textbox1 - 11 ก็แค่ใส่โค้ด
   Call CopyText(เลขท้ายของ Textbox)
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

33
ผม DIY เอานะครับโดยเพิ่มฟิลล์ GetReport ไว้ในตาราง TaxRegis นะครับ
แนวทางคือ ถ้าเราติกเลือกแล้ว จะทำอย่างไรให้ข้อมูลที่เลือกนี้ สามารถไปแสดงบนรายงานได้ ผมเลยใช้การใส่ค่า Picking ไว้เพื่อใช้ในการ Criteria ไปแสดงบนรายงานนะครับ (ดูโค้ดที่  AddPickingReport นะครับ)
โดยผมจะใช้การลบ Picking ออกทุกครั้งที่กด บันทึกระเบียน เพราะเราต้องการค่าจากการติ๊กใหม่แล้วนั้นเอง
โดยเราใช้ Me.RecordsetClone เข้ามาใช้ในการจัดการกับ Recordset บน form ครับ

โค้ดที่ปุ่มบันทึก

โค๊ด: [Select]
Private Sub Command24_Click()
Call ClearPickingReport
DoEvents
Call AddPickingReport
End Sub
Sub ClearPickingReport()
Dim RS As DAO.Recordset
    Set RS = CurrentDb.OpenRecordset("TaxRegis", dbOpenDynaset)
    If Me.Dirty = True Then
    Me.Dirty = False
    End If
        RS.MoveFirst
        Do While Not RS.EOF
            If RS("GetReport") = "Picking" Then
                RS.Edit
                RS("GetReport") = Null
                RS.Update
            End If
            RS.MoveNext
        Loop
    RS.Close
    Set RS = Nothing
End Sub
Sub AddPickingReport()

Dim RSt As DAO.Recordset
    Set RSt = Me.RecordsetClone
        RSt.MoveFirst
        Do While Not RSt.EOF
            If RSt("ฎีกา/ส่งตรวจ") = True Then
                RSt.Edit
                RSt("GetReport") = "Picking"
                RSt.Update
            End If
            RSt.MoveNext
        Loop
        RSt.Close
       Set RSt = Nothing
       Me.Dirty = False
       DoCmd.OpenReport "TaxRegis_Check_Yes", acViewPreview
End Sub

Recordsource ของ Report

โค๊ด: [Select]
SELECT TaxRegis.* FROM TaxRegis WHERE ((Not (TaxRegis.GetReport) Is Null));
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

34
ห้อง MS Access / : รวมตัวเลขไม่ได้
« เมื่อ: 29 ก.ค. 63 , 14:14:16 »
ไม่ได้ไปดูรายละเอียดนะครับ แต่จะแนะนำว่าให้เลี่ยงการใช้ Round(N, D) เพราะเมื่อหลักต่อไปที่จะปัดเศษมีค่าเป็น 5 เขาจะไม่ปัดขึ้นเสมอไป เขาจะใช้วิธี Banker Rounding ซึ่งตามกฏจะปัดขึ้นหรือลงไปยังเลขคู่ที่ใกล้ที่สุด  เช่น Round(0.245, 2) ถ้าปัดขึ้นจะเป็น 0.25 แต่ปัดลงจะได้ 0.24 ดังนั้นเขาก็ปัดลงแทน จะได้เป็น 0.24  และ Round(0.235, 2) ก็จะได้ 0.24 เช่นกัน   แต่ Access ยิ่งมั่วไปกว่านั้นในค่าตัวเลขบางตัว เช่น Round(1.245, 2) ก็ควรจะเป็น 1.24 แต่กลับเป็น 1.25 ไปซะอย่างงั้น ซึ่งขัดกับ Banker Rounding ไปเสียอีก

ถ้าจะปัดเป็น 2 หลัก ให้ใช้เป็น CDec(Format(N, "0.00")) ดีกว่าครับ แต่ถ้าแสดงเฉยๆไม่ได้เอาไปคำนวน ก็ใช้แค่ Format(N, "0.00") ก็พอ

อีกอย่างที่ขอแนะนำคือ อย่าใช้ประเภทข้อมูล Number-Single หรือ Double เพราะจะเก็บค่าที่ไม่ตรงกับข้อมูล โดยจะมีผิดเพี้ยนในทศนิยมตำแหน่งหลังๆได้ ควรใช้ Number-Decimal แล้วกำหนด Scale property เป็นจำนวนทศนิยมที่ต้องการเก็บ จะทำให้การคำนวนตัวเลขที่มีทศนิยมได้ตรงตามความจริง
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

35
ตอบกระทู้ตัวเอง ได้ข้อคิดจากเวปบอร์ดนี้ครับ แก้ปัญหาที่ติดคือ ใช้ ฟังก์ชั่น  Round([x],2) 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

36
พึ่งคิดได้ว่าก็ใช้คำสั่งให้ทุกปุ่มที่มีซ่อนก่อนแล้วค่อยมาสั่งแสดงตามตัวเลขที่หลังอีกที  :meaw:

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

Me.Command1.Visible = False
Me.Command2.Visible = False
Me.Command3.Visible = False
Me.Command4.Visible = False

GetNum = Me.Text5
    Select Case GetNum
        Case "1": Me.Command1.Visible = True
        Case "2": Me.Command2.Visible = True
        Case "3": Me.Command3.Visible = True
        Case "4": Me.Command4.Visible = True
    End Select
End Sub

โค้ดข้างบนสามารถลดรูปลงมาได้นะครับ พร้อมกับรองรับกรณี Text5 ไม่ได้เป็นตัวเลข

   Dim I   As Integer
   Dim J   As Integer

   If IsNumeric(Me.Text5) Then J = CInt(Me.Text5)
   For I = 1 to 12
      Me("command" & Cstr(I)).Enabled = (I = J)
   Next

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

หน้า: 1 [2] 3 4