แสดงกระทู้

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

หน้า: [1]
1
เห็นคำถามนี้น่าสนใจตรงเราสามารถใช้งานตัวแปรอาร์เรย์แบบ 2 มิติได้ เลยลองทำดู แต่ไม่รู้ว่าเข้าใจความต้องการของเจ้าของกระทู้ถูกหรือป่าวนะครับ
โค๊ด: [Select]
Public Function Seminar(sDate As Date, eDate As Date) As String
    Dim i As Long, o As Long, iCount As Long, iSun As Long, mCount As Long
    Dim tDay() As String ' กำหนดตัวแปรอาร์เรย์ จำทำแบบ 2 มิติ มิติแรกใช้เก็บตัดช่วงวันอาทิตย์ มิติสองใช้เก็บวันที่ไม่ใช่วันอาทิตย์
    ' หาช่วงเวลาเป้าหมายว่ามีวันอาทิตย์ทั้งหมดกี่วัน เพิ่มใช้กำหนดค่าตัวแปรอาร์เรย์ในมิติแรก----------------------
    For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
        If Weekday(i) = 1 Then 'วันไหนมี Weekday เท่ากับ 1 คือวันอาทิตย์ ตาม Default ของฟังก์ชั่น
            iSun = iSun + 1 'นับจำนวนวันอาทิตย์ไปเรื่อยๆ
        End If
    Next
    '--------------------------------------------------------------------------------------------------
    'เก็บวันที่เป้าหมายทั้งหมดที่ไม่ใช่วันอาทิตย์ ลงในตัวแปรอาร์เรย์แบบไดนามิก-----------------------------------
    For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
        If Weekday(i) <> 1 Then ' เมื่อไม่ใช่วันอาทิตย์ (1 คือ วันอาทิตย์)
            mCount = IIf(iCount > mCount, iCount, mCount) 'หาตัวเลขขยายมากขึ้นในแต่ละลูปเพื่อนำมาปรับขนาดความยาวของอาร์เรย์
            'ขยายความยาวของอาร์เรย์ให้มากขึ้น ตามข้อมูลวันที่ ที่ต้องจัดเก็บลงตัวแปร เพราะข้อมูลมีจำนวนมากน้อยไม่แน่นอนจึงต้องใช้ตัวแปรแบบไดนามิก
            ReDim Preserve tDay(iSun, mCount) 'ขยายมากขึ้นได้ แต่ทำให้น้อยลงไม่ได้ เพราะข้อมูลค่าเก่าจะหาย
            'แปรงข้อมูลวันที่เป้าหมายที่ไม่ตรงกับวันอาทิตย์ ไล่ใส่ลงไปในตัวแปรอาร์เรย์แบบ 2 มิติ
            tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(IIf(Year(i) = Format(i, "yyyy"), Year(i) + 543, Format(i, "yyyy")))
            iCount = iCount + 1
        Else 'หากเป็นวันอาทิตย์
            o = o + 1 'หากเป็นวันอาทิตย์ ให้เลื่อนตัวแปรอาร์เรย์ในมิติแรกขึ้นไปอีกลำดับ เพื่อแยกชั้นตัวแปรระหว่างช่วงวันที่ติดวันอาทิตย์
            iCount = 0 'ปรับมิติที่สองให้เป็นลำดับ 0 เริ่มใหม่
        End If
    Next i
    '---------------------------------------------------------------------------------------------------
    'เรียกแสดงค่าตัวแปรอาร์เรย์ออกมาตามรูปแบบที่เราต้องการ------------------------------------------------
    Dim firstDay As Long 'เก็บค่าลำดับของมิติตัวแปรลำดับแรกที่จะแสดง
    Dim lastDay As String 'เก็บข้อมูลวันที่วันสุดท้ายก่อนถึงวันอาทิตย์
    Dim endDay As String 'เก็บวันที่สุดท้ายไว้ใช้ในข้อความ ให้ไว้ ณ วันที่
    Dim strDay As String 'ไล่เก็บรวบรวมสรุปข้อมูลแสดงทั้งหมด
    firstDay = -1 'เก็บค่าลำดับมิติตัวแปรแรกที่ไม่ตรงกับวันอาทิตย์ (กันไว้กรณีที่วันแรกของข้อมูลเป็นวันอาทิตย์พอดี ทำให้ตัวแปรมิติแรกอาจไม่ได้เริ่มต้นที่ 0 ก็ได้)
    For i = 0 To UBound(tDay, 1) 'ลูปตัวแปรอาร์เรย์ในมิติแรกที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
        lastDay = "" 'ล้างค่าวันที่สุดท้ายทุกครั้งเมื่อขึ้นมิติตัวแปรใหม่
        For o = 0 To UBound(tDay, 2) 'ลูปตัวแปรอาร์เรย์ในมิติสองที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
            If tDay(i, o) & "" <> "" Then 'ถ้าค่าตัวแปรอาร์เรย์ในมิตินั้นไม่ใช่ค่าว่าง (แสดงว่ามีข้อมูล)
                lastDay = tDay(i, o) ' ให้บันทึกในตัวแปร lastDay ไปเรื่อยๆ จนข้อมูลลูปไปถึงสุดท้ายเราก็จะได้วันที่วันสุดท้าย ของตัวแปรอาร์เรย์ในชั้นมิตินั้น
                endDay = lastDay
                If firstDay = -1 Then
                    firstDay = i 'หากตัวแปรอาร์เรย์ลำดับนั้นไม่ใช่ค่าว่าง ก็แสดงว่าให้เริ่มต้นวันที่ที่ลำดับมิตินั้น จึงบันทึกลงไปในตัวแปร fristDay
                End If
            End If
        Next o
        If i = firstDay Then 'ถ้า i เท่ากับค่าในตัวแปร firstDay แสดงว่าเป็นค่าวันที่แรกที่จะแสดง
            If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
                strDay = "วันที่ " & tDay(i, 0) & " - วันที่ " & lastDay ' บรรทัดแรกของวันที่ ที่จะแสดงให้ขึ้นต้นคำว่า วันที่
            Else
                strDay = "วันที่ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
            End If
        Else 'ถ้าเป็นบรรทัดต่อๆไป
            If tDay(i, 0) & "" <> "" And lastDay <> "" Then 'ถ้ามีข้อมูล
                If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
                    strDay = strDay & vbCrLf & "และ " & tDay(i, 0) & " - วันที่ " & lastDay 'บรรทัดต่อๆไปจะแสดงขึ้นต้นด้วยคำว่า และ
                Else
                    strDay = strDay & vbCrLf & "และ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
                End If
            End If
        End If
    Next i
    '---------------------------------------------------------------------------------------------------
    strDay = strDay & vbCrLf & "ให้ไว้ ณ วันที่ " & endDay 'เก็บข้อมูลในรูปแบบที่เราต้องการในตัวแปร strDay
    Seminar = strDay
