สมัครสมาชิก

แสดงกระทู้

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]
1
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 10 ธ.ค. 61 , 14:25:36 »
ที่บอกว่า "มันเหมือนเกินขีดจำกัด และขึ้น error" มันมีปัญหายังไงหรือครับ เท่าที่ดูทั้งการใช้ IIF() หรือใช้ฟังก์ชั่น Switch() มันก็ใช้ได้นะครับ ผมเคยเขียนซ้อนกันเยอะกว่านี้อีก

@UnKnown ทำให้ผมนึกถึงรูปที่เค้าล้อคนที่ชอบเขียน If ซ้อน If กันเยอะๆ รูปนี้เลยครับ

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

2
ทดสอบเปลี่ยนเดือน เลขสามตัวท้ายไม่กลับไปเริ่มนับ 001 นะครับ (ฉบับมาโครก็เช่นเดียวกัน)

  RunnungNum    myDate    Data 
  6107001   26-07-18    11
  6107002   26-07-18    22
  6108003   01-08-18    33
  6108004   01-08-18    44
  6109005   01-09-18    55
  6109006   01-09-18    66


ก็ไม่เปลี่ยนสิครับ เพราะลืมทำเงื่อนไขนั้นไว้

ลองดูไฟล์ใหม่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

3
ลองดูตัวอย่างนี้ครับ Fix พศ ไว้ตลอด
โค๊ด: [Select]
Private Sub Data_AfterUpdate()
Dim fixyear As String
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then
Me.RunnungNum = Format(Me.txtDate, "YY") & Format(Me.txtDate, "MM") & Right("00" & DCount([myDate], "[tblRunningNumber]") + 1, 3)
ElseIf GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <> 7 Then
fixyear = bYear(Me.txtDate)
Me.RunnungNum = Right(fixyear, 2) & Format(Me.txtDate, "MM") & Right("00" & DCount([myDate], "[tblRunningNumber]") + 1, 3)
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

4
ผม test ทั้งมาโครและโมดูลของคุณปิ่นณรงค์แล้วไม่พบปัญหาใดๆ

การตั้งค่า Windows ผมก็ตั้งเหมือนกับของคุณ

ผมใช้ Office 365 (2016) ปัญหาน่าจะอยู่เครื่องคุณแล้วล่ะ

ลองตั้งค่า Access ของคุณเป็นภาษาอังกฤษดีกว่าครับ

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

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

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

7
ห้อง MS Access / : สร้าง QR Code
« เมื่อ: 16 พ.ค. 61 , 15:51:06 »
คือจะประมาณว่า ถ้าโปรแกรม MS Access เป็นแบบ
32bit ให้ใช้ไฟล์ QRCode_x86.dll
64bit ให้ใช้ไฟล์ QRCode_x64.dll
ไม่เกี่ยวกับ Windows ครับ Windows จะเป็น 32bit หรือ 64bit ก็ได้ แต่ทว่า โฟลเดอร์ระบบมาตรฐานของ Windows 32bit กับ 64bit มันใช้โฟลเดอร์คนละตัวกันคือ
Windows 32bit เราต้องก๊อปปี้ใส่ในโฟลเดอร์ Windows\system32
Windows 64bit เราต้องกีอปปี้ใส่ในโฟลเดอร์ Windows\sysWOW64

สรุปคือ: ถ้าคุณใช้ MS Access 64bit ให้ก๊อปไฟล์ QRCode_x64.dll ไว้ใน Windows\sysWOW64 ได้เลย (เพราะ Access 64bit ต้องใช้ Windows 64bit อยู่แล้ว) แต่หากคุณใช้ MS Access 32bit ต้องดูว่ารันบน Windows 32bit หรือ 64bit ถ้า Windows เป็น 32bit ก็ใช้ไฟล์ QRCode_x86.dll ก๊อปปี้ใส่ในโฟลเดอร์ Windows\system32 แต่หากรันบน Windows 64bit ก็ก๊อปปี้ไฟล์ QRCode_x86.dll ใส่ในโฟลเดอร์ Windows\sysWOW64 แทนครับ

