แสดงกระทู้

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

หน้า: 1 ... 22 23 24 [25] 26 27 28 ... 46
433
ปัญหาคือ เวลาผมเลือก รายการใน 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/

434
Work order คือชื่อฟิลล์ คับจากโค้ดน่าจะเป็น string ครับ
ส่วน  Like '*'" คือแสดงทั้งหมด

ถ้าอยากสร้างการค้นหาแบบหลายเงื่อนไขลองแบบนี้

Dim sql As String
    sql = "SELECT * FROM [ชื่อตาราง] WHERE [รหัสงาน] Like '" & Nz(Me.cbWorkID, "*") & "' AND [กลุ่มที่ทำ] Like '" & Nz(Me.cbGroupWork, "*") & "' AND [วันส่งงาน] Like '" & Nz(Me.txtWorkSendDate, "*") & "'"
    Forms![ชื่อฟอร์ม].RecordSource = sql

หรือถ้ายังไม่ค่อยเข้าใจ ให้ทำตัวอย่างข้อมูลส่งไฟล์เข้ามาเดี่ยวเพิ่มโค้ดให้นะ


435
แนะนำฟ้อนต่างประเทศที่เป็นสากล ดีกว่าครับเช่น Arial , Tahoma , Calibri , Verdana , Lucida , sans serif เป็นต้น
ผมก็เคยใช้ฟ้อนไทย เจอปัญหาพวกนี้ตลอด ปัจจุบันเลยใช้ฟ้อนตามข้างบนแทนครับ มันเป็นฟ้อนที่ติดมากับวินโดร์ไม่ต้องลงเพิ่ม
เพราะบางเครื่องก็ไม่ได้กำหนด Location Thai ไว้ปัญหาก็จะเกิดได้เหมือนกัน

436
ลองดูตัวอย่างนี้นะครับน่าจะได้ข้อมูลแบบที่คุณต้องการนะ

ผมใช้การตรวจสอบโดยการนับจำนวนครั้งของการ Append ข้อมูลลงไปในตาราง customer
โดยเช็คว่าถ้า Employee ไหน asign = 0 แล้วก็ให้ลบออกไป ไม่นำไป Append ต่อครับ

โค้ดของคิวรี่ในการเช็คจำนวนการAppend ข้อมูล
โค๊ด: [Select]
SELECT tbl_Job.Employee_Name, Count(tbl_Customer.Employee_Name) AS CountCTM, tbl_Job.assign, Nz([assign],0)-Nz([CountCTM],0) AS Remaining
FROM tbl_Job LEFT JOIN tbl_Customer ON tbl_Job.Employee_Name = tbl_Customer.Employee_Name
GROUP BY tbl_Job.Employee_Name, tbl_Job.assign;

โดยจะต้องมีฟอร์มที่มีปุ่มกดให้โค้ดทำงานโดยมีโค้ดประมาณนี้ครับ
โค๊ด: [Select]
Private Sub Command0_Click()
Dim rst As DAO.Recordset
Dim IntAssign As Integer
Dim sql As String
Dim I As Long
    Set rst = CurrentDb.OpenRecordset("tbl_Job", dbOpenDynaset)
 
 
rst.MoveFirst
Do Until rst.EOF
IntAssign = rst!Assign
For I = 1 To IntAssign
If IntAssign = rst!Assign Then
sql = "INSERT INTO tbl_Customer ( Employee_Name, Cust_Name ) SELECT QryCheckRemaining.Employee_Name, 'XXXX' AS Expr1 FROM QryCheckRemaining WHERE (((QryCheckRemaining.Remaining)>0));"
DoCmd.SetWarnings False
           DoCmd.RunSQL sql
End If
    Next
  rst.MoveNext
  Loop
  DoCmd.SetWarnings True
    rst.Close
    Set rst = Nothing
End Sub


