แสดงกระทู้

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

หน้า: [1] 2
1
ตัวอย่าง Code ครับ

Private Sub Form_Resize()
   Me.Command0.Left = (Me.InsideWidth - Me.Command0.Width) / 2
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

2
ตัวอย่างในไฟล์แนบครับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

3
อ่านแล้วเหมือน ๆ ที่เคยทำไว้ลองเปิดเล่นดูนะครับ
user admin : somjate
password : sjsa0786

ข้างในรวม ๆ code ต่างๆ , การสร้างรายงาน 12 เดือน , การกำหนดสิทธ์และอื่น ๆ


Code นี้ได้มาจากอาจารย์ในเว็บ อ.ฺBADMan และหลาย ๆ ท่าน ขอบคุณทุก ๆ ท่านครับ



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

4
น่าจะแบบนี้ครับ
โค๊ด: [Select]
Sub FieldNames()
    Dim rst, rstOut, strTable  As Recordset
    Dim f As Field
    Dim SQL, RecordName As String
   
    Set rst = CurrentDb.OpenRecordset("tbTarang1")
    Set rstOut = CurrentDb.OpenRecordset("tbfild1")
        rst.MoveFirst
        Do Until rst.EOF
            RecordName = rst!fname
    Set strTable = CurrentDb.OpenRecordset(RecordName)
            For Each f In strTable.Fields
                rstOut.AddNew
                rstOut![tarang] = RecordName
                rstOut![fild] = f.Name
                rstOut.Update
            Next
        rst.MoveNext
        Loop
    rst.Close: Set rst = Nothing
    rstOut.Close: Set rstOut = Nothing
    strTable.Close: Set strTable = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

6
ถ้าเราต้องการให้แยก Field ในตาราง ครับ เราต้องเพิ่มทุกช่องใช่ไหมครับ
เช่น ถ้าเราใส่ตรง Number 1 - 10
ก่จะได้
Runnum   : AAA 10ตัว
Runnum1 : 2010 10ตัว
Runnum2 : 0001-0010

แก้โค้ดเป็นแบบนี้
โค๊ด: [Select]
Dim strNum As String
Dim I As Long
Dim db As Database
Dim rs As Recordset
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("table1", DB_OPEN_DYNASET)
   
    For I = Me.txtBeginNumber To Me.txtEndNumber
    strNum = Right("00000" & I, 4)

     rs.AddNew
        rs![Runnum] = Me.txtModel
        rs![Runnum1] = Me.txtYear
        rs![Runnum2] = strNum
       
     rs.Update
     Next
rs.Close
db.Close
Set rs = Nothing: Set db = Nothing
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

7
จากอันเก่าปรับโค้ดเป็นแบบนี้นะครับ ไม่ต้องสร้างตารางใหม่
เอาตาราง Temp ออกไปได้เลย

โค๊ด: [Select]
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strWong_Code As String
Dim strMember_Code As String
Dim SQL As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("TB2", dbOpenDynaset)
If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
  strWong_Code = rst![วง]
  strMember_Code = rst![สมาชิก]
  rst.MoveNext
 
  Do Until rst.EOF
    If strWong_Code = rst![วง] Then
      strMember_Code = strMember_Code & "," & rst![สมาชิก]
    Else
DoCmd.SetWarnings False
   SQL = "UPDATE TB1 " & _
        "SET samachik= '" & strMember_Code & "'" & _
        "WHERE [รหัส] = '" & strWong_Code & "'"
    DoCmd.RunSQL SQL
      strWong_Code = rst![วง]
      strMember_Code = rst![สมาชิก]
    End If
    rst.MoveNext
  Loop 

DoCmd.SetWarnings False
   SQL = "UPDATE TB1 " & _
        "SET samachik= '" & strMember_Code & "'" & _
        "WHERE [รหัส] = '" & strWong_Code & "'"
    DoCmd.RunSQL SQL
    DoCmd.SetWarnings True
End If
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

8
ปัญหาคือ เวลาผมเลือก รายการใน combobox1 แล้วไฟของปุ่ม Numlock  ชอบดับเองตลอดเวลา  แล้วเวลาเลือกรายการอีกตรั้งก็จะติด เลือกรายการครั้งที่ 3 ก็จะดับ
ช่วยด้วยครับคืออยากให้ไฟติดตลอดเวลาไม่ว่ากี่ครั้งที่เลือกรายการครับ เป็น Windows 10 , Access 2007 ครับ

ขั้นตอนนะครับ
1.สร้าง Module ใส่โค้ดในลงไปแล้วเซฟ

