แสดงกระทู้

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

หน้า: [1]
1
ลองดูครับโค้ดทั้งหมดนี้ไปเปลี่ยนเฉพาะตำแหน่งของFloder ฐาน และ ตำแหน่งของ Floder ที่จะนำไปวาง

โค๊ด: [Select]
Private Sub CmbCopyFile_Click()
   Dim FSO As Object
    Dim FromPath As String
    Dim ToPath As String
    Dim I As Long
    Dim FileInFromFolder As Object

    FromPath = "C:\FloderA\"  '<< ตำแหน่ง Floder ของข้อมูลฐานหลัก
    ToPath = "D:\FloderB"    '<< ตำแหน่งของ Floder ที่จะวางฐานที่ Copy มาลงแต่จะวางทับข้อมูลฐานหลักฐานอันเก่าที่เคย คัดลอกมา

    If Right(FromPath, 1) <> "\" Then
        FromPath = FromPath & "\"
    End If
    If Right(ToPath, 1) <> "\" Then
        ToPath = ToPath & "\"
    End If

    Set FSO = CreateObject("scripting.filesystemobject")

    If FSO.FolderExists(FromPath) = False Then
        MsgBox FromPath & " ไม่มีไฟล์ในตำแหน่งที่ระบุ"
        Exit Sub
    End If
    If FSO.FolderExists(ToPath) = False Then
         MsgBox " ไม่พบ Floder ปลายทาง"
        Exit Sub
    End If
    I = 0
    For Each FileInFromFolder In FSO.getfolder(FromPath).Files
            FileInFromFolder.Copy ToPath
            I = I + 1
    Next FileInFromFolder   
If I = 0 Then
     MsgBox "ไม่มีข้อมูลที่จะCopy ข้อมูลไปไว้ที่ > " & ToPath, vbOKOnly, "โปรแกรมเวชระเบียน"
Else
     MsgBox "Copy ข้อมูลไปไว้ที่ > " & ToPath & "จำนวน " & I, vbOKOnly, "โปรแกรมเวชระเบียน"
End If
End sub
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

2
ก็ลงทะเบียน ActiveX ด้วยโค๊ด bat file ดังนี้
1.คัดลอกไฟล์ .dll หรือ .ocx ไปไว้ที่ system32 หรือ sysWOW64 แล้วแต่ bit
2.รีจีสเตอร์ regsvr32.exe %systemroot%\SysWOW64\.ocx

ประมาณนี้ครับ

ถ้าทำแล้วติดขัด ให้ทำใน safe mode

ถ้าทำใน safe mode ยังไม่ได้อีก ก็เป็นที่วินโดว์แล้วล่ะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

3
ที่ Event: On Key Down ให้ใส่ Code นี้เข้าไปครับ

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
 
    Select Case KeyCode
        Case 33, 34
        KeyCode = 0
    End Select
End Sub

แล้วกำหนด Key Preview = True
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

4
สำหรับชื่อ imageMso หาได้โดยไปที่ File> BackStageView เลือก Options > Customize Ribbons เมื่อนำเมาส์ไปวาง จะเห็นชื่อ imageMso ดังภาพตัวอย่าง (ImportAccess)
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

5
แก้เป็นแบบนี้ได้ไหม เป็นการกำหนดเงื่อนไขว่า ถ้า textbox barcode ว่าง ก็ให้ออกจากการทำงานที่เหลือ

โค๊ด: [Select]
Private Sub Command122_Enter()
On Error Resume Next
if isnull(me.Barcode) then
Me.Barcode.SetFocus
exit sub
else
Forms("Sale").subformsale.Form.Item_no = Barcode
subformsale.SetFocus
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Barcode"
Barcode.SetFocus
Barcode = Null
end if
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

6
ใช้การตรวจสอบค่าจาก Combobox แล้ว ใช้อ้างอิงกับชื่อรายงานใน ตาราง tblRCReport ที่ Field ReportName ครับ
1.ที่ RowSource กำหนดเป็น SELECT tblRCReport.ID, tblRCReport.ReportDescription FROM tblRCReport;
2. ที่ BoundColumn(คอลัมน์ที่ผูกไว้) กำหนดเป็น 1
3. ตรง Column Width(ความกว้างคอลัมน์) กำหนดเป็น 0ซม.;10ซม.
4. ตรง Event AfterUpdate ของ Combo1 ใส่โค้ดดังนี้คับ

