แสดงกระทู้

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 - Pongsak

หน้า: [1]
1
เจอเว็บแอ็บที่สามารถเจน Promptpay ID แล้วระบุยอดเงินลงไปได้ ทำให้คนอื่นสามารถออก QR Code Promptpay ได้โดยที่ไม่ต้องเปิดแอ็บธนาคาร(ถ้าไม่กลัวคนอื่นใส่ Promptpay ตัวเองหรือโกงโอนเงินให้คนอื่นอ่ะนะ)
https://genpromptpay.web.app

ส่วนถ้าจะให้ Access ทำงานได้แบบนี้ก็พึ่ง vba ต้องลองถาม github
https://github.com/pheerathach/promptpay
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

2
ตัวอย่าง Me.Recalc หรือ Me.???.Requery ผมจะสั่งให้มันทำงานเมื่อทำอะไรสักอย่างก่อน(ผมใช้ Me. นำหน้า)

โค๊ด: [Select]
Private Sub Cus_ID_Click()
        Cus_Tax_ID.Value = Cus_ID.Column(9)
        Cus_Name.Value = Cus_ID.Column(1)
        Cus_addess.Value = Cus_ID.Column(2) & "  " & Cus_ID.Column(3) & Cus_ID.Column(4) & "  " & Cus_ID.Column(5) & "  " & Cus_ID.Column(6) & Cus_ID.Column(7) & "  " & Cus_ID.Column(8) '& "."
        Cus_Note2.Value = Cus_ID.Column(10)
        Percent.Value = Cus_ID.Column(11)
        Me.F_Bill_v7_Item.Form.T902 = Me.Percent
    Me.Recalc
End Sub
Private Sub Cus_ID_AfterUpdate()
    Me.Cus_ID = Format(Me.Cus_ID.Value, "00000")
    Me.Recalc
End Sub
Private Sub Cus_ID_Enter()
    Me.Cus_ID = Format(Me.Cus_ID.Value, "00000")
    Me.Recalc
End Sub

โค๊ด: [Select]
Private Sub Ang1_GotFocus()
    Me.Ang1.Requery
End Sub
Private Sub Ang2_GotFocus()
    Me.Ang2.Requery
End Sub
Private Sub Ang3_GotFocus()
    Me.Ang3.Requery
End Sub
Private Sub Ang4_GotFocus()
    Me.Ang4.Requery
End Sub
Private Sub Ang5_GotFocus()
    Me.Ang5.Requery
End Sub
Private Sub Ang6_GotFocus()
    Me.Ang6.Requery
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

3
ลองใช้ DAO ดูนะครับผมไม่แน่ใจว่าได้ไหมแต่รุ่นเก่าๆ ใช้ตัวนี้
เช่น
 Dim rs As DAO.Recordset
 Dim rsOut As DAO.Recordset

ลองดูนะครับ
และเช็คตรง
หน้าเขียนโค้ด > Tool > Reference

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

4
รูปภาพที่อัพไปกด"Copy BBCode"มาวางในกระทู้ครับ


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

5
Access เป็นจาก นามสกุล mdb มาเป็น accdb ตั้งแต่
Office 2007 ถ้าใช้รุ่นต่ำกว่านี้ จะเปิดไม่ได้ครับ

ถ้าอยากจะได้คำสั่งในไฟล์ที่ส่งมา ก็นำไฟล์ไปเปิดใน Office
ตั้งแต่รุ่น 2007 ขึ้นไป แล้ว copy code ใน notepad แล้ว
ค่อยเอามาเปิดในเครื่องที่มี office 2003 แล้วค่อย copy
ใส่ปุ่มคำสั่งครั้บ

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

6
ตรงประเภทรถ กับลำดับที่ อยากให้แสดงบรรทัดเดียว




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

7
ต้องการ Requery ใน ComboBox ทุกครั้งที่เปลี่ยน Records ต้องใส่ใน Event ตัวไหนใน Form ครับ

ท่านกดเปลี่ยน Record ตรงไหน ก็ใส่โค้ดตรงนั้นได้เลยครับ

ถ้าท่านสร้างปุ่มสำหรับเปลี่ยน Record ขึ้นมาก็ใช้แบบนี้ได้เลย
สมมุติปุ่มชื่อ BtnNext
โค๊ด: [Select]
Private Sub Btn_Next_Click()
DoCmd.GoToRecord , , acNext
Me.ComboboxName.Requery
End Sub

สามารถ ใช้ได้หลายแบบนะครับ ลองนำไปปรับใช้ดูครับ

DoCmd.GoToRecord , , acNewRec  ไปยัง Record ใหม่
DoCmd.GoToRecord , ,acFirst ไปยัง Record แรก
DoCmd.GoToRecord , , acLast ไปยัง Record สุดท้าย
DoCmd.GoToRecord , , acNext ไปยัง Record ถัดไป
DoCmd.GoToRecord , ,acPrevious ไปยัง Record ก่อนหน้า





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