โค๊ด: [Select]
Option Compare Database
 Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128   '  Maintenance string for PSS usage
      End Type
      ' API declarations:
      Private Declare Function GetVersionEx Lib "Kernel32" _
         Alias "GetVersionExA" _
         (lpVersionInformation As OSVERSIONINFO) As Long
      Private Declare Sub keybd_event Lib "user32" _
         (ByVal bVk As Byte, _
          ByVal bScan As Byte, _
          ByVal dwflags As Long, ByVal dwExtraInfo As Long)

      Private Declare Function GetKeyboardState Lib "user32" _
         (pbKeyState As Byte) As Long

      Private Declare Function SetKeyboardState Lib "user32" _
         (lppbKeyState As Byte) As Long
      ' Constant declarations:
      Const VK_NUMLOCK = &H90
      Const VK_SCROLL = &H91
      Const VK_CAPITAL = &H14
      Const KEYEVENTF_EXTENDEDKEY = &H1
      Const KEYEVENTF_KEYUP = &H2
      Const VER_PLATFORM_WIN32_NT = 2
      Const VER_PLATFORM_WIN32_WINDOWS = 1
Function IsNumLockOn() As Boolean
        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsNumLockOn = keys(VK_NUMLOCK)
End Function

Sub ToggleNumLock()
        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
          If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
                keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
                SetKeyboardState keys(0)
          ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
          'Simulate Key Press
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
          'Simulate Key Release
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
               Or KEYEVENTF_KEYUP, 0
          End If
End Sub

Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
Dim bNumLockState As Boolean
    bNumLockState = IsNumLockOn()
    SendKeys sKeys, bWait
    If IsNumLockOn() <> bNumLockState Then
        ToggleNumLock
    End If
End Sub

ขั้นตอนที่ 2 ไปที่ฟอร์ม เราจะทำกับ Control ตัวไหนให้กำหนด Event GoFocus ได้เลยเช่น

โค๊ด: [Select]
Private Sub Combo1_GotFocus()
Call ToggleNumLock
End Sub


Credit http://access.mvps.org/
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

9
ลองใช้เว็บเบราเซอร์ดูไม๊ครับ
https://youtu.be/bEY-l75nGqM?t=1332
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

10
ลองดูตัวอย่างนี้ครับ พอดีค้นหาเจอจากเว็บนอก และเพิ่มเติมบางส่วนเช่นเลือกข้อมูลจากตารางพิกัส gps ลูกค้าให้ด้วยคับ
ตัวแผนที่อัพเดทล่าสุด 2019
Credit : Philben




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

11
โค้ดตัวอย่างนี้ เป็นการแปะค่าของฟิลด์ต่างๆในบรรทัดที่ต้องการ มาลงเป็นบรรทัดใหม่ในฟอร์ม/ซับฟอร์มเดียวกัน วิธีคือให้สร้าง Command Button เอาไว้ที่ไหนก็ได้สักที่บนบรรทัดของข้อมูล (สมมุติชื่อ btnCopy) เมื่อต้องการก็อปปี้ ก็แค่คลิกที่ปุ่มนี้

Private Sub btnCopy_Click()
    Dim RS As DAO.Recordset
   
    If Me.NewRecord Or Me.Dirty Then Exit Sub ' ถ้าคลิกปุ่มบนบรรทัดของรายการใหม่ หรือ บนบรรทัดที่รายการกำลังแก้ไขอยู่ ก็ไม่ต้องทำอะไร
   
    Set RS = Me.RecordsetClone    ' กำหนดตัวแปรสำหรับอ้างอิงข้อมูลของบรรทัดปัจจุบัน (บรรทัดที่เลือก)
    RS.Bookmark = Me.Bookmark  ' ให้ตัวแปรดังกล่าวชี้ไปเรคอร์ดเดียวกันกับบรรทัดปัจจุบัน
    DoCmd.GoToRecord , , acNewRec   ' กระโดดไปบรรทัดรายการใหม่
    Me("ชื่อคอนโทรลบนฟอร์ม") = RS("ชื่อฟิลด์ของคอนโทรลบนฟอร์ม") ' ต้องการก็อปปี้ฟิลด์อะไรบ้าง ก็เพิ่มบรรทัดตามจำนวนฟิลด์ที่ต้องการต่อลงไปได้เรื่อยๆ
   
    Set RS = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

12