โค๊ด: [Select]
Private Sub Combo1_AfterUpdate()
Dim SetReportName As String
SetReportName = DLookup("ReportName", "tblRCReport", "ID=" & Me.Combo1 & "")
DoCmd.OpenReport SetReportName, acViewReport
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

7
Regional settings > Administrative > Change System Locale > Thai
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

8
น่าจะต้อง Teamview ไปดูให้นะครับ ถ้าสะดวกก็แจ้ง user และ รหัสผ่าน teamview มาทาง INBOX เดี่ยวผมดูให้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

9
ขอบคุณ คุณ ekppom กับคลิปความรู้นะครับ ติดตามครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

10
ห้ามใช้ฟิลด์ประเภท Autonumber เชื่อมความสัมพันธ์กับเทเบิลอื่น (Bill.BillNo เชื่อมกับ Order.BillNo) เพราะเมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม ดังนั้นค่าเดิมของฟิลด์ Autonumber ที่อยู่ในเทเบิลอื่น (Order.BillNo) มีโอกาสอ้างกลับมายังเทเบิลหลัก (Bill) ผิดเรคอร์ดทันที
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

11
ห้อง MS Access / > > Update field in table
« เมื่อ: 30 เม.ย. 61 , 19:36:44 »
DoCmd.SetWarnings (0)
...คำสั่งที่ใช้
DoCmd.SetWarnings (1)

TRUE มีค่าเป็น -1 นะครับ ไม่ใช่ 1 แต่ปกติจะเขียนเป็น DoCmd.SetWarnings True หรือ False จะชัดเจนกว่าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

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

สมัยเรียน 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
ทีนี้เราก็สามารถแยก “คอนโทรล” กับ “ออบเจ็กต์” ออกจากกันได้แล้วนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekppom

13
ดยส่วนตัว ผมเป็นคนที่เกลียดเรื่องภาษามาตั้งแต่เด็ก ไม่ว่าจะภาษาไทย ภาษาอังกฤษ สังคม ประวัติศาสตร์ เป็นอะไรที่ต้องใช้ภาษาเยอะๆ นี่อย่าได้หวังว่าจะหันไปเหลียวแลเลยแม้แต่น้อย
วิชาที่ชอบที่สุดคือคณิตศาสตร์กับฟิสิกส์
ไม่รู้ว่าโชคดีหรือโชคร้ายที่เริ่มต้นชีวิตการทำงานในบริษัทฝรั่งที่ทุกอย่างภายในองค์กรเป็นภาษาอังกฤษล้วน ขนาดคีย์บอร์ดคอมพิวเตอร์ยังไม่มีภาษาไทยให้เลย เวลาจะพิมพ์ภาษาไทยทีนี่เป็นเรื่องน่าปวดหัวมาก
แล้วผมก็เริ่มใช้ Access ที่นี่แหละครับ เริ่มที่ Access 2.0 โดยตอนนั้นไม่มีความรู้เรื่อง Access เลย เห็นชื่อคล้าย Excel ก็เลยรับอาสาจะทำฐานข้อมูลให้
พอเปิดโปรแกรม Access ครั้งแรกเท่านั้นแหละ ปิดโปรแกรมแล้วนั่งทำใจอยู่ 2 วัน ก่อนไปหาหนังสือเกี่ยวกับ Access มานั่งอ่านอยู่เป็นอาทิตย์ กว่าจะได้ฐานข้อมูลที่เจ้านายต้องการออกมาก็เป็นเดือน
แล้วผมก็ตกหลุมรัก Access เข้าเต็มเปา
อ้าว! เล่าเรื่องส่วนตัวเยอะไปแล้ว ดึงกลับมาเข้าเรื่องของเราดีกว่า
บ่อยครั้งที่ผมได้รับไฟล์จากใครหลายคนส่งมาให้ผมช่วยเหลือ แล้วพบว่ามีการตั้งชื่อออบเจ็กต์และคอนโทรลเป็นภาษาไทย ซึ่งผมได้แต่แนะนำไปว่าอย่าใช้ภาษาไทยใน Access ก็เชื่อบ้างไม่เชื่อบ้าง
และนี่คือประสบการณ์ตรง เกิดจริง เจ็บจริง อันเกิดจากการใช้ภาษาไทยใน Access ครับ