8
จากรูปที่อธิบายมีช่องให้ใส่ในฟอร์ม ชื่อ TextUpdate
เลือก event on click จากปุ่ม "บันทึก" ที่สร้างไว้ (ผมไม่รู้ว่าปุ่มชื่ออะไร แต่ผมตั้งชื่อเป็น cmdSave นะครับ)
เลือก code builder
พิมพ์ Me.TextUpdate = Date() (ให้โปรแกรมใส่วันที่ จากในเครื่อง ลงในช่อง TextUpdate)

จะได้เป็น

Private Sub cmdSave_Click()
Me.TextUpdate = Date()
End Sub

เพิ่มเติม1 : กรณี อยากได้ วันที่+เวลา ใช้ Now() แทน Date() ก็ได้ครับ
เพิ่มเติม2 : กรณี อยากให้แสดงผลเป็น รูปแบบอื่นๆ เช่น 1/7/64 ,02/09/2564 ใส่คำสั่ง Format() ช่วยได้ครับ
Me.TextUpdate = Format(Date(),"dd/mm/yyyy") -> 01/08/2564
Me.TextUpdate = Format(Date(),"d/m/yyyy") -> 1/8/2564
Me.TextUpdate = Format(Date(),"d/m/yy") -> 1/8/64

อย่าลืมเชื่อม TextUpdate กับ field เพื่อเก็บข้อมูลด้วยนะครับ

มัน error แบบนี้ครับ


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

9
ผมสมมุติ Formหลักชื่อ FrmMain
           SubForm ทางซ้ายชื่อ SubForm1
           SubForm ทางขวาชื่อ Subform2
           Table ของข้อมูลทางซ้าย ชื่อ EM มีฟิลล์ [รหัสพนักงาน] , [F3]
           Table ของข้อมูลทางขวา ชื่อ NEWEM  มีฟิลล์ [CODEEM] , [EM]
วิธีทำ
1.สร้างคิวรี่ขึ้นมา ใช้ Append Query ใส่ SQL และตั้งชื่อคิวรี่ตามต้องการเช่น QueryAppendToNewEm

INSERT INTO NEWEM ( CODEEM, EM )
SELECT EM.[รหัสพนักงาน], EM.F3
FROM EM
WHERE EM.[รหัสพนักงาน]=[forms]![FrmMain]![SubForm1].[Form]![รหัสพนักงาน];

2.ที่ปุ่มใส่โค้ดไปว่า

DoCmd.SetWarnings False
DoCmd.OpenQuery "QueryAppendToNewEm"
DoCmd.SetWarnings True
[Forms]![FrmMain]![Subform2].[Form].Requery
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

10


ตรง Date ผมใช้ Date() และ Time ใช้ Time() ปรากฏว่าเวลาเพิ่ม Row ไปใหม่ มันจะให้ทุก Row เป็นเวลาตอนนี้เลย
ถ้าอยากให้มันเป็นวัน,เวลา บอกเฉพาะ Row ไปว่าเพิ่มมาวันไหนเวลาไหน ไม่ทราบว่าต้องทำอย่างไรครับ
วิธีทำต้องมีฟิลล์ในตาราง เช่น TimeStamp ชนิดข้อมูล date/time
และมีเมื่อการอัพเดทข้อมูล ในฟอร์มกำหนดให้อัพเดทฟิลล์ timestamp  = NOW()  มันจะได้ทั้งวันที่และเวลา มาเลยครับ
เราจะได้ไม่ต้องสร้าง 2 ฟิลล์

หมายเหตุถ้าเมื่อมีการเพิ่มฟิลล์ใหม่กำหนดให้บันทึกเวลาด้วย
ให้กำหนด default Value ของฟิลล์นี้ในตาราง = Now() ไว้ได้เลย
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

11
ขอบคุณครับ อ.PNR ผมเขียนโคตเองไม่เป็น แต่เอามาแก้ไข แล้วเอาใช้งานได้
เบื้องต้น จะเอามาลองเปรียบเทียบความเร็วกับการใช้ Query ว่าอะไรเร็วกว่ากัน
แล้วก็ ดูรูปแบบ ผมเอาไปใช้งานอื่นได้อีกด้วย ของคุณอาจารย์มากๆ ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

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

13

ขอ Query Running sum ฟิลด์ Totel ครับ
โดย MCode เป็นตัวแปลตามชนิดวัสดุ
      MType เป็นตัวแปลถ้ารับ(เท่ากับ1)จะเอาค่าที่รับมาบวก ถ้าเบิก(เท่ากับ2)เอามาลบ
Table แรกชื่อ qMrep

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

