กระทู้เก่าบอร์ด อ.Yeadram
3,406 11
URL.หัวข้อ /
URL
อยากทราบลำดับที่หายไป
ผมมีฐานมูลทหารกองเกิน จำนวน 2000 คน แต่ใช้ใบสำคัญไปจำนวน 2020 ใบ (ครบ 2000 คนพอดี) แต่พอจะรู้ว่าใบสำคัญชำรุดใช้การไม่ได้ไป 20 ใบ ( 2020 -2000) แต่ผมอยากรู้ว่าใบสำคัญลำดับใดที่หายไป
เช่น 1 เล่ม มีใบสำคัญ 100 ใบ ใช้ได้ 98 คน ชำรุด 2 ใบ อยากรู้ว่าลำดับใดที่ชำรุด
เช่น 1 เล่ม มีใบสำคัญ 100 ใบ ใช้ได้ 98 คน ชำรุด 2 ใบ อยากรู้ว่าลำดับใดที่ชำรุด
11 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R17006
ต้องดูก่อนว่าออกแบบฐานข้อมูลไว้อย่างไร แต่ดูจากโจทย์แล้ว ข้อนี้ก็ไม่ยากอะไร ทำได้หลายวิธี
2 @R17007
การออกแบบ
1.เขตข้อมูล จะมี [ปีใบสำคัญ], [เล่มที่] และ [เลขที่] ต่อ 1 คน/1ใบ เช่น นาย ก ใบสำคัญ เล่มที่ 1 เลขที่ 1 (ใน 1 เล่ม มี 100 ใบ)
2.ที่ผมใช้ในคิวรี [ระบุปีใบสำคัญ] [ระบุเล่มที่] และ [ระบุเลขที่] แล้วใช้ count(*) นับจำนวน เช่น ปี 2557 เล่มที่ 1 ผลรวมมี 98 คน แต่เราใช้ใบสำคัญไป 100 ใบเรา อยากทราบเลขที่ใดบ้างที่ชำรุดไป 2 ใบ ก็ต้องมาตรวจสอบเลขว่าเลขใด (เช่น 1,2,3,4,5,9...) เลขที่หายไป เลขที่ 6,7 หายไป
3.มีวิธีใดบ้างเผื่่อผมมาทดลองทำดู
1.เขตข้อมูล จะมี [ปีใบสำคัญ], [เล่มที่] และ [เลขที่] ต่อ 1 คน/1ใบ เช่น นาย ก ใบสำคัญ เล่มที่ 1 เลขที่ 1 (ใน 1 เล่ม มี 100 ใบ)
2.ที่ผมใช้ในคิวรี [ระบุปีใบสำคัญ] [ระบุเล่มที่] และ [ระบุเลขที่] แล้วใช้ count(*) นับจำนวน เช่น ปี 2557 เล่มที่ 1 ผลรวมมี 98 คน แต่เราใช้ใบสำคัญไป 100 ใบเรา อยากทราบเลขที่ใดบ้างที่ชำรุดไป 2 ใบ ก็ต้องมาตรวจสอบเลขว่าเลขใด (เช่น 1,2,3,4,5,9...) เลขที่หายไป เลขที่ 6,7 หายไป
3.มีวิธีใดบ้างเผื่่อผมมาทดลองทำดู
3 @R17008
- ผมพยายามจะทำความเข้าใจกับตารางของคุณก่อนนะครับ คือ คุณหมายถึง มีตารางข้อมูลอยู่เพียงตารางเดียว สมมุติมีฟิวด์อยู่ 4 ฟิวด์ คือ 1.ปีใบสำคัญ 2.เล่มที่ 3.เลขที่ 4.ชื่อ-สกุล โดยฟิวด์เลขที่นั้น เป็นแบบเรียงลำดับไปเรื่อยๆตั้งแต่เลข1
- พอคุณทำคิวรี่นับเลขที่ สมมุติของ ปี 2557 เล่มที่ 1 คุณนับได้ 98 ใบ (แสดงว่ามีข้อมูลอยู่ 98 records หรือมีเลขที่ 2 ใบที่หายไป สมมุติคือเลขที่ 6,7)
ไม่รู้ว่าผมเข้าใจโจทย์ถูกหรือเปล่าครับ
- พอคุณทำคิวรี่นับเลขที่ สมมุติของ ปี 2557 เล่มที่ 1 คุณนับได้ 98 ใบ (แสดงว่ามีข้อมูลอยู่ 98 records หรือมีเลขที่ 2 ใบที่หายไป สมมุติคือเลขที่ 6,7)
ไม่รู้ว่าผมเข้าใจโจทย์ถูกหรือเปล่าครับ
4 @R17009
-ถูกต้องครับ
- เพิ่มเติม ใน 1 เล่ม มี 100 ใบ ผมตี Running 1-100 แต่ผมลงบัญชีทหารกองเกินได้เพียง 98 คน ใช้ Count(*) (คนที่ 98 เลขที่ Running=100) พอไล่นับจึงทราบว่าเลขที่ 6,7 หายไป เพราะว่าชำรุดไม่ได้นำมาใข้งาน เมื่อนำมารวมกันแล้ว= 100 ใบพอดี
- ต้องการให้แสดงเลขที่ที่หายไป เช่น เลขที่ 6,7
- เพิ่มเติม ใน 1 เล่ม มี 100 ใบ ผมตี Running 1-100 แต่ผมลงบัญชีทหารกองเกินได้เพียง 98 คน ใช้ Count(*) (คนที่ 98 เลขที่ Running=100) พอไล่นับจึงทราบว่าเลขที่ 6,7 หายไป เพราะว่าชำรุดไม่ได้นำมาใข้งาน เมื่อนำมารวมกันแล้ว= 100 ใบพอดี
- ต้องการให้แสดงเลขที่ที่หายไป เช่น เลขที่ 6,7
5 @R17013
การออกแบบตารางเดียวแบบนี้และไม่ได้บันทึกข้อมูลไว้หมดทุกรายการ ปัญหาคือ ไม่มีอะไรเป็นตัวเปรียบเทียบเพื่อดึงเลขที่หายไปออกมา วิธีแก้ปัญหาเฉพาะหน้าที่ผมคิดได้ตอนนี้คือ ถ้าเราสร้างตาราง Temp ขึ้นมาให้มีเลข Running No. อยู่ครบ เพื่อใช้เปรียบเทียบ ก็จะสามารถดึงเลขที่หายไปออกมาได้ครับ โดยใช้ตัว Unmatch Query มาช่วยเปรียบเทียบหาได้ครับ
ทั้งนี้ อาจมีอาจารย์ท่าั้นอื่นที่มีวิธีแก้ปัญหาโจทย์นี้ได้ดีกว่าผม ผมก็รบกวนขอความรู้ด้วยคนครับ
(ปล. ถ้าสมมุติว่าเราออกแบบเพิ่มอีก 1 ฟิวด์ในตารางนี้ เป็นแบบ yes/no เพื่อใช้บอกสถานะการชำรุดของเอกสาร แล้วต่อไปก็ลงบันทึกให้ครบหมดทุกรายการ เวลาจะดูว่ารายการไหนที่หายไป ก็ทำคิวรี่กำหนดจากสถานะ จะสามารถหาคำตอบได้โดยง่ายเลยนะครับ)
ทั้งนี้ อาจมีอาจารย์ท่าั้นอื่นที่มีวิธีแก้ปัญหาโจทย์นี้ได้ดีกว่าผม ผมก็รบกวนขอความรู้ด้วยคนครับ
(ปล. ถ้าสมมุติว่าเราออกแบบเพิ่มอีก 1 ฟิวด์ในตารางนี้ เป็นแบบ yes/no เพื่อใช้บอกสถานะการชำรุดของเอกสาร แล้วต่อไปก็ลงบันทึกให้ครบหมดทุกรายการ เวลาจะดูว่ารายการไหนที่หายไป ก็ทำคิวรี่กำหนดจากสถานะ จะสามารถหาคำตอบได้โดยง่ายเลยนะครับ)
6 @R17015
ผมขอยกตัวอย่างง่ายๆ ให้คุณลองไปปรับใช้ดูแล้วกันนะครับ
สมมุติว่าผมมีตารางชื่อ Table1 ในตารางมีฟิลด์ชื่อ ID สำหรับเก็บเลขตามลำดับเรคคอร์ดที่สร้างขึ้น ที่นี่บางเรคคอร์ดมีการลบที่ไป เช่น 1,2,3,4,6,7,9... พอมากขึ้นผมต้องการหาว่าเลข ID ไหนผมหายไปบ้าง ผมก็จะเขียนโค๊ดบนฟอร์มประมาณนี้ครับ
- สร้างปุ่มขึ้นมา ใส่โค๊ดใน On Click
Dim Last_Num As Long, i As Long, beLost As String
Last_Num = DLast("ID", "Table1")
For i = 1 To Last_Num
If IsNull(DLookup("ID", "Table1", "ID = " & i)) Then
If beLost & "" = "" Then
beLost = i
Else
beLost = beLost & ", " & i
End If
End If
Next
MsgBox "เลขที่ " & beLost
ประมาณนี้ครับ ไม่รู้ตรงตรรกะที่คุณต้องการหรือเปล่า ปรับใช้ดูนะครับ
สมมุติว่าผมมีตารางชื่อ Table1 ในตารางมีฟิลด์ชื่อ ID สำหรับเก็บเลขตามลำดับเรคคอร์ดที่สร้างขึ้น ที่นี่บางเรคคอร์ดมีการลบที่ไป เช่น 1,2,3,4,6,7,9... พอมากขึ้นผมต้องการหาว่าเลข ID ไหนผมหายไปบ้าง ผมก็จะเขียนโค๊ดบนฟอร์มประมาณนี้ครับ
- สร้างปุ่มขึ้นมา ใส่โค๊ดใน On Click
Dim Last_Num As Long, i As Long, beLost As String
Last_Num = DLast("ID", "Table1")
For i = 1 To Last_Num
If IsNull(DLookup("ID", "Table1", "ID = " & i)) Then
If beLost & "" = "" Then
beLost = i
Else
beLost = beLost & ", " & i
End If
End If
Next
MsgBox "เลขที่ " & beLost
ประมาณนี้ครับ ไม่รู้ตรงตรรกะที่คุณต้องการหรือเปล่า ปรับใช้ดูนะครับ
7 @R17022
ขอบคุณครับ
ทดลองแล้ว แต่มันไม่ตรงประเด็น
-ตัวอย่าง
นายดำ แดง (แล้วมีข้อมูลอีกมาก) และบันทึก ปีใบสำคัญ(2557) เล่มที่ (1) เลขที่(66)
พอนำใบสำคัญเลขที่ 66 ไปพิมพ์ เกิดปัญหา เช่น พิมพ์ไม่ตรง อื่น ๆ ไม่สามารถมอบให้กับทหารกองเกินได้ เราจึงนำใบสำคัญเลขที่ 67 (แล้วแก้ไขข้อมูลจากเลขที่ 66 เป็น 67) พิมพ์ข้อมูล สำเร็จ
พอสิ้นปีการลงบัญชีทหารกองเกิน เราต้องการทราบว่า เลขที่ใดบ้างที่ชำรุด/ใช้การไม่ได้ พอคลิก ให้แสดงสิ่งที่เราไม่ได้ใช่
ปีใบลำคัญ 2557
เล่มที่ 1
เลขที่ 66
เพื่อให้ง่ายในการตรวจสอบหลักฐาน
ท่านอาจารย์ท่านใดที่มีความสามารถแก้ไขปัญหา....ขอบคุณล่วงหน้าครับ
ทดลองแล้ว แต่มันไม่ตรงประเด็น
-ตัวอย่าง
นายดำ แดง (แล้วมีข้อมูลอีกมาก) และบันทึก ปีใบสำคัญ(2557) เล่มที่ (1) เลขที่(66)
พอนำใบสำคัญเลขที่ 66 ไปพิมพ์ เกิดปัญหา เช่น พิมพ์ไม่ตรง อื่น ๆ ไม่สามารถมอบให้กับทหารกองเกินได้ เราจึงนำใบสำคัญเลขที่ 67 (แล้วแก้ไขข้อมูลจากเลขที่ 66 เป็น 67) พิมพ์ข้อมูล สำเร็จ
พอสิ้นปีการลงบัญชีทหารกองเกิน เราต้องการทราบว่า เลขที่ใดบ้างที่ชำรุด/ใช้การไม่ได้ พอคลิก ให้แสดงสิ่งที่เราไม่ได้ใช่
ปีใบลำคัญ 2557
เล่มที่ 1
เลขที่ 66
เพื่อให้ง่ายในการตรวจสอบหลักฐาน
ท่านอาจารย์ท่านใดที่มีความสามารถแก้ไขปัญหา....ขอบคุณล่วงหน้าครับ
8 @R17026
ผมลองทำดูตามแบบของผม ก็ทำได้นะครับ คือ
1. สร้างตาราง Temp ขึ้นมาเองก่อน โดยให้มีเลข Running No. ครบทุกจำนวน (สร้างเองโดย Copy จาก Excel มาแปะก็ได้ หรือใช้ Function Access ชื่อ GetNextCounter([FieldName]) สร้างก็ได้ หรือเขียน Loop โดยใช้ VBA ก็ได้)
2. ใช้ Unmatch Query เปรียบเทียบหาตัวเลขที่หายไป ก็จะได้ผลลัพธ์ตามต้องการครับ (ถ้าฝาก email ไว้ได้ จะส่งตัวอย่างที่ทำไว้ไปให้ดูครับ)
1. สร้างตาราง Temp ขึ้นมาเองก่อน โดยให้มีเลข Running No. ครบทุกจำนวน (สร้างเองโดย Copy จาก Excel มาแปะก็ได้ หรือใช้ Function Access ชื่อ GetNextCounter([FieldName]) สร้างก็ได้ หรือเขียน Loop โดยใช้ VBA ก็ได้)
2. ใช้ Unmatch Query เปรียบเทียบหาตัวเลขที่หายไป ก็จะได้ผลลัพธ์ตามต้องการครับ (ถ้าฝาก email ไว้ได้ จะส่งตัวอย่างที่ทำไว้ไปให้ดูครับ)
9 @R17032
ผมขอยกตัวอย่างง่ายๆ ให้คุณลองไปปรับใช้ดูแล้วกันนะครับ
สมมุติว่าผมมีตารางชื่อ Table1 ในตารางมีฟิลด์ชื่อ ID สำหรับเก็บเลขตามลำดับเรคคอร์ดที่สร้างขึ้น ที่นี่บางเรคคอร์ดมีการลบที่ไป เช่น 1,2,3,4,6,7,9... พอมากขึ้นผมต้องการหาว่าเลข ID ไหนผมหายไปบ้าง ผมก็จะเขียนโค๊ดบนฟอร์มประมาณนี้ครับ
- สร้างปุ่มขึ้นมา ใส่โค๊ดใน On Click
Dim Last_Num As Long, i As Long, beLost As String
Last_Num = DLast("ID", "Table1")
For i = 1 To Last_Num
If IsNull(DLookup("ID", "Table1", "ID = " & i)) Then
If beLost & "" = "" Then
beLost = i
Else
beLost = beLost & ", " & i
End If
End If
Next
MsgBox "เลขที่ " & beLost
ประมาณนี้ครับ ไม่รู้ตรงตรรกะที่คุณต้องการหรือเปล่า ปรับใช้ดูนะครับ
จากข้อมูลของอาจารย์ TTT
จากกรณีดังกล่าว พอลำดับไป ถ้าเราอยากขยับให้ข้อมูลเรียงกันใหม่
จะต้องเขียนโค้ดอย่างไรครับ เช่น 1,2,3,4,6,7,9... ขยับใหม่
อยากได้เป็น 1,2,3,4,5,6,7
ประมาณนี้คับผม
สมมุติว่าผมมีตารางชื่อ Table1 ในตารางมีฟิลด์ชื่อ ID สำหรับเก็บเลขตามลำดับเรคคอร์ดที่สร้างขึ้น ที่นี่บางเรคคอร์ดมีการลบที่ไป เช่น 1,2,3,4,6,7,9... พอมากขึ้นผมต้องการหาว่าเลข ID ไหนผมหายไปบ้าง ผมก็จะเขียนโค๊ดบนฟอร์มประมาณนี้ครับ
- สร้างปุ่มขึ้นมา ใส่โค๊ดใน On Click
Dim Last_Num As Long, i As Long, beLost As String
Last_Num = DLast("ID", "Table1")
For i = 1 To Last_Num
If IsNull(DLookup("ID", "Table1", "ID = " & i)) Then
If beLost & "" = "" Then
beLost = i
Else
beLost = beLost & ", " & i
End If
End If
Next
MsgBox "เลขที่ " & beLost
ประมาณนี้ครับ ไม่รู้ตรงตรรกะที่คุณต้องการหรือเปล่า ปรับใช้ดูนะครับ
จากข้อมูลของอาจารย์ TTT
จากกรณีดังกล่าว พอลำดับไป ถ้าเราอยากขยับให้ข้อมูลเรียงกันใหม่
จะต้องเขียนโค้ดอย่างไรครับ เช่น 1,2,3,4,6,7,9... ขยับใหม่
อยากได้เป็น 1,2,3,4,5,6,7
ประมาณนี้คับผม
10 @R17033
ผมขอฝากเมลล์ sadsadeekabchoeng@hotmail.com
ขอคุณล่วงหน้านะครับ
ขอคุณล่วงหน้านะครับ
11 @R17035
@LADA ถ้าให้ตอบแบบง่ายสุด คุณก็อาจใช้การสร้างฟิลด์ Autonumber ขึ้นมาใหม่อีกฟิดล์ในตารางเดิม โปรแกรมมันจะรันเลขเรียงให้เองครับ แต่ถ้าอยากแก้ของเดิมโดยใช้การเขียนเป็นโค๊ด เราก็อาจเขียนเป็นแนวๆนี้ได้ครับ (ใช้ตัวอย่างเดิม)
ปล. หากเป็นการลบกวน จขกท ต้องขออภัย
Dim rs As DAO.Recordset, i As Long
i = 1
Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!ID = i
rs.Update
i = i + 1
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
ปล. หากเป็นการลบกวน จขกท ต้องขออภัย
Time: 0.3448s