55
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.
56
ห้อง MS Access / : ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« เมื่อ: 04 ธ.ค. 61 , 15:32:38 »ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ Users ผมว่าน่าจะต้องมีการ lock spec ความละเอียดนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ
จากแนวคิิดของท่านงั้น ก็สร้างคำสั่งให้ปรับขนาดหน้าจอปลายทางอัตโนมัติเมื่อเปิดฟอร์ม หรือ Event ที่ต้องการไปเลยดีไหม เช่น อยากตั้ง ขนาด 1,024x768 กับทุกเครื่อง ก็ให้เปิดฟอร์มมาแล้ว ขนาดจะเปลี่ยนตามเลย Code ตามนี้ครับ
Code นี้วางใน Mudule
โค๊ด: [Select]
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Function GetWindowRect Lib "User32" _
(ByVal hWnd As Long, rectangle As RECT) As Long
Private Declare Function ChangeDisplaySettings Lib "User32" Alias _
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Declare Function EnumDisplaySettings Lib "User32" Alias _
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As _
Long, lpDevMode As Any) As Boolean
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CCFORMNAME = 32
Const CCDEVICENAME = 32
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Public Function Change_Resolution(iWidth As Single, iHeight As Single)
Dim DevM As DEVMODE
Dim a As Boolean
Dim i As Long
Dim b As Long
i = 0
Do
a = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (a = False)
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight
b = ChangeDisplaySettings(DevM, 0)
End Function
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function
Sub SetAutoScreen()
Call Change_Resolution(1024, 768) ' กำหนดขนาดตรงนี้
End Sub
ต่อมาไปกำหนด Event Form_Open
โค๊ด: [Select]
Private Sub Form_Open(Cancel As Integer)
Call SetAutoScreen
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
57
ห้อง MS Access / : ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« เมื่อ: 04 ธ.ค. 61 , 15:18:30 »
ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ Users ผมว่าน่าจะต้องมีการ lock spec ความละเอียดนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
58
ห้อง MS Access / : อยากให้ข้อมูลแสดงสลับกันบนฟอร์มแสดงผล
« เมื่อ: 03 ธ.ค. 61 , 10:04:05 »
ให้แก้เป็น
On Error Resume Next
DoCmd.RunCommand acCmdRecordsGoToNext
If Me.NewRecord Or Err.Number <> 0 Then Me.Requery
On Error Resume Next
DoCmd.RunCommand acCmdRecordsGoToNext
If Me.NewRecord Or Err.Number <> 0 Then Me.Requery
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
59
ห้อง MS Access / : รบกวนสอบถามการlogin เพิ่มเปิดฟอร์มตามสิทธิ
« เมื่อ: 19 พ.ย. 61 , 14:31:12 »
แบบนี้หรือเปล่าครับ พอดีผมได้วิธีในเว็บนี้แหละครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
60
ห้อง MS Access / : รบกวนสอบถามการlogin เพิ่มเปิดฟอร์มตามสิทธิ
« เมื่อ: 15 พ.ย. 61 , 14:54:04 »สอบถามนะครับ เราสามารถกำหนดให้ user แต่ละสิทธิพอloginเข้าแล้วให้เปิดฟอร์มของตัวเองตามที่กำหนดได้หรือเปล่าครับ
เช่นการตลาด loginแล้วเข้าฟอร์มการตลาด
จัดซื้อ login แล้วเข้าฟอร์มจัดซื้อ
ซึ่งปัจจุบันผมใช้การกำหนดสิทธิที่ปุ่มเมนูแทน โดยการ Enable=false เป็นต้น
ผมเห็น ตัว login ของคุณ prajak ใช้การตรวจสอบ ID และ พาสเวิร์ด โดยใช้ Dlookup ถ้าต้องการให้เปิดฟอร์มไหน ผมว่า
น่าจะเพิ่ม Field ในตาราง อีก Field หรือ สร้างตารางและให้มี Field UserID เพื่อ สร้างความสัมพันธ์กัน
เช่น tblDepartment เก็บ UserID UserName และ Department
โดย เราจะกำหนดว่า เมื่อ ID และ Password ถูกต้องแล้ว ให้ dlookup Dapartment มาเก็บไว้ เป็นตัวแปลโดยอ้างอิงจาก Username ที่ Login
แล้วใช้ IF ไปกำหนดการเปิดฟอร์มอีกที เช่น
Dim StrDepart as string
StrDepart = Dlookup("Department","tblDepartment", "[Username]='" & Me.Userbox & "'")
IF strDepart = "แผนกขาย" then
Docmd.openForm "FormSell"
ElseIF strDepart = "การตลาด" then
Docmd.openForm "FormMaketing"
end if
เสียดายผมดันลบไฟล์เก่าที่เคยส่งมาไปหมดแล้ว ที่จริงจะลองทำให้ดูเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
61
ห้อง MS Access / : รบกวนสอบถามตามรูปครับ
« เมื่อ: 13 พ.ย. 61 , 13:18:13 »
TeamView ไปทำให้ไหมครับ แจ้งรหัส ทีมวิว กับรหัส ไว้ทางข้อความนะครับ
แต่ต่อ HDMI กับ จอทีวีไว้นะครับ
แต่ต่อ HDMI กับ จอทีวีไว้นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
62
ห้อง MS Access / : รบกวนสอบถามตามรูปครับ
« เมื่อ: 13 พ.ย. 61 , 10:45:16 »คือสร้างqueryใหม่เป็น sql หรือสร้างใน query เดิมของผมเลยครับ คือยังงงว่าจะวางquryไว้ตรงไหนอะครับ
งั้นเอาข้อมูลจากคิวรี่เดิมแล้วเรียกใช้ก็ได้คับ
ฟอร์มคุณ Prajak ไปกำหนด Event เอานะครับ ว่าจะให้แสดงยอดสะสมตอนไหน
จากตัวอย่าง Query1 เราสมมุติเป็นคิวรี่เดิม
ส่วน Query2 เป็นคิวรี่ที่เราทำการคำนวน โดยเก็บ ID กับยอดสะสม ที่ได้ เพื่อเรียกใช้ด้วย Dlookup มาแสดงเป็นฟอร์ม
ตรง Event ที่ฟอร์ม เราก็ใส่ประมาณนี้คับ
Me.Dirty = False
Me.SASOM = DLookup("SASOM", "Query02", "ID = " & Me.ID & "")
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
63
ห้อง MS Access / : รบกวนสอบถามตามรูปครับ
« เมื่อ: 12 พ.ย. 61 , 16:08:36 »
แบบนี้ไหมครับ Field Cumulative ท่านก็เอาไปใส่ตรงยอดสะสมได้เลยครับ
ตรง Table 1 ท่านไปเปลี่ยนชื่อให้ตรงกับตารางของท่าน
โค๊ด: [Select]
SELECT Table1.OUTPUTPERDAY+(select nz(sum(T2.OUTPUTPERDAY),0) from Table1 as T2 where T2.BOM = Table1.BOM and T2.ID < Table1.ID) AS Cumulative, *
FROM Table1;
ตรง Table 1 ท่านไปเปลี่ยนชื่อให้ตรงกับตารางของท่าน
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
64
ห้อง MS Access / : รบกวนสอบถามฟอร์มแสดงผลแบบ realtime
« เมื่อ: 09 พ.ย. 61 , 16:01:40 »รบกวนสอบถามนะครับ เนื่องจากทั้ง form1และform2 มาจากqueryเดียวกัน ถ้าผมตั้งให้ฟอร์ม2 requeryทุกๆ 30วินาที จะมีผลเสียมากหรือเปล่าครับ
ลองทำตามที่คุณปิ่นณรงค์บอก โดยตั้งTime Interval ไว้ที่ 125 สังเกตเม้าส์จะขยับตลอดเลยครับ
ลองตัวอย่างที่ส่งไปดูหรือยังครับ
ไม่มีการใช้ Refresh แล้วครับ
ใช้แค่การเปลี่ยนค่า เม้าไม่น่ากระพริบได้นะครับ
โดยตรวจสอบค่าเมื่อถึงเวลา จากคิวรี่
โค๊ด: [Select]
Private Sub Form_Timer()
If IsNull(Me.ShowPlan) Then
Me.ShowPlan = DLookup("Plan_Hr", "Query1")
End If
If Me.ShowPlan <> DLookup("Plan_Hr", "Query1") Then
Me.ShowPlan = DLookup("Plan_Hr", "Query1")
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
65
ห้อง MS Access / : รบกวนสอบถามฟอร์มแสดงผลแบบ realtime
« เมื่อ: 09 พ.ย. 61 , 14:23:51 »
.
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
66
ห้อง MS Access / : รบกวนสอบถามฟอร์มแสดงผลแบบ realtime
« เมื่อ: 06 พ.ย. 61 , 17:26:48 »
ถ้าเป็นการเปิดฟอร์มไว้ตลอดเป็นไปได้ไหมครับ ถ้าเราจะสร้าง Field TimeStamp ไว้ด้วยเพื่อใช้ตรวจสอบข้อมูลโดยวิธีการประมาณนี้คับ
1.สร้าง Field TimeStamp
2.สร้างคิวรี่ใส่คำสั่งSQL SELECT Last(TimeStamp) AS LastTimeStamp FROM [ชื่อตาราง];
โดยตั้งชื่อคิวรี่ CheckTimeStamp
3.สร้าง textbox ชื่อ textbox1 Bound กับ Field LastTimeStamp ของคิวรี่
4.ที่ Form ตั้ง TimeInterval ซัก 125
5.ที่ Event OnTimer ใส่
If textbox1 <> DLookup ("LastTimeStamp",[CheckTimeStamp]) then
me.refresh 'สั่งให้ถ้าเจอว่า LastTimeStamp มีการเปลี่ยนแปลง หรือ อัพเดท ก็ให้ Refresh
end if
1.สร้าง Field TimeStamp
2.สร้างคิวรี่ใส่คำสั่งSQL SELECT Last(TimeStamp) AS LastTimeStamp FROM [ชื่อตาราง];
โดยตั้งชื่อคิวรี่ CheckTimeStamp
3.สร้าง textbox ชื่อ textbox1 Bound กับ Field LastTimeStamp ของคิวรี่
4.ที่ Form ตั้ง TimeInterval ซัก 125
5.ที่ Event OnTimer ใส่
If textbox1 <> DLookup ("LastTimeStamp",[CheckTimeStamp]) then
me.refresh 'สั่งให้ถ้าเจอว่า LastTimeStamp มีการเปลี่ยนแปลง หรือ อัพเดท ก็ให้ Refresh
end if
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
67
ห้อง MS Access / : SUM ค่าของตัวเลขจาก Queryที่กรองแล้ว
« เมื่อ: 03 ก.ย. 61 , 11:12:12 »
ใช้ DSUM โดยกำหนดเงื่อนไชเหมือน Query ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
70
ห้อง MS Access / : ต้องการหา% ของแต่ละรายการจากqueryครับ
« เมื่อ: 20 ส.ค. 61 , 19:35:32 »
เพิ่มคำสั่งที่ Query Design ตามนี้ครับ
Percent: [QtyF]/DSum("[QtyF]","[ชื่อตาราง]")*100
Percent: [QtyF]/DSum("[QtyF]","[ชื่อตาราง]")*100
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
71
ห้อง MS Access / : อยู่ดี ๆ ก็ใช้ไม่ได้เฉยเลย
« เมื่อ: 02 ส.ค. 61 , 08:30:05 »
ผมเคยเกิดเหตุการณ์แบบนี้ครับ
เลยไปกำหนด ตรง References โดยกำหนดให้มี DAO Object Library ด้วย
เวอร์ชั่นเท่าที่เห็นมา เหมือนจะมีถึง 3.6 นะครับ เวอร์ชั่นใหม่ๆ ไม่เคยเจอ
หรือเขาจะไม่ทำต่อแล้วหรือเปล่าไม่แน่ใจครับ แต่ผมว่ามันยังใช้งานได้ดีอยู่ทั้ง access เวอร์เก่า และใหม่
dim dbs As Database ดึงตรงจากฐานข้อมูล
Dim dbs As dao.Database ใช้ Dao เป็นตัวกลางในการเชื่อมข้อมูลระหว่าง Database กับส่วนที่ใช้ในการแสดงผลข้อมูล
เลยไปกำหนด ตรง References โดยกำหนดให้มี DAO Object Library ด้วย
เวอร์ชั่นเท่าที่เห็นมา เหมือนจะมีถึง 3.6 นะครับ เวอร์ชั่นใหม่ๆ ไม่เคยเจอ
หรือเขาจะไม่ทำต่อแล้วหรือเปล่าไม่แน่ใจครับ แต่ผมว่ามันยังใช้งานได้ดีอยู่ทั้ง access เวอร์เก่า และใหม่
dim dbs As Database ดึงตรงจากฐานข้อมูล
Dim dbs As dao.Database ใช้ Dao เป็นตัวกลางในการเชื่อมข้อมูลระหว่าง Database กับส่วนที่ใช้ในการแสดงผลข้อมูล
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
72
ห้อง MS Access / : อยู่ดี ๆ ก็ใช้ไม่ได้เฉยเลย
« เมื่อ: 01 ส.ค. 61 , 16:10:22 »
ตรงหน้าเขียนโค้ด Tool > references
ของท่านมีอะไรบ้างครับ อย่างน้อยต้องมี รายการพวกนี้อยู่
Mrocrosoft Access 1x.0 object library
Mrocrosoft OFFICE 1x.0 Access database Engine Object
Ole Automation
DAO 3.6 หรือเวอร์ชั่นใด เท่าที่มี
แล้วลองเปลี่ยนเป็นแบบนี้ดูครับว่าได้ไหม
Dim dbs As dao.Database
ของท่านมีอะไรบ้างครับ อย่างน้อยต้องมี รายการพวกนี้อยู่
Mrocrosoft Access 1x.0 object library
Mrocrosoft OFFICE 1x.0 Access database Engine Object
Ole Automation
DAO 3.6 หรือเวอร์ชั่นใด เท่าที่มี
แล้วลองเปลี่ยนเป็นแบบนี้ดูครับว่าได้ไหม
Dim dbs As dao.Database
โพสต์นี้ได้รับคำขอบคุณจาก: prajak