ปล. จริงๆแล้วมันสามารถเขียนโค้ดให้รัน Dll ไฟล์จากในโฟลเดอร์ที่เรากำหนดได้เลยโดยไม่ต้องไปก๊อปใส่เครื่องให้ยุ่งยาก รวมทั้งฟอนต์ด้วย แต่ต้องใช้การเขียนโค้ดอีก ซึ่งมันจะยืดหยุ่นกว่ามาก ไม่ต้องทั้งเพิ่มฟอนต์ QRCode และ ไฟล์ dll ลงในเครื่องเลย สามารถเรียกรันในโฟลเดอร์เดียวกับฐานข้อมูลเราได้เลย แต่มันต้องเขียนโค้ดอีกพอสมควร ในคลิปที่ผมทำเน้นความง่าย เลยไม่ได้ทำในส่วนนี้ให้ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

8
ห้อง MS Access / > พิมพ์ออกเป็นไฟล์ PDF
« เมื่อ: 11 พ.ค. 61 , 13:09:46 »
ถ้าหมายถึงแต่ละหน้ามาจากแต่ละ Report ต่างกัน ให้นำแต่ละ Report มาใส่เป็น Sub Report ใน Report เปล่าๆสักตัวเหมือนอย่างในรูปที่มี WCH1, WCH2, WCH3 แล้วกำหนด Can Grow และ Show Page Header and Page Footer ของ Sub Report Control เป็น Yes และเพิ่ม Page Break Control คั่นระหว่างแต่ละ Sub Report เพื่อให้ขึ้นหน้าใหม่ทุกครั้งที่พิมพ์ Sub Report ตัวต่อไป ตอนพิมพ์ก็เลือกเครื่องพิมพ์ที่เป็น Pdf Printer ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

9
ใช่ครับถามมาหลายๆหัวข้อหลายๆแบบผมก็จะได้ทดลองทำไปด้วยครับ ได้เรียนรู้ไปในตัว โดนใจหรือไม่ หรือไม่ตอบโจทย์ หรือต้องเพิ่มเติมยังไง เราจะได้มาทำกันผมก็เริ่มต้นจากบอร์ดนี้ตั้งแต่ 0 เหมือนกันครับ ได้เจออาจารย์ TTT (FC แกเลย) และอาจารย์ท่านอื่นๆ ได้ศึกษา Code VBA  หลายๆแบบ และอาจารย์ที่ทำให้ผมสามารถทำโปรแกรมตัวแรกได้เลยก็คืออาจารย์วรพจน์ครับ ถ้าท่านไม่เป็นเลยเข้ามาถามผมว่าก็ดีแล้วเผื่อคนอื่นจะได้เข้ามาศึกษาจากโจทย์ที่เราทำกันไว้ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

10
ห้อง MS Access / > เปลี่ยนแป้นภาษาด้วย VB
« เมื่อ: 26 มี.ค. 61 , 13:25:36 »
เมื่อกดเครื่องหมาย * ใน textbox1 แล้วให้แป้นพิมพ์เปลี่ยนเป็นภาษาอังกฤษ เราต้องเขียนโค๊ต อย่างไรครับ

สามารถทำได้ครับ กรณีที่เรากดปุ่ม * แล้วให้เปลี่ยนภาษาตามที่เรากำหนดไว้สามารถทำได้ดังนี้
ผมกำหนด textbox ชื่อ text1

คำสั่งบน Module

โค๊ด: [Select]
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32.dll" (ByVal mylanguage As Long, Flag As Boolean) As Long
Private Const Eng = 1033 
Private Const Th = 1054
Sub keyEng()
Call ActivateKeyboardLayout(Eng, True)
End Sub
Sub KeyTh()
Call ActivateKeyboardLayout(Th, True)
End Sub

คำสั่ง Event ที่ Text1
โค๊ด: [Select]
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyMultiply Then
Call keyEng
End If
End Sub
ตัวอย่างการใช้งานด้านล่างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

11
เรื่องวุ่นๆ ของออบเจ็กต์และคอนโทรล