เรื่องแรก ขัดขาตัวเอง
หลังจากศึกษา Access จนมั่นใจว่าเชี่ยวชาญในระดับนึง เพราะได้อาจารย์หลายท่านช่วยสั่งสอน ช่วงนั้นมีชื่อเสียงโด่งดังถึงขนาด บ.ไมโครซอฟต์ โทรมาหาเพื่อให้ไปเป็นวิทยากรให้เขา ก็เริ่มใช้ภาษาไทยในการตั้งชื่อออบเจ็กต์ต่างๆ จนกระทั่งพบว่า ภาษาไทยเป็นภาษาที่มี 5 ระดับ คือมีพยัญชนะ สระ วรรณยุกต์ ได้ 5 ชั้น แล้ว Access ก็ใช่ว่าจะเก่งภาษาไทยอะไรนักหนา บางครั้งภาษาไทยเหมือนกันเป๊ะ แต่พิมพ์ด้วยขั้นตอนต่างกัน Access ก็ไม่สามารถจัดการได้ ยิ่งเขียน VBA ยิ่งเละกันเข้าไปใหญ่ โดยที่เราเองก็ไม่รู้มันผิดตรงไหน แก้อย่างไรก็แก้ไม่ได้ แถม Access สมัยก่อน เวลาแก้ชื่อออบเจ็กต์แล้วก็ยังต้องไปตามแก้ในฟอร์ม ในรีพอร์ต ในรายงาน ปวดหัวมาก
ไม่เชื่อลองพิมพ์คำว่า “ปู่ปู่” เป็นชื่อตารางดูสิครับ ให้ ไม้เอกมาก่อนสระอู และสระอูมาก่อนไม้เอก Access จะแสดงเหมือนกันทั้งคู่ แล้วอย่างนี้เราจะไว้ใจภาษาไทยใน Access ได้อย่างไร

เรื่องที่ 2 ภาษาไทยกับคอนโทรลใน Access
เรื่องนี้เกิดจากมีบริษัทการเงินแห่งนึง เอาโปรแกรมฐานข้อมูลที่เปิดไม่ได้มาให้ช่วยแก้ไข Bug ให้ที สิ่งที่เจอคือชื่อคอนโทรลทั้งหมดเป็นภาษาไทย ด้วยเหตุแห่งชาตินิยม ดังนั้นจึงตั้งชื่อคอนโทรลเป็นภาษาไทยเพื่อให้สามารถทำการแก้ไขคำสั่งได้ง่าย และดูเหมือนโปรแกรมไม่มีปัญหาอะไร จนกระทั่ง Access 97 มาถึง แล้วทุกสิ่งก็เปลี่ยนไป เมื่อโปรแกรมเปิดมาแล้วเจอ Bug มากมายมหาศาล

เรื่องที่ 3 โปรแกรมจัดการตารางบินที่ตั้งชื่อ Sub เป็นภาษาไทย
เรื่องนี้ก็เกิดกับบริษัทเกี่ยวกับธุรกิจการบินขนาดเล็กที่ใช้ Access ในการเก็บจำนวนชั่วโมงบินของนักบิน หลังจาก Access ถูกเปลี่ยน Version เป็น 2013 แล้วฝันร้ายก็มาเยือน เพราะการทำงานทุกอย่างดูติดขัดไปหมด แถมการคำนวณจำนวนชั่วโมงก็เพี๊ยนไม่เป็นท่า พอส่งโปรแกรมมาให้ผมแก้ไขก็พบว่า ภาษาไทยที่เคยมีอยู่ กลายเป็น ?????? (ใครใช้ Access นานๆ น่าจะเคยเจอเจ้านี่ ? มหาภัย) กว่าจะไล่แก้ไขได้ก็เป็นเดือนครับ

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

หน้า: [1]