End Function

การใช้งาน: Seminar(วันที่เริ่มต้น, วันที่สิ้นสุด)
Seminar(#3/1/2024#, #3/15/2024#)
โพสต์นี้ได้รับคำขอบคุณจาก: Su

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

3
โปรแกรมแจกฟรี (ส่งท้ายปีเก่า ต้อนรับปีใหม่) นี้ ใช้ชื่อว่า Q2RFree

เหมาะสำหรับผู้ทำอาชีพอิสระที่จำเป็นต้องออกพวกใบเสนอราคา/ใบแจ้งหนี้/ใบเสร็จ

ตัวโปรแกรมใช้ระบบ MS Access มีความสามารถดังนี้
1. เก็บข้อมูลลูกค้าได้
2. เก็บข้อมูลการออกเอกสารทุกรายการได้
3. สำเนารายการจากเอกสารที่มีอยู่ได้ สำหรับกรณีทำงานเดิมอีกครั้ง หรือจะสำเนาจากใบเสนอราคาไปเป็นใบแจ้งหนี้แล้วต่อด้วยใบเสร็จก็ได้
4. สามารถใส่ Logo ได้ (อย่าลืมไปจดทะเบียนเครื่องหมายการค้าก่อนนะครับ)
5. ถ้ายังไม่มี Logo ก็สามารถออกเอกสารแบบที่ไม่มี Logo ได้
6. เปลี่ยนสีหัวเอกสารได้ จะแดง/เขียว/น้ำเงิน/ชมพู/ฟ้า/เหลือง ได้หมด ไม่มีสีดำ เพราะทำแล้วดูไม่ได้
7. ทุกเอกสารมีให้เลือก 2 แบบ ตามความชอบ

ดาวน์โหลดได้เองเลยที่ลิงก์ด้านล่างนี้
https://1drv.ms/u/s!ArcuGeSfhpiQhwGsRn9TPBxFIpp-?e=c1NGeI

สุดท้ายอย่าลืมอ่านคู่มือก่อนนะครับ
ติดปัญหาอะไรอีเมลมาถามได้ ตอบทุกอีเมลแน่นอน ถ้าไม่ตอบก็รอหน่อย เมลอาจตกไปอยู่ใน Jung Mail

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

4
ได้เวลาต่ออายุโฮสหลังจากโดน Ransomware แล้วใช้บริการฟรีมาครบ 1ปี :shout:


  ค่าเช่าโฮส   
  ค่าโดเมน 
  คงเหลือ 
ยอดเงินสนับสนุน
  3,269 
  62-63    642.-    400.-    2,227 
  63-64    535.-    300.-   1,392 
  64-65    535.-    300.-   557 
  65-66    ...    357.-    200 
  66-67    535.-    385.25    --- 
  67-68    ...    ...    --- 

#ตัดรอบโฮส ก.ย. #ตัดรอบโดเมน ก.พ.

ปล.ขอปิดการโพสกระทู้ใว้เพียงเท่านี้นะครับผม :cool:


รายงานประจำปี 63-64 ได้รับคำขอบคุณจาก: chai, sjs, OddyWriter, PNR
รายงานประจำปี 64-65 ได้รับคำขอบคุณจาก: chai, OddyWriter, apirak, Max
โพสต์นี้ได้รับคำขอบคุณจาก: Su

5
รายงานการต่ออายุโดเมนเป็นที่เรียบร้อยครับ :yuush:

เวลามันช่างผ่านไปไวยิ่งนัก :zzz:
โพสต์นี้ได้รับคำขอบคุณจาก: Su

6
เราดูกระทู้ย้อนหลังไปได้แค่ 7 หน้าเท่านั้นเหรอครับ

รายการกระทู้ล่าสุดที่แสดงในหน้าแรก(mod เสริม)จะแสดงได้เพียง100กระทู้นะครับ (100/15กระทู้ต่อหน้า=7หน้า)
แต่ถ้าเข้าไปดูที่บอร์ดนั้นๆ(ห้อง MS Access,"เรื่องอื่นๆ"เกี่ยวกับ Access,ห้องสนทนาทั่วไป,ฯลฯ) จะเห็นกระทู้ทั้งหมดของบอร์ดนั้นเลยครับ
แถมในหน้าบอร์ดจะให้เรียงตาม ชื่อหัวข้อ, จำนวนตอบ/อ่าน, เริ่มโดยใคร/เมื่อไหร่, หรือกระทู้ล่าสุด เมื่อไหร่ก็ได้ด้วย :startle:
ปล.จัดให้เป็น 150/15=10หน้าล่ะ :shout:
โพสต์นี้ได้รับคำขอบคุณจาก: Su

8
ห้อง Ms Access อื่นๆ / : Access Version 1.x
« เมื่อ: 03 ก.ค. 61 , 02:19:39 »
โพสต์นี้ได้รับคำขอบคุณจาก: Su

9
ห้อง Ms Access อื่นๆ / : Access Version 1.x
« เมื่อ: 03 ก.ค. 61 , 02:17:43 »
winworldpc.com/product/microsoft-access/10
โพสต์นี้ได้รับคำขอบคุณจาก: Su

10
ห้อง Ms Access อื่นๆ / Access Version 1.x
« เมื่อ: 03 ก.ค. 61 , 02:17:13 »
ข้ามไปดูเวลาที่ 11:50
โพสต์นี้ได้รับคำขอบคุณจาก: Su

11
Private Sub SendMail_Click()
Dim App As New Outlook.Application
Dim Email As Outlook.MailItem
Dim fileName As String, today As String
today = Format(Date, "DDMMYYYY")
fileName = Application.CurrentProject.Path & "\Report1_" & today & ".pdf"
DoCmd.OutputTo acReport, "Report1", acFormatPDF, fileName, False

Set Email = App.CreateItem(olMailItem)
With Email
    .Recipients.Add "ใส่อีเมลผู้รับจดหมาย"
    .Subject = "ชื่อเรื่อง"
    .Body = "รายละเอียดเนื้อหา"
    .Attachments.Add fileName
    .Send
End With

MsgBox "ส่ง Email เสร็จแล้ว!", vbInformation, "EMAIL STATUS"

Set Email = Nothing
Set App = Nothing

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

12
งั้นใช้ โปรแกรมเสริมครับโหลดตัว cutepdf Writer มาครับ
Link  http://www.cutepdf.com/download/CuteWriter.exe
ติดตั้งให้เรียบร้อย
พอเรากด Print  เลือกเครื่องปริ้นเป็น CuteWriter ก่อนครับ

จะได้คุณภาพที่เหมือนต้นฉบับ
โพสต์นี้ได้รับคำขอบคุณจาก: Su

13
ห้อง MS Access / MS Access ส่งข้อความเข้า line notify
« เมื่อ: 23 เม.ย. 61 , 14:27:52 »
https://notify-bot.line.me/th/

ทดลองส่ง ข้อความจาก ms access เข้า line

สมัคการใช้และเอา token ไปใส่ในฟอร์มด้วยนะครับ
ที่มา : http://snasui.com/viewtopic.php?t=12785

โค๊ด: [Select]
Option Compare Database
Sub SendMessageToLineNotify()
Dim oXML As Object
Dim strToken As String
Dim strMessage As String
Dim strDate As String
Dim URL As String


'Line Notify Token
strToken = "ใส่ Token line ตรงนี้ " 'สมัคได้ที่ https://notify-api.line.me/

URL = "https://notify-api.line.me/api/notify"


strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")


'Line Message
strMessage = "message=MS Access "

'Ajax
Set oXML = CreateObject("Microsoft.XMLHTTP")
With oXML
'Line Post
.Open "POST", URL, 0

'Header
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.SetRequestHeader "Authorization", "Bearer " & strToken

'Ajax
.send (strMessage)

'Line Check Print
Debug.Print oXML.responseText
End With

'Line
Set oXML = Nothing
End Sub

Private Sub Command0_Click()
Call SendMessageToLineNotify
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Su

14
ห้อง MS Access / > Val กับ Cdbl ใช้ยังงัยครับ
« เมื่อ: 19 เม.ย. 61 , 20:10:50 »
Val รับตัวอักษร string ได้หมด ถ้าไม่สามารถแปลงเป็นตัวเลขได้จะให้ค่าเป็น 0 และ Val จะแปลง string เป็นตัวเลขจนเจอตัวที่ไม่สามารถแปลงได้ เช่น Val(" 123 ab") จะได้ 123

แต่ CDbl ถ้ามี string ตัวที่แปลงเป็นตัวเลขไม่ได้จะเกิด error

Val รับได้แค่จุดทศนิยม . แต่จะไม่รับคอมม่า , ในขณะที่ CDbl รับได้ทั้งจุดทศนิยม และคอมม่า
โพสต์นี้ได้รับคำขอบคุณจาก: Su

15
ห้อง MS Access / > Val กับ Cdbl ใช้ยังงัยครับ
« เมื่อ: 19 เม.ย. 61 , 16:43:54 »
Val  กับ  Cdbl  ใช้ยังงัยครับ

ใช้ในกรณีที่ต้องการเปลี่ยนค่าของ นิพจน์ แปลเป็นค่าที่เฉพาะเจาะจง
Cdbl คือการเปลี่ยน นิพจน์ให้เป็น Double ครับ
ยกตัวอย่าง ผมกำหนด Integet กับ Double เพื่อให้เห็นความแตกต่าง
Dim MyDouble, MyInt
MyDouble = 2345.5678    ' MyDouble แสดงค่าเป็น  Double.
MyInt = CInt(MyDouble)    ' MyInt แสดงค่าเป็น 2346. คือ Integer

ตัวอย่าง Val กำหนดตัวแปร
Dim MyInt, MyVar
MyInt = 1554    ' MyInt คือค่าจำนวนเต็มตัวเลข หรือว่า Integer.
MyVar = CVar(MyInt & "0000")   จะเห็นได้ว่าเราแทนค่าตัวแปร Var = 0000 ออกมา
MyVar จะแสดงผลออกมาดังนี้ 15540000.
ในกรณีที่จะ ใช้ในการคำนวนยกตัวอย่างเชื่อ
มีชื่อมูลตัวเลข ที่เราเก็บไว้ใน Record เป็น Sting
ชื่อ text 1 = 1.5 และ text 2 = 6.1 ผลการรวทที่ได้ กรณี text1+text2 คือ 1.56.1
ซึ่งเมื่อเราต้องการคำนวน แล้วให้แสดงค่าเป็น  Double ต้องกำหนดดังนี้
(CDbl(text1)) + (CDbl(text1)) ผลที่ได้คือ 7.7 นั้นเอง

ยังมีการเปลี่ยนค่าของ นิพจน์ แปลเป็นค่าที่เฉพาะเจาะจง
ซึ่งยังมี อีกหลายรูปแบบด้วยกันดังนี้

CBool  Boolean   สตริงที่ที่ถูกต้องหรือนิพจน์ใด ๆ

CByte  ไบต์  0 ถึง 255

CCur สกุลเงิน -922,337,203,685,477.5808 เพื่อ 922,337,203,685,477.5807

CDate  วันที่  นิพจน์วันที่ที่ถูกต้องใด ๆ

CDbl  Double

CDec  เลขฐานสิบ
+/ 79,228,162,514,264,337,593,543,950,335 สำหรับศูนย์ปรับขนาดตัวเลข นั่นคือ ตัวเลข โดยไม่มีจุดทศนิยม สำหรับตัวเลขที่มีตำแหน่งทศนิยม 28 คือช่วง
+/ 7.9228162514264337593543950335 หมายเลขที่ไม่ใช่ศูนย์เป็นไปได้น้อยที่สุดคือ 0.0000000000000000000000000001

CInt  จำนวนเต็ม  -32768 ถึง 32767 แทนเศษส่วนจะถูกปัดเศษ

CLng ความยาว   -2147483648 เพื่อ 2147483647 แทนเศษส่วนจะถูกปัดเศษ

CSng  เดี่ยว  -3.402823 e 38 ถึง - 1.401298 e-45 สำหรับค่าลบ 1.401298 e-45 ถึง 3.402823 e 38 สำหรับค่าบวก

CStr สตริง ส่งกลับค่าสำหรับ CStr ขึ้นอยู่กับอาร์กิวเมนต์นิพจน์

CVar ตัวแปร ช่วงเดียวกันเป็นคู่สำหรับ numerics ช่วงเดียวกันเป็นสตริงที่สำหรับ numerics ไม่ใช่
โพสต์นี้ได้รับคำขอบคุณจาก: Su

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

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

17
หากใช้งานกับ ตั้งหน้ากระดาษแนวตั้ง ใช้งานได้ปกติ ไม่มี error เตือนอันใด
แต่พอใช้แนวนอน ขึ้นเตือนตลอด รบกวนชี้แนะด้วยครับ พลาดตรงไหน
ตามภาพที่แนบนะครับ






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

18
ดยส่วนตัว ผมเป็นคนที่เกลียดเรื่องภาษามาตั้งแต่เด็ก ไม่ว่าจะภาษาไทย ภาษาอังกฤษ สังคม ประวัติศาสตร์ เป็นอะไรที่ต้องใช้ภาษาเยอะๆ นี่อย่าได้หวังว่าจะหันไปเหลียวแลเลยแม้แต่น้อย
วิชาที่ชอบที่สุดคือคณิตศาสตร์กับฟิสิกส์
ไม่รู้ว่าโชคดีหรือโชคร้ายที่เริ่มต้นชีวิตการทำงานในบริษัทฝรั่งที่ทุกอย่างภายในองค์กรเป็นภาษาอังกฤษล้วน ขนาดคีย์บอร์ดคอมพิวเตอร์ยังไม่มีภาษาไทยให้เลย เวลาจะพิมพ์ภาษาไทยทีนี่เป็นเรื่องน่าปวดหัวมาก
แล้วผมก็เริ่มใช้ 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 เลย แม้คุณจะรักภาษาไทยขนาดไหนก็ตาม
โพสต์นี้ได้รับคำขอบคุณจาก: Su

หน้า: [1]