437
ผมเขียนแล้วcopyไปเปิดที่อีกเครื่องหนึ่งครับ โดยเครื่องที่ใช้ประจำกับเครื่องที่อาไปลง ใช้ เวอเดียวกัน

แต่ในเครื่องที่เอาไปลง พอกดใช้งานป่มคำสั่ง มันขึ้น ไม่สามารถทำงานeventได้ครับ

แก้ไขยังไงดีครับ :cry:

ไปเปิด Trust Center ครับดูจากกระทู้นี้
https://www.thai-access.com/index.php?topic=375.msg1562#msg1562

438
อ้างถึง
ตรง MainFrm แสดงทุกระเบียนจากตาราง  ซึ่ง ถ้าผมต้องการให้ MainFrm แสดงเฉพาะรายที่ยังไม่ได้ติ๊ก

ตรงกำหนด Criteria ในคิวรี่ให้กำหนดตรง Field CheckBox เป็น Not True ครับคือให้แสดงเฉพาะค่าที่เป็น False คือยังไม่ได้ติ๊กนั้นเอง

อ้างถึง
ก็ให้ออกรายงานเฉพาะรายที่ติ๊กเลือกจาก MainFrm ไม่ทราบว่าต้องทำอย่างไร

ที่คิวรี่บนตัวรายงานนั้นให้กำหนด เลือกข้อมูลในตาราง datasub จาก ID เดียวกับที่แสดงบนฟอร์ม
และกำหนดให้แสดง Field Check เฉพาะข้อมูลที่ต๊ิกอยู่หรือ True นั้นเอง

439
ห้อง MS Access / : รวมตัวเลขไม่ได้
« เมื่อ: 24 ก.ค. 63 , 14:21:15 »
ุถ้าคำนวนจาก 365 วันคือ 1 ปี ก็ประมาณนี้ครับ


โค๊ด: [Select]
date_age: IIf(365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)<0,0,365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)+1)
แต่ถ้าอยากให้แสดงจำนวนวัน ไม่นับวันปัจจุบันก็ แก้เป็น
โค๊ด: [Select]
[code]date_age: IIf(365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)<0,0,365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365))[/code]

จะเหลือ 48 วันนะครับ

441
ออกแบบสวยงามน่าใช้มากครับ
 :love: :love:

442
ห้อง MS Access / : รวมตัวเลขไม่ได้
« เมื่อ: 24 ก.ค. 63 , 09:48:43 »

ถ้าเป็นไปได้ การใช้เงื่อนไขในการคำนวนต่างๆ ควรทำให้เสร็จในคิวรี่ที่จะแสดงผลในรายงาน
เพราะฟังชั้น Sum ต้องคำนวนจากฟิลล์ในคิวรี่หรือตารางครับ หรืออาจจะใช้ การคำนวนภายในบ้างแต่ก็ไม่ได้มากแบบนั้น

เช่น Sum(Field1+Field2) เป็นต้น

ผมทำตัวอย่างให้ดูไปเช็คความถูกต้องของเงื่อนไขเองเน้อ


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

444
อ้างถึง
มีวิธีแก้อย่างอื่นอีกไหมครับ ถ้าเกิดผมไม่ต้องการแสดงข้อมูลทั้งหมดตอนเปิดฟอร์มอะครับ
วิธีง่ายที่จะไม่แสดงข้อมูลก็คือ การให้มันค้นหาค่าที่ Null ครับ เช่นหาค่าว่างของ ID เลย ข้อมูลต้องมี ID อยู่แล้วจริงไหม
พอเราค้นหา ID = Null ข้อมูลก็จะไม่แสดงแล้วครับ แล้วเอาไปไว้ที่ อีเว้น Form_Load เพื่อให้มันทำงานตอนเปิดฟอร์มขึ้นมา :cool:
แนวทางเช่น

Private Sub Form_Load()
Dim strSQL As String
strSQL = "SELECT * FROM [ชื่อตาราง] WHERE ID=null;"
Me.RecordSource = strSQL
End Sub

