หากคุณเคยต้องการสร้างรายการค่าฟิลด์/แบบสอบถามที่คั่นด้วยข้อมูลอื่น ๆ จากฐานข้อมูลของคุณ คุณจะรู้ว่ามันอาจเป็นเรื่องท้าทายอย่างมาก และเป็นงานที่คนส่วนใหญ่คิดว่าเป็นไปไม่ได้ ตัวอย่างเช่น หากคุณได้รับมอบหมายให้จัดทำรายงานว่าใครคือพนักงานขาย 5 อันดับแรก (เรียงลำดับจากมากไปน้อย) ในแต่ละเดือนของปี หรือร้านค้า 3 แห่งที่อยู่ใกล้ลูกค้าแต่ละรายมากที่สุด คุณอาจต้องจัดการกับแบบสอบถามแบบตารางไขว้ หรือรวมผลลัพธ์ด้วยตนเองนอก Access แต่ด้วยความช่วยเหลือจากโค้ด VBA เพียงเล็กน้อย คุณจะสามารถสร้างผลลัพธ์ดังต่อไปนี้ได้ในเวลาไม่กี่นาที…
| แจน | จอห์นแซลลีบิล |
| กุมภาพันธ์ | แซลลี่อดัมจอห์น |
| ทำลาย | อดัมแซลลีบิล |
มีหลายครั้งที่การแสดงรายการผลลัพธ์ที่คั่นด้วยตัวคั่นเป็นส่วนหนึ่งของข้อความค้นหาที่มีขนาดใหญ่ขึ้นจะเป็นประโยชน์ซึ่ง ได้แก่ รายชื่อลูกค้าที่ใหญ่ที่สุด 3 อันดับแรกสำหรับตัวแทนฝ่ายขายแต่ละรายร้านค้า 5 แห่งที่ใกล้ที่สุดสำหรับลูกค้าที่มีการใช้จ่ายสูงสุดของคุณแต่ละราย รายการต่อไป
หยุดเย็บรายงานของคุณเข้าด้วยกัน
แม้ว่าจะเป็นไปได้มากกว่าที่จะได้รับรายละเอียดในการสร้างรายงานประเภทนั้น แต่โดยปกติแล้วคุณจะต้องรวมผลลัพธ์เข้าด้วยกันภายนอก Access เป็นส่วนหนึ่งของสเปรดชีตหรือรายงาน
โค้ดต่อไปนี้จะช่วยลดความจำเป็นในการดำเนินการกับผลลัพธ์ของคิวรีภายนอก Access และจะช่วยให้คุณสามารถสร้างผลลัพธ์ที่แสดงไว้ด้านบนได้อย่างง่ายดาย
ก่อนอื่นให้ร่างสิ่งที่เราต้องการให้โค้ดสามารถทำได้:
“ ให้คำค้นหาส่งคืนจำนวนผลลัพธ์ x รวมกันเป็นสตริงเดียวที่คั่นด้วย y”
ก่อนที่เราจะเริ่ม
ก่อนที่เราจะดูโค้ดสิ่งสำคัญคือต้องทราบว่าแม้ว่าจะเป็นไปได้ที่จะสร้างฟังก์ชัน VBA ที่เป็นแบบทั่วไปและสามารถจัดการการค้นหาร่วมกันได้การทำเช่นนั้นจะส่งผลให้โค้ดค่อนข้างยาวดังนั้นสิ่งที่เราจะทำในบทความนี้ คือการกำหนดกรณีตัวอย่างและเขียนฟังก์ชันเพื่อจัดการกรณีนั้น การทำเช่นนี้จะช่วยให้คุณสามารถสร้างโค้ดใหม่เพื่อตอบสนองความต้องการเฉพาะของคุณได้ง่ายขึ้นมาก
กรณีตัวอย่าง
เรามีฐานข้อมูลการขายที่เก็บรายละเอียดการซื้อของลูกค้าพร้อมกับหมวดหมู่ของผลิตภัณฑ์ที่ซื้อ เราต้องการจัดทำรายงานที่แสดงหมวดหมู่ 3 อันดับแรกโดยเรียงลำดับจากมากไปหาน้อยตามเดือน
เพื่อความง่ายเราจะเก็บตัวอย่างไว้ในตารางเดียวแม้ว่าหลักการจะทำงานไม่ว่าคุณจะตั้งค่าแบบใด ตารางที่เราจะใช้ตั้งค่าดังนี้:
| การขาย |
| ชื่อลูกค้า |
| วันที่ทำรายการ |
| มูลค่าธุรกรรม |
| Category |
เห็นได้ชัดว่านี่เป็นการตั้งค่าที่ง่ายเกินไป แต่คุณเข้าใจแล้ว
ตอนนี้ - รหัส
Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
Dim sSql, resultString As String
Dim rst As Recordset
Dim firstLine As Boolean
'Create our SQL string using the supplied parameters
sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
Set rst = CurrentDb.OpenRecordset(sSql)
firstLine = True
'Loop through the results, and create the string to return
With rst
Do While Not .EOF
If Not firstLine Then
resultString = resultString & Delimiter & .Fields("category")
Else
resultString = resultString & .Fields("category")
firstLine = False
End If
.MoveNext
Loop
End With
Set rs = Nothing
CategoryList = resultString
End Function
รหัส - อธิบาย

คุณจะสังเกตเห็นว่าเราตรวจสอบว่าเราควรจะเพิ่มตัวคั่นในสตริงหรือไม่ - หากไม่มีการตรวจสอบนี้คุณจะได้รับสตริงผลลัพธ์ที่มีรูปแบบไม่ดีหรือคุณจะต้องเพิ่มโค้ดเพื่อลบตัวคั่นที่ไม่ต้องการ - วิธีนี้จะช่วยให้สิ่งต่างๆดีและเป็นระเบียบเรียบร้อยตั้งแต่เริ่มแรก
แน่นอนว่าฟังก์ชันนี้สามารถเรียกใช้จากในแบบสอบถามรายงานหรือที่ใดก็ได้ที่คุณต้องการจากภายใน Access
แก้ไขฐานข้อมูลการเข้าถึงที่เสียหาย
หากคุณพบ ฐานข้อมูลการเข้าถึงที่เสียหาย เมื่อคุณเรียกใช้โค้ดด้านบนคุณควรใช้เครื่องมือพิเศษบางอย่างเพื่อซ่อมแซมและกู้คืนตารางทั้งหมดจากฐานข้อมูลที่เสียหาย
บทนำผู้เขียน:
Mitchell Pond เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซมปัญหา SQL และผลิตภัณฑ์ซอฟต์แวร์กู้คืน excel ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.