Online Reference

Home

Microsoft Reference
Knowledge Developer Database Internet Resource Forum
Access
Database Function
ดาวน์โหลดคู่มือ

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