ผมได้ลองสร้างระบบ ตอกบัตรของพนักงานในการเข้างาน มาให้ดูเป็นแนวทางคับ
1.ก่อนใช้งานให้ ใส่ รหัส Barcode ของพนักงานแต่ละคน ในตาราง tblEmployee ก่อนนะครับ ผมใส่ไว้ให้ 2 ไอดีคือ 01 และ 02
2.เมื่อเราแสกน Barcode โปรแกรมจะทำการ Enter อัตโนมัติ
3.ระบบจะบันทึกข้อมูลเข้าสู่ตารางทันทีถ้า Barcode นั้นมีอยู่จริง ถ้าไม่มีอยู่จะมีการแจ้งเตือนให้ครับ
4.รายละเอียดชื่อพนักงานและเวลาในการตอกบัตรนั้นจะแสดงขึ้นมาเมื่อแสกน Barcode ครับ และจะหายไปเองเมื่อครบ 5 วินาที
5.ผมได้สร้างนาฬิกา และ แสดงวันที่ เรียลไทม์ ไว้บนฟอร์มด้วย
6.โดยปกติ พนักงานอาจจะเผลอไปแสกน วันนึงหลายๆ ครั้ง แต่ผมได้สร้างคิวรี่ตรวจเช็คเวลาที่แสกนอันแรกสุดของวันมาแสดงให้ครับ
7.มีระบบสถานะแสดงไว้ให้ด้วยกรณีที่ผิดพลาดก็จะมีข้อความแสดงแจ้งเตือนใหักับพนักงานได้ทราบครับ

ลองดูนะครับ ไม่รู้ได้หรือเปล่า
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

13
ห้อง MS Access / : สอบถามเรื่อง relationships
« เมื่อ: 24 ก.ค. 62 , 14:37:06 »

การรวม(Join) มีหลายแบบ แล้วแต่การนำไปใช้คับเช่น

การรวมภายใน: เฉพาะข้อมูลที่เกี่ยวข้องจากทั้งสองตารางที่รวม เช่นต้องการให้แสดงเฉพาะรายการ CustomerID ที่ตรงกันระหว่าง 2 ตาราง  ปกติน่าจะใช้แบบนี้อยู่ใช่ไหมคับ

การรวมภายนอก: ข้อมูลที่เกี่ยวข้องทั้งหมดรวมกันอย่างถูกต้อง รวมทั้งระเบียนที่เหลือทั้งหมดจากตารางหนึ่ง  เช่นมีลูกค้าบริษัทใดบ้างใน ตาราง Customer ที่ยังไม่เคยสั่งซื้อสินค้าเลย เราสามารถเปลี่ยนประเภทความสัมพันธ์เป็นประเภทที่ 2 เพื่อดูข้อมูลของอีกตารางซึ่งมี Customer ที่มากกว่าจะนำมาแสดงทั้งหมด

ปกติเราจะกำหนด Criteria = null เพื่อดูว่า Customer รายการไหนยังไม่มีในอีกตารางหนึ่งเป็นต้นคับ

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

14
กำหนด Property ที่ Filter ให้เป็นเงื่อนไขที่ต้องการ เช่น Bill_Status <> 0 และกำหนดให้ Filter On = True
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

15
ไม่เคยใช้นะครับ แต่น่าจะเลือก Enable Automatic Reconnect ในรูป 5.4 https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-dsn-windows-5-2.html
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

16


นาฬิการแบบเข็มจาก MS Access ครับ

ต้องขออภัยผู้จัดทำผมโหลดมานานจำไม่ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

17
 


:miao: :shout: :love: :grin:

ผมเห็นเพื่อนๆสมาชิกหลายๆท่านมีการสร้าง นาฬิกาไว้ แสดงบนฟอร์มแต่เวลาไม่ได้แสดงตลอดเวลาวันนี้เรามาลองทำนาฬิกาไว้แสดงบนฟอร์มเพื่อให้ดูสวยงามไปอีกแบบ

โดยสร้าง textbox ชื่อ txtShowTime
โดยเซ็ท TimeInterval 125
และใส่ Code ที่ Event OnTimer ดังนี้
โค๊ด: [Select]
Private Sub Form_Timer()
Me.txtShowTime.Value = Format(Time, "HH:mm:ss AM/PM")
End Sub

ต่อไปทำให้แสดงวันที่ ก็กด ที่ Design  > กดเลือกที่ Date And Time ลงมาวงในฟอร์ม และตกแต่งเพื่อความสวยงาม
จบขั้นตอนคับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

18
ถึงเราจะ ALTER จากฟิลด์ TEXT ไปเป็น MEMO ได้ แต่ไม่มีทางที่จะเพิ่มคุณสมบัติ Hyperlink ให้กับฟิลด์ MEMO ที่มีอยู่แล้วได้  ทำได้เฉพาะตอนสร้างฟิลด์เท่านั้น ผมถึงบอกให้ สร้างฟิลด์ Hyperlink แล้วก๊อปปี้ค่าจากฟิลด์ TEXT มา  แล้วก็ค่อยลบฟิลด์ TEXT อีกทีไงครับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

หน้า: [1] 2