สมัยเรียน OOP (Object-Oriented Programming) รู้สึกตัวเองได้เปรียบเพื่อนร่วมชั้นตรงที่ใช้ Access มาก่อนชาวบ้าน เพราะถูกสอนจาก Microsoft ว่า Access น่ะ เป็นโปรแกรมที่ใช้ระบบ OOP
แต่พอเรียน OOP จริงๆ ไม่รู้ทำไมความเชื่อต่างๆ มันค่อย “แฟบ” ลงเรื่อยๆ เพราะยิ่งรู้มาก ก็ยิ่งรู้สึกว่า Access นั้นไม่ใช่ OOP แบบเต็มร้อย แต่ก็ถือว่า “เกือบ” ล่ะ อีกนิดเดียวก็ OOP แล้ว
อธิบายมากไปเดี๋ยวเผลอหยิบเรื่องเครียดมาเล่า ใครอยากรู้ว่า OOP เป็นอย่างไรไปถามอากู๋เอาเอง แต่เลือกเว็บที่น่าเชื่อถือหน่อยนะครับ พวกสถานศึกษาอะไรงี้
เรามาว่าเรื่อง Access กันดีกว่า
ถ้าใครศึกษา Access อย่างจริงจังย่อมหนีไม่พ้นที่จะเจอคำว่า “ออบเจ็กต์” และ “คอนโทรล” อย่างแน่นอน เพราะ Access นั้นถูกออกแบบมาด้วยเทคโนโลยีที่ล้ำกว่า Excel
เรียกว่า Excel นั้นว่าฉลาดแล้วก็จริง เพราะใช้เทคโนโลยีแบบ Neuro ในการออกแบบในสมัยแรกๆ พอมาสมัยหลังๆ ก็เอา XML มาใส่ จนกลายเป็น Excel ฉลาดๆ แบบปัจจุบัน แต่ Access มีมากกว่านั้นครับ คือใส่พวก Database Engine ระดับ OOP เข้าไป ถึงจะใส่ได้ไม่หมดก็เถอะ (แต่ไหงไม่เก่งภาษาไทยก็ไม่รู้)

คราวนี้พอแตะ OOP เข้าไป ก็หลีกไม่ได้ที่เวลาเขียนโค้ด หรือสั่งงานจะมีเรื่องของออบเจ็กต์เข้าไปด้วย
วิธีการมองคือทุกสิ่งอย่างที่เราเห็นได้ด้วยตาในหน้าจอ แบบนี้คือออบเจ็กต์ไม่ว่าจะเป็นตาราง ฟอร์ม รีพอร์ต ฯลฯ ล้วนเป็นออบเจ็กต์
แม้กระทั่ง Text Box, Combo Box อะไรพวกนี้ก็เป็นออบเจ็กต์ครับ
แต่ทีนี้ออบเจ็กต์พวก Text Box, Combo Box นี่ต้องวางอยู่บนออบเจ็กต์พวก ฟอร์มหรือรีพอร์ต
การจะเรียกว่าออบเจ็กต์อาจสร้างความสับสนให้ผู้ใช้งานได้ เขาก็เลยเรียก ออบเจ็กต์พวกที่ต้องวางอยู่บนออบเจ็กต์ว่า “คอนโทรล”
ดังนั้นเวลาพูดถึง “คอนโทรล” ก็จะหมายถึงออบเจ็กต์ที่วางอยู่บนออบเจ็กต์อีกที
แล้วเรื่องพวกนี้ก็เลยติดมาที่การเขียน Code ด้วย ถึงแม้ VBA ของ Access จะอิงกับ VB6 ก็เถอะ
เช่น
Form_frmData.txtDescription.Visible = False
Form_frmData เป็นออบเจ็กต์ประเภทฟอร์มชื่อ frmData
txtDescription เป็นคอนโทรลที่วางอยู่บนฟอร์มนี้
Visible คือ Property หรือคุณสมบัติของคอนโทรล ที่กำหนดให้มีค่าเป็น False
ทีนี้เราก็สามารถแยก “คอนโทรล” กับ “ออบเจ็กต์” ออกจากกันได้แล้วนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

หน้า: [1]