แสดงกระทู้

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

หน้า: 1 2 3 [4] 5 6 7 ... 9
55
ขอบคุณครับอาจารย์ปิ่นณรงค์
สุดยอดมากครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

56
ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ 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
ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ Users ผมว่าน่าจะต้องมีการ lock spec ความละเอียดนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

58
ให้แก้เป็น

On Error Resume Next
DoCmd.RunCommand acCmdRecordsGoToNext
If Me.NewRecord Or Err.Number <> 0 Then Me.Requery
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

59
แบบนี้หรือเปล่าครับ พอดีผมได้วิธีในเว็บนี้แหละครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

60
สอบถามนะครับ เราสามารถกำหนดให้ 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
TeamView ไปทำให้ไหมครับ แจ้งรหัส ทีมวิว กับรหัส ไว้ทางข้อความนะครับ
แต่ต่อ HDMI กับ จอทีวีไว้นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

62
คือสร้างqueryใหม่เป็น sql หรือสร้างใน query เดิมของผมเลยครับ คือยังงงว่าจะวางquryไว้ตรงไหนอะครับ

งั้นเอาข้อมูลจากคิวรี่เดิมแล้วเรียกใช้ก็ได้คับ
ฟอร์มคุณ Prajak ไปกำหนด Event เอานะครับ ว่าจะให้แสดงยอดสะสมตอนไหน

จากตัวอย่าง Query1  เราสมมุติเป็นคิวรี่เดิม
         ส่วน Query2 เป็นคิวรี่ที่เราทำการคำนวน โดยเก็บ ID กับยอดสะสม ที่ได้ เพื่อเรียกใช้ด้วย Dlookup มาแสดงเป็นฟอร์ม

ตรง Event ที่ฟอร์ม เราก็ใส่ประมาณนี้คับ

Me.Dirty = False
Me.SASOM = DLookup("SASOM", "Query02", "ID = " & Me.ID & "")
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

63
แบบนี้ไหมครับ Field Cumulative ท่านก็เอาไปใส่ตรงยอดสะสมได้เลยครับ


โค๊ด: [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
รบกวนสอบถามนะครับ เนื่องจากทั้ง 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
.
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

66
ถ้าเป็นการเปิดฟอร์มไว้ตลอดเป็นไปได้ไหมครับ ถ้าเราจะสร้าง 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
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

67
ใช้ DSUM โดยกำหนดเงื่อนไชเหมือน Query ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

68


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

69


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

70
เพิ่มคำสั่งที่ Query Design ตามนี้ครับ

Percent: [QtyF]/DSum("[QtyF]","[ชื่อตาราง]")*100

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

71
ผมเคยเกิดเหตุการณ์แบบนี้ครับ
เลยไปกำหนด ตรง References โดยกำหนดให้มี DAO Object Library ด้วย
เวอร์ชั่นเท่าที่เห็นมา เหมือนจะมีถึง 3.6 นะครับ เวอร์ชั่นใหม่ๆ ไม่เคยเจอ
หรือเขาจะไม่ทำต่อแล้วหรือเปล่าไม่แน่ใจครับ แต่ผมว่ามันยังใช้งานได้ดีอยู่ทั้ง access เวอร์เก่า และใหม่

dim dbs As Database ดึงตรงจากฐานข้อมูล
Dim dbs As dao.Database  ใช้ Dao เป็นตัวกลางในการเชื่อมข้อมูลระหว่าง Database กับส่วนที่ใช้ในการแสดงผลข้อมูล


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

72
ตรงหน้าเขียนโค้ด 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
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

หน้า: 1 2 3 [4] 5 6 7 ... 9