แสดงกระทู้

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
ตัวอย่างแบบนี้ได้หรือเปล่าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

2
ห้อง MS Access / : ดูผลลัพธ์ loop ไม่ทัน
« เมื่อ: 27 เม.ย. 65 , 07:50:56 »
me.text1=1000
Do Until me.text1<=0
me.Refresh
DoEvents
me.text1=me.text1-1
loop

ใช่เลยครับ อาจารย์ ใช้ DoEvents ขอบคุณครับ
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

3
ลองทำเล่นๆ ดู ไม่รู้ใช้ได้ป่าว
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

4
ติดขัดคิวรี่มาตั้งแต่ปี 63 ได้คำตอบในปีนี้แล้วครับ ผมส่งเฉลยมาเพิ่มครับ
SELECT DISTINCTROW NetGrade.group, NetGrade.code, NetGrade.sTotal, NetGrade.sNet, scores.letterGrade
FROM scores, NetGrade
WHERE (((NetGrade.sNet) Between [scores].[lowerlimit] And [scores].[upperlimit]));
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

5
ที่ botton ใส่โค้ดแบบนี้ดูนะครับว่าได้ไหม


โค๊ด: [Select]
Dim strString As String
Dim strArray() As String
Dim intCounter As Integer

strString = Me.Text4
strArray = Split(strString, ",")

For intCounter = 0 To UBound(strArray)
 Me.ข้อมูล = strArray(intCounter)
 DoCmd.GoToRecord , , acNext
Next intCounter

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

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

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

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


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



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

8
น่าจะแบบนี้ครับ
โค๊ด: [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

10
ถ้าเราต้องการให้แยก 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

11
จากอันเก่าปรับโค้ดเป็นแบบนี้นะครับ ไม่ต้องสร้างตารางใหม่
เอาตาราง 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

12
ปัญหาคือ เวลาผมเลือก รายการใน 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/ link
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

13
ลองนำไปทดสอบดูนะครับ

ขั้นตอนแรกสร้าง Module ขึ้นมา แล้วเอาโค้ดนี้ไปวาง
โค๊ด: [Select]
Function InsertSpace(strInput As String, n As Long) As String
Dim strTemp As String
Dim lngIndex As Long

For lngIndex = 1 To Len(strInput) Step n
strTemp = strTemp & " " & Mid$(strInput, lngIndex, n) 'ตรง " "   อยากให้กว้างกว่านี้อีกก็กด spacebar เพิ่มอีกได้
Next lngIndex
InsertSpace = Mid$(strTemp, 2)
End Function

ขั้นที่ 2 เวลาจะเรียกใช้กับ Field ไหน ยกตัวอย่าง ฟิวส์ POSID มีสตริงคือ 123456
         ให้ใส่ ประโยคนี้เข้าไปใน ControlSource ของ textbox ในรายงานได้เลย
         เช่น
       
โค๊ด: [Select]
=InsertSpace([POSID],1) '1 คือให้เว้นช่องทุก 1 ตัวอักษรนะครับ ถ้าอยากให้ แบ่งทุก 3 ตัวอักษรใส่เลข 3 แทนได้
       ที่รายงาน textbox ดังกล่างจะแสดงเป็น 1 2 3 4 5 6
       ไม่รู้ว่าอยากได้แบบนี้หรือไม่ ? ถ้าไม่ใช่อธิบายเพิ่มเติมมาอีกหน่อยนะครับผมยังไม่ค่อยเข้าใจโจทย์  :sweat: :sweat:
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31

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

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




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

16
โค้ดตัวอย่างนี้ เป็นการแปะค่าของฟิลด์ต่างๆในบรรทัดที่ต้องการ มาลงเป็นบรรทัดใหม่ในฟอร์ม/ซับฟอร์มเดียวกัน วิธีคือให้สร้าง 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

หน้า: [1] 2