SysCmd Function
Access Function, ฟังก์ชัน SysCmd ประยุกต์กับงาน ดังต่อไปนี้
- แสดงความคืบหน้าของการทำงาน (Progress meter) ที่แถบสถานะ (Status bar)
- ส่งออกสารสนเทศเกี่ยวกับ Microsoft Access และไฟล์ที่เกี่ยวข้อง
- ส่งออกสถานะของอ๊อบเจคฐานข้อมูลที่ระบุเพื่อชี้ว่าการเปิดอ๊อบเจค, สร้างอ๊อบเจคใหม่
หรือเปลี่ยนแปลงแต่ไม่ได้บันทึก
ตัวอย่างเช่น ถ้ามีการ Wizard ที่กำหนดเองสำหรับกาสร้างฟอร์มใหม่ ฟังก์ชัน
SysCmd สามารถนำมาใช้เพื่อแสดงความคืบหน้าของ Wizard ในการสร้างฟอร์ม
ไวยากรณ์
ReturnValue = SysCmd(action[,text][,value] )
ObjectState = SysCmd(action[,objecttype][,objectname] )
อากิวเมนต์ของฟังก์ชัน SysCmd มีรายละเอียด คือ
อากิวเมนต์ |
รายละเอียด |
action |
เป็นค่าคงที่ตามรายการเพื่อระบุประเภทของ action ที่ประยุกต์
- รายการค่าคงที่ต่อไปนี้ใช้ประยุกต์กับรายงานความคืบหน้า (Progress
meter) ฟังก์ชัน SysCmd ส่งออกค่าเป็นค่าว่าง ถ้า action เหล่านี้ทำงานสำเร็จ
ส่วนกรณีอื่น Microsoft Access ส่งค่าเป็นความผิดพลาด run-time error
acSysCmdInitMeter กำหนดค่าเริ่มต้นของ Progress meter ซึ่งต้องกำหนดอากิวเมนต์
text และ value เมื่อใช้ action นี้
acSysCmdUpdateMeter ปรับปรุง Progress meter ด้วยค่าที่ระบุ ซึ่งต้องกำหนดอากิวเมนต์
text เมื่อใช้ action นี้
acSysCmdRemoveMeter ยกเลิก Progress meter
acSysCmdSetStatus กำหนดข้อความแถบสถานะที่อากิวเมนต์ text
- รายการค่าคงที่ต่อไปนี้เป็นสารสนเทศเกี่ยวกับ Microsoft Access
acSysCmdRuntime ส่งค่าออกเป็น True (-1) ถ้าเวอร์ชัน run-time
ของ Microsoft Access กำลังทำงาน
acSysCmdAccessVer ส่งค่าออกเป็นหมายเลขเวอร์ชันของ Microsoft
Access
acSysCmdIniFile ส่งค่าออกเป็นชื่อไฟล์ .ini ที่ทำงานร่วมกับ Microsoft
Access
acSysCmdAccessDir ส่งค่าออกเป็นชื่อไดเรคทอรี่ที่เก็บ Msaccess.exe
acSysCmdProFile ส่งค่าออกเป็นการตั้งค่า /profile ที่ระบุโดยผู้ใช้
เมื่อใช้งาน Microsoft Access จากคำสั่งแบบ command line
acSysCmdGetWorkgroupFile ส่งออกค่าเป็นพาร์ทของไฟล์ workgroup
(System.mdw)
- รายการค่าคงที่ต่อไปนี้เป็นสารสนเทศเกี่ยวกับสถานะของอ๊อบเจคฐานข้อมูล
acSysCmdGetObjectState ส่งค่าออกเป็นสถานะของฐานข้อมูลที่ระบุ
ซึ่งต้องระบุส่วน objecttype และ objectname เมื่อใช้ action นี้
|
text |
เป็น expression ของข้อความที่จะแสดงในตำแหน่งชิดซ้ายบนแถบสถานะ
อากิวเมนต์นี้ต้องการเมื่ออากิวเมนต์ action เป็น acSysCmdInitMeter,
acSysCmdUpdateMeter, หรือ acSysCmdSetStatus แต่ไม่จำเป็นสำหรับอากิวเมนต์
action อื่นๆ |
value |
เป็น expression ของตัวเลขที่ควบคุมการแสดงค่าของ progress
meter อากิวเมนต์นี้ต้องการเมื่ออากิวเมนต์ action เป็น acSysCmdInitMeter
แต่ไม่จำเป็นสำหรับอากิวเมนต์ action อื่นๆ |
objecttype |
เป็นค่าคงที่ของรายการต่อไปนี้
acTable
acQuery
acForm
acReport
acMacro
acModule
อากิวเมนต์นี้ต้องการเมื่ออากิวเมนต์ action เป็น acSysCmdGetObjectStatus
แต่ไม่จำเป็นสำหรับอากิวเมนต์ action อื่นๆ
|
objectname
|
เป็น expression ของข้อความที่เป็นชื่อที่มีจริงของอ๊อบเจคฐานข้อมูลตามประเภทของอ๊อบเจคที่ได้ระบุโดยอากิวเมนต์
objecttype ซึ่งอากิวเมนต์นี้ต้องการเมื่ออากิวเมนต์ action เป็น acSysCmdGetObjectStatus
แต่ไม่จำเป็นสำหรับอากิวเมนต์ action อื่นๆ |
ลักษณะการประยุกต์
ฟังก์ชัน SysCmd สามารถเรียกใช้ด้วย action ที่มี progress meter ได้หลายแบบ
ซึ่งทำให้สามารถแสดงรายละเอียดความคืบหน้าของปฏิบัติงานโดยการรับรู้ขั้นตอน
และปรับปรุงเพื่อให้ชี้ถึงความคืบหน้า
การแสดง progress meter ในแถบสถานะต้องเริ่มจากการเรียกฟังก์ชัน SysCmd
ด้วยอากิวเมนต์ action ที่กำหนดเป็น acSysCmdInitMeter และกำหนดอากิวเมนต์
text และ value เมื่อกำหนดอากิวเมนต์ action เป็น acSysCmdInitMeter สามารถกำหนดอากิวเมนต์
value เป็นค่าสูงสุด หรือ 100%
การปรับปรุง progress meter ทำได้ด้วยการเรียกฟังก์ชัน SysCmd ที่อากิวเมนต์
action กำหนดเป็น acSysCmdUpdateMeter และกำหนดอากิวเมนต์ value โดยฟังก์ชัน
SysCmd ใช้อากิวเมนต์ value ในการคำนวณร้อยละของ progress meter สำหรับการแสดงผล
เช่น กำหนดค่าเป็นสูงสุดเป็น 200 และการปรับปรุงมีค่า 100 ค่า progress meter
จะเป็นครึ่งหนี่ง
การเปลี่ยนข้อความที่แสดงผลในแถบสถานะทำได้ด้วยการเรียกฟังก์ชัน SysCmd
ที่อากิวเมนต์ action กำหนดเป็น acSysCmdSetStatus และกำหนดอากิวเมนต์ text
เช่น ในระหว่างการเรียงลำดับต้องมีการเปลี่ยนข้อความเป็น Sorting
เมื่อการเรียงลำดับเสร็จแล้ว
ต้องเปลี่ยนค่าแถบสถานะโดยยกเลิกข้อความ ซึ่งอากิวเมนต์ text สามารถเก็บข้อความได้ประมาณ
80 ตัวอักษร เนื่องจากการแสดงข้อความของแถบสถานะใช้แบบตัวอักษรตามสัดส่วน
ดังนั้นจำนวนตัวอักษรสามารถแสดงผลได้โดยการหาจากความกว้างรวมของตัวอักษรทั้งหมดที่กำหนดด้วยอากิวเมนต์
text
ถ้ามีการเพิ่มข้อความบนแถบสถานะ จะเป็นการลดความยาวของ meter ถ้าข้อความยาวกว่าแถบสถานะ
และกำหนดอากิวเมนต์ action เป็น acSysCmdInitMeter ฟังก์ชัน SysCmd จะไม่พิจารณาข้อความและแถบสถานะจะไม่มีข้อความใดๆปรากฏ
ถ้าข้อความยาวกว่าแถบสถานะ และกำหนดอากิวเมนต์ action เป็น acSysCmdSetStatus
ฟังก์ชัน SysCmd จะปรับข้อความให้พอดีกับแถบสถานะ
ข้อความในแถบสถานะไม่สามารถใช้ zero-length string ถ้าต้องการยกเลิกข้อความที่มีอยู่จากแถบสถานะ
ให้ตั้งค่าอากิวเมนต์ text เป็นช่องว่างเดี่ยวตามตัวอย่าง
varReturn = SysCmd(acSysCmdInitMeter, " ", 100)
varReturn = SysCmd(acSysCmdSetStatus, " ")
ถ้า progress meter ยังปรากฏเมื่อตั้งค่าข้อความโดยการเรียกฟังก์ชัน SysCmd
ที่กำหนดอากิวเมนต์ action เป็น acSysCmdSetStatus ฟังก์ชัน SysCmd จะยกเลิก
progress meter โดยอัตโนมัติ
การเรียกฟังก์ชัน SysCmd ด้วย action อื่นๆเพื่อหาสารสนเทศเกี่ยวกับ Microsoft
Access เช่น เวอร์ชันของ Microsoft Access, เวอร์ชันความผิดพลาดของ run-time
error เป็นต้น
การเรียกฟังก์ชัน SysCmd ที่กำหนดอากิวเมนต์ action เป็น acSysCmdGetObjectState
และกำหนดอากิวเมนต์ objecttype และ objectname สำหรับการส่งออกค่าสถานะของอ๊อบเจคฐานข้อมูลที่ระบุ
ซึ่งแต่ละอ๊อบเจคสามารถมีสถานะได้ 1 สถานะจาก 4 สถานะ คือ ไม่เปิดหรือไม่มี,
เปิด, สร้างใหม่ และเปลี่ยนแปลงแต่ไม่ได้บันทึก
ตัวอย่างเช่น การออกแบบกำหนด Wizard เพื่อแทรกฟิลด์ใหม่ใน Table ซึ่งต้องมีการหาโครงสร้างของ
Table แต่ยังไม่ได้ทำการบันทึก ดังนั้นสามารถทำการบันทึกก่อนการปรับปรุงโครงสร้าง
การตรวจสอบสามารถทำได้โดยค่าที่ส่งออกด้วยฟังก์ชัน SysCmd เพื่อหาสถานะของ
Table
ฟังก์ชัน SysCmd ที่กำหนดอากิวเมนต์ action เป็น acSysCmdGetObjectState
สามารถส่งค่าออกโดยการรวมค่าคงที่ต่อไปนี้
ค่าคงที่ |
สถานะของอ๊อบเจคฐานข้อมูล |
AcObjStateOpen |
เปิด (Open) |
AcObjStateNew |
สร้างใหม่ (New) |
AcObjStateDirty |
เปลี่ยนแปลงแต่ไม่ได้บันทึก |
ดูเพิ่มเติม
CurrentObjectType, คุณสมบัติ CurrentObjectName
ตัวอย่าง
ตัวอย่างการใช้ฟังก์ชัน SysCmd ในการสร้างอ๊อบเจค Recordset แบบ snapshot,
อ่านแต่ละเรคคอร์ด และแสดงผล progress meter ที่แสดงความสัมพันธ์ของตำแหน่งปัจจุบันใน
snapshot
Function ReadRecords(strTableName As String) As Integer
Const conBadArgs = -1
Dim dbs As Database, rst As Recordset
Dim lngCount As Long, strMsg As String
Dim varReturn As Variant, lngX As Long
ReadRecords = 0
If strTableName <> "" Then
DoCmd.Hourglass True
Set dbs = CurrentDb
On Error Resume Next
Set rst = dbs.OpenRecordSet(strTableName)
' นับเรคคอร์ด
rst.MoveLast
rst.MoveFirst
If Err Then ReadRecords = conBadArgs
lngCount = rst.RecordCount
On Error GoTo 0
If lngCount Then
strMsg = "Reading " & UCase$(strTableName) & "..."
varReturn = SysCmd(acSysCmdInitMeter, strMsg, lngCount)
' Display message in status bar.
For lngX = 1 To lngCount
varReturn = SysCmd(acSysCmdUpdateMeter, lngX)
' Update meter.
' สมมติเป็นคำสั่งที่ทำงานกับเรคคอร์ด
rst.MoveNext ' ไปยังเรคคอร์ดต่อไป
Next lngX
varReturn = SysCmd(acSysCmdClearStatus)
GoSub CloseObjects
' ส่งค่าเป็นหมายเลขของเรคคอร์ด
ReadRecords = lngCount
Exit Function
End If
End If
' ไม่พบหรือไม่มีเรคคอร์ด
strMsg = "Table '" & strTableName & "'not found
or contains no records.'"
MsgBox strMsg, vbInformation, "ReadRecords"
GoSub CloseObjects
Exit Function
CloseObjects:
On Error Resume Next
rst.Close
dbs.Close
On Error GoTo 0
DoCmd.Hourglass False
Return
End Function
ตัวอย่างต่อไปแสดงการใช้ฟังก์ชัน SysCmd ที่กำหนดอากิวเมนต์ action เป็น
acSysCmdGetObjectState เพื่อหาสถานะของอ๊อบเจคที่เรียกใช้
Dim intObjType As Integer, strObjName As String, intObjState As Integer
intObjType = Application.CurrentObjectType
strObjName = Application.CurrentObjectName
intObjState = SysCmd(acSysCmdGetObjectState, intObjType, strObjName)
If intObjState <> 0 Then
' สมมติเป็นคำสั่งที่ทำงาน
End If
|