445
น่าจะแบบนี้นะครับงั้น
จากตาราง



ในคิวรี่


446
ใน 1JobNo
 truckNo1 กับ TruckOwner1 คือชุดเดียวกันไหมครับ
เช่น TruckNo1 คู่กับ Truckowner1
TruckNo2 คู่กับ Truckowner2

แบบนี่ไหมถ้าใช้ต้องปรับใหม่

447
สร้างแบบเดียวกันครับ แต่สร้าง Union Query อีกตารางหนึ่ง เพราะข้อมูลที่ได้ต้องแยกกัน แต่สามารถรวมกันแสดงภายหลังได้จาก JobNo ครับ

โดยต้องปรับเปลี่ยน เอา IS NOT Null ออกทั้ง 2 คิวรี่เลยนะครับ เพราะเราต้องเก็บ JobNo ทั้งหมดของทั้ง TruckNo และ TruckOwn ไว้สร้างความสัมพันธ์กัน
โดยตัวรายงานต้องปรับเปลี่ยนเล็กน้อย โดยกำหนดแหล่งระเบียนสำหรับรายงานนี้ใหม่ครับตามตัวอย่าง

448
Truck Owner 1-10 คือฟิลล์ที่อยู่ใน tblTruck_Imp เหมือนกับ truck no 1 หรือเปล่าครับ
หรือ อยู่ในตารางอื่นๆ อธิบายเพิ่มหน่อยหรือมีภาพด้วยก็ดี

449
อ้างถึง
ขอEmailหน่อยครับ ผมส่งโปรแกรมให้ดู ขอคำแนะนำครับ
ได้ครับรบกวนอธิบายขั้นตอนเป็นข้อๆนะครับถึงขั้นตอนที่อยากได้ว่าเป็นแบบไหน

450
วิธีนี้ใช้ Union Query นะครับ โดยจับกลุ่ม Jobno ตาม Truck No 1 - 10 ที่มี โดยถ้าเป็นช่องว่างๆ ไม่มีข้อมูลก็จะไม่นำมาแสดง
ตัวอย่างโค้ด
โค๊ด: [Select]
select Jobno,[truck no 1] as TruckNo from tbltruck_imp WHERE [truck no 1] IS NOT NULL
Union
Select Jobno,[truck no 2] from tbltruck_imp WHERE [truck no 2] IS NOT NULL
Union
Select Jobno,[truck no 3] from tbltruck_imp WHERE [truck no 3] IS NOT NULL
Union
Select Jobno,[truck no N] from tbltruck_imp WHERE [truck no [N] IS NOT NULL;
์N คือ Field TruckNo N ที่มี ต่อลงมาเรื่อยๆ
เราจะได้ผลลัพธ์ ตามคิวรี่ชื่อ
UnionTruck_Imp


อ้างถึง
TruckNo นี้ใช้ใน JobNo อะไรบ้าง?
ที่ตัวรายงาน เราใช้การจัดกลุ่ม และใช้  TruckNo เป็น HeadGroup
และนำ Jobno มาวางไว้ในส่วน Detail เพื่อแสดง JobNo ตาม TruckNo ครับ

อ้างถึง
Truck นี้ใช้งานกี่งาน??
เมื่อได้คิวรี่ Union แล้วก็ใช้การ Count เพื่อนับจำนวนของ JobNo โดยลำดับตาม TruckNo ที่มี
โค๊ด: [Select]
SELECT UnionTruck_Imp.TruckNo, Count(UnionTruck_Imp.Jobno) AS จำนวนงาน
FROM UnionTruck_Imp
GROUP BY UnionTruck_Imp.TruckNo;
ลองดูการแสดงผลจากตัวอย่างนะครับ ถ้าต้องการแสดงแบบไหนอีกจะทำตัวอย่างให้ดูเน้อ :cool:


หน้า: 1 ... 22 23 24 [25] 26 27 28 ... 46