กระทู้เก่าบอร์ด อ.Yeadram
3,123 4
URL.หัวข้อ /
URL
การ sort by หลาย field ใน access
ผมมีข้อสงสัยว่าใน access สามารถ sort by field ต่างๆ ที่เราต้องการ
หลายๆ field เหมือนเป็น level เหมือนใน excel ได้หรือไม่ครับ เพราะทดลองทำหลายวิธีแล้ว ทำไม่ได้ครับ
ครั้งล่าสุดมีผู้แนะนำให้นำ field ที่ต้องการ sort มาอยู่ติดกันแล้วจึง sort กี่ field ก้ได้ แต่ทำไม่ได้ครับ
หลายๆ field เหมือนเป็น level เหมือนใน excel ได้หรือไม่ครับ เพราะทดลองทำหลายวิธีแล้ว ทำไม่ได้ครับ
ครั้งล่าสุดมีผู้แนะนำให้นำ field ที่ต้องการ sort มาอยู่ติดกันแล้วจึง sort กี่ field ก้ได้ แต่ทำไม่ได้ครับ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R13328
อ.yeadramครับ
ขอถามแทรกตรงนี้หน่อยครับ คำถามทำนองเดียวกัน
ผมสร้างฟอร์มอิงกับตาราง บนฟอร์มมีอ็อบชั่นบ็อกให้กดเลือกเดือนเกิด แล้วให้ซับฟอร์มแสดงเรคอร์ดวันเกิดของสมาชิกออกมา
แต่วันเกิดที่แสดงออกมาไม่เรียงตามวันที่ ผมอยากให้ซับฟอร์มเรียงตามวันที่
ผมควรทำอย่างไรดีครับ? จะกำหนดใน property ของฟิลด์วันเกิด (แต่ผมหาไม่เจอ) หรือจะเขียนไว้ใน codeอ็อบชั่นบ็อกซ์ครับ
รบกวนอาจารย์ด้วยครับ ขอบคุณครับ
ขอถามแทรกตรงนี้หน่อยครับ คำถามทำนองเดียวกัน
ผมสร้างฟอร์มอิงกับตาราง บนฟอร์มมีอ็อบชั่นบ็อกให้กดเลือกเดือนเกิด แล้วให้ซับฟอร์มแสดงเรคอร์ดวันเกิดของสมาชิกออกมา
แต่วันเกิดที่แสดงออกมาไม่เรียงตามวันที่ ผมอยากให้ซับฟอร์มเรียงตามวันที่
ผมควรทำอย่างไรดีครับ? จะกำหนดใน property ของฟิลด์วันเกิด (แต่ผมหาไม่เจอ) หรือจะเขียนไว้ใน codeอ็อบชั่นบ็อกซ์ครับ
รบกวนอาจารย์ด้วยครับ ขอบคุณครับ
3 @R13332
คำสั่งใน Option Box คือคำสั่งใช้ Requery เอา source ใหม่เลย หรือว่าแค่ใช้ filter ครับ
ถ้าเป็นการ requery เอา source ใหม่
ให้คุณเพิ่มคำสั่ง sort ไปใน statement เลยครับ เช่น
me.child1.recordsource = "select * from table1 where month(bdate)=" & meOption & " order by bdate;"
me.child1.requery
แต่ถ้าเป็นการสั่งใช้ filter เช่น
me.filter = "Month(bDate)=" & meOption
me.filteron=true
วิธีนี้แนะนำให้ตั้งค่า Order by ในคุณสมบัติของฟอร์มครับ กำหนดชื่อฟิลด์เอาไว้ในนั้นได้เลย
หรือจะใช้สั่งเอา ตอน runtime ก็ได้ ก็คือต่อคำสั่งจากเบื้องต้น ด้วยคำสั่งนี้
me.child1.Orderby="[bDate]"
ปล. ถ้าต้องการเรียงกลับ ให้ต่อหลังชื่อฟิลด์ด้วย 1 เคาะและคีย์เวอร์ดว่า Desc
ถ้าเป็นการ requery เอา source ใหม่
ให้คุณเพิ่มคำสั่ง sort ไปใน statement เลยครับ เช่น
me.child1.recordsource = "select * from table1 where month(bdate)=" & meOption & " order by bdate;"
me.child1.requery
แต่ถ้าเป็นการสั่งใช้ filter เช่น
me.filter = "Month(bDate)=" & meOption
me.filteron=true
วิธีนี้แนะนำให้ตั้งค่า Order by ในคุณสมบัติของฟอร์มครับ กำหนดชื่อฟิลด์เอาไว้ในนั้นได้เลย
หรือจะใช้สั่งเอา ตอน runtime ก็ได้ ก็คือต่อคำสั่งจากเบื้องต้น ด้วยคำสั่งนี้
me.child1.Orderby="[bDate]"
ปล. ถ้าต้องการเรียงกลับ ให้ต่อหลังชื่อฟิลด์ด้วย 1 เคาะและคีย์เวอร์ดว่า Desc
4 @R13431
อ.yeadramครับ เอาไปใช้แล้ว ยังไม่ได้ผลครับ
1.ผมไปเซ็ทที่ Form Property : OrderBy [Birth1] พอกดปุ่ม Option Group ฟิลด์ที่ออกมาไม่เรียงตามวันที่ครับ
2.ผมเอาโค้ดไปใส่ใน Filter Statement ดังนี้
With CodeContextObject
If SelectMonth >= 1 And SelectMonth <= 12 Then
Me.Text108 = MonthName(SelectMonth, False) 'Text108ให้แสดงชื่อเดือน
DoCmd.ApplyFilter "", "Month(Birth1) = '" & CStr(SelectMonth) & "'", "" 'SelectMonth เป็น OptionGroup มีปุ่มเดือน(ม.ค.-ธ.ค และ ทั้งปี) 13ปุ่ม)
Else
Me.Text108 = "Whole Year"
DoCmd.ShowAllRecords
Me.Filter = "Date(Birth1)=" & ASCD
Me.FilterOn = True
Me.Filter = "Date(Birth1)=" & ASCD Me.FilterOn = True
ผมใส่โค้ดต่อท้าย พอกดปุ่ม เครื่องฟ้องที่ ASCD
ผมควรแก้ไขโค้ดนี้อย่างไรครับ? เพราะเปิดอ่าน help แล้ว ไม่พบทางแก้ไข
ฝากถามอีกข้อครับ เห็นในโค้ด declare Dim rst As String (Cancel As Integer)
Cancel As Integer คืออะไรครับ?
รบกวนอาจารย์ด้วยครับ
1.ผมไปเซ็ทที่ Form Property : OrderBy [Birth1] พอกดปุ่ม Option Group ฟิลด์ที่ออกมาไม่เรียงตามวันที่ครับ
2.ผมเอาโค้ดไปใส่ใน Filter Statement ดังนี้
With CodeContextObject
If SelectMonth >= 1 And SelectMonth <= 12 Then
Me.Text108 = MonthName(SelectMonth, False) 'Text108ให้แสดงชื่อเดือน
DoCmd.ApplyFilter "", "Month(Birth1) = '" & CStr(SelectMonth) & "'", "" 'SelectMonth เป็น OptionGroup มีปุ่มเดือน(ม.ค.-ธ.ค และ ทั้งปี) 13ปุ่ม)
Else
Me.Text108 = "Whole Year"
DoCmd.ShowAllRecords
Me.Filter = "Date(Birth1)=" & ASCD
Me.FilterOn = True
Me.Filter = "Date(Birth1)=" & ASCD Me.FilterOn = True
ผมใส่โค้ดต่อท้าย พอกดปุ่ม เครื่องฟ้องที่ ASCD
ผมควรแก้ไขโค้ดนี้อย่างไรครับ? เพราะเปิดอ่าน help แล้ว ไม่พบทางแก้ไข
ฝากถามอีกข้อครับ เห็นในโค้ด declare Dim rst As String (Cancel As Integer)
Cancel As Integer คืออะไรครับ?
รบกวนอาจารย์ด้วยครับ
Time: 0.3725s
ถ้าทำโดยวิซาร์ด
ให้จำไว้ว่า มันให้ความสำคัญ ตามลำดับฟิลด์ จาก ซ้ายไปขวาเสมอ
ถ้าเขียนเป็น statement ก็คล้ายๆ กัน คุณเอาชื่อฟิลด์ไหนขึ้นก่อน มันจะให้ความสำคัญตามลำดับนั้นครับ
Order By uID, uName, uAddress, uPhone;
มันก็จะเรียงตาม uID ก่อน ถ้า uID เท่ากันมันจะเรียงตาม uName ไล่ลำดับไปอย่างนี้
ถ้าเป็นมือใหม่จำไว้เลยนะครับ ตาราง มีไว้ให้คุณออกแบบโครงสร้างและความสัมพันธ์ มีไว้ให้คุณเก็บข้อมูล แต่ "ไม่ได้มีไว้ให้คุณเข้าไปดูข้อมูล" อย่าไปพยายาม เรียงลำดับ จัดรูปแบบใดๆ ของมัน
ถ้าอยากดูข้อมูล แล้วลำดับสวยๆ ตามใจชอบ ให้สร้างเป็นคิวรี่หรือฟอร์มหรือรายงานครับ