14
ทำได้ 2 แบบด้วยกัน
แบบที่ 1
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่กำหนดดังนี้
SELECT Mytable.ID, IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth
FROM Mytable;
กำหนดชื่อคิวรี่ชื่อ QryCheckMonth
คิวรี่ด้านบน ท่านจะได้ข้อมูล ที่ถ้าหากปีเป็นปีปัจจุบัน และเดือนเป็นเดือนปัจจุบัน จะมีค่าเท่ากับ 1 ส่วนเดือนอื่นๆ ปีอื่นๆจะเท่ากับ 0

ต่อไปเขียนโค้ดไว้เรียกใช้เงื่อนไขในการเช็ค
Private Sub CheckAllowEdits()
Dim MonthCheck As String
MonthCheck = DLookup("CheckMonth", "QryCheckMonth", "ID =" & Me.ID & "")
If MonthCheck = 0 Then
Me.AllowEdits = False
Me.Undo
Else
Me.AllowEdits = True
End If
End Sub

ต่อไปเวลาจะนำโค้ดไปใช้ ก็ใส่ CheckAllowEdits ได้เลยครับ
อาจจะใช้ในเงื่อนไข หลังจากการค้นหาข้อมูลมาแสดงที่ฟอร์ม แล้วเช็คระบบการแก้ไข
หรือ ใช้ในปุ่มแก้ไขข้อมูลได้เลย เมื่อ User กดถ้าเ็นเดือนอื่นๆ มันจะ Undo ข้อมูลกลับทันทีและจะไม่สามารถกดพิมพ์เพิ่มอีกได้


แบบที่ 2 สามารถใช้กับ Formแบบ  Continuous Form ได้ดี
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่ ที่จะเป็น Record Source โค้ดจะเป็น
SELECT IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth, *
FROM Mytable;

เวลาเรานำ ข้อมูลลงมาบน Control ก็นำ Field CheckMonth ลงมาด้วย ตั้งชื่อ textbox ว่า CheckMonth เลย
โดยเราจะสามารถ กำหนดให้ซ่อนไว้ก็ได้ครับ ไม่ต้องแสดง
ต่อไปเราจะสร้างเงื่อนไขในการ ปิดการแก้ไขข้อมูลโดยใช้การจัดรูปแบบตามเงื่อนไข


กำหนดนิพจน์ตามภาพ




วิธีนี้เวลาแสดงในฟอร์มแบบ Continuous Form
ถ้าrecord ไหน CheckMonth = 0 จะถูก Enabled = false ทันที
คือกดแก้ไขไม่ได้เลย ถ้า CheckMonth = 1 ก็จะแก้ไขได้ปกติ

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

15
ห้อง MS Access / : กำหนด Format ตัวเลข
« เมื่อ: 24 เม.ย. 63 , 16:04:59 »
ข้อมูล ยอดเงิน นั้นน่าจะเป็น Datatype text ครับ
ลองใส่
Format([B4], "#,##0.00" )
ไม่หายครับอาจารย์
 ผมลืมให้ข้อมูลนี้ ผมใส่  Format(Nz([B4],0), "#,##0.00")
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

16
Private Sub CmdFind_Click()
Dim strFindName As String
Dim intCount As Integer

If IsNull(Me.TxtFind) Or (Me.TxtFind) = "" Then
MsgBox "ใส่ข้อมูลไม่ครบ โปรดตรวจสอบ"
Me.TxtFind.SetFocus
Else
strFindName = "SELECT * FROM [บุคคลากร] WHERE [ชื่อ-นามสกุล] LIKE '" & TxtFind & "*';"
Me.RecordSource = strFindName

intCount = DCount("*", "บุคคลากร", "[ชื่อ-นามสกุล] = '" & [Forms]![ชื่อฟอร์ม]![TxtFind] & "'")

If intCount > 1 Then
MsgBox "พบ " & intCount & " เรคคอร์ด", vbInformation, "ค้นหาRecord"

ElseIf intCount = 0 Then
MsgBox "ไม่พบข้อมูล", vbCritical, "ค้นหาRecord"
End If

Me.Requery
Me.TxtFind.SetFocus
Me.TxtFind = Null
End If
End Sub

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

17
เราลองคิดกลับไปยังระบบที่ออก PO ด้วยมือลงกระดาษ ดูว่าระบบงานเดิมทำยังไง เราอาจต้องออกแบบฐานข้อมูลและการทำงานของโปรแกรมให้ล้อไปกับระบบเดิม เช่น ในวิถีทางการลงบัญชี ถ้านำเข้าระบบแล้วและพบว่ามีอะไรผิด ก็ต้องห้ามแก้ ห้ามลบ แต่เปลี่ยนสถานะว่ายกเลิกใบนั้นไป และออกใบใหม่เท่านั้น ลองถามฝ่ายบัญชีดูครับว่ามีกฏระเบียบทางบัญชีว่ายังไง เพราะอาจต้องรองรับให้ บ.ตรวจสอบบัญชี เข้ามาตรวจสอบข้อมูลได้ด้วยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

หน้า: [1]