เรียงลำดับตัวเลขตามกลุ่มข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 5,410   11
URL.หัวข้อ / URL
เรียงลำดับตัวเลขตามกลุ่มข้อมูล

เรียนถามอาจารย์ทุกท่านครับ...ผมมีตารางข้อมูลอยู่ 3 คอลัมภ์ (NO,HN,NoLab)
จะมีวิธีเขียนอย่างไรให้ได้ข้อมูลเรียงลำดับ(NoLab)ตามกลุ่มข้อมูล(HN)โดยเรียงลำดับตาม(NO) ข้อมูลมีแบบนี้ครับ

NO     HN     NoLab
1     001
2     001
3     001
4     002
5     002
6     002
7     003
8     003
9     003
10     003
11     004
12     004
13     004
14     004
15     004
16     005
17     005

จะมีวิธีการเขียนอย่างไรให้ได้ข้อมูลแบบนี้ครับ...ต้องการบันทึกใน ตาราง หรือคิวรี่..ครับ....ถ้าเป็นใน Report มันจะใช้ Grouping Running sum กับ Over Group ถ้าจะทำในตารางต้องทำอย่างไรครับ...
NO     HN     NoLab
1     001     1
2     001     2
3     001     3
--------------------------------
4     002     1
5     002     2
6     002     3
---------------------------------
7     003     1
8     003     2
9     003     3
10     003     4
---------------------------------
11     004     1
12     004     2
13     004     3
14     004     4
15     004     5
---------------------------------
16     005     1
17     005     2

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R08977
พยายามหาใน บอร์เก่าๆก็ไม่เจอครับ...รบกวนท่านอาจารย์และท่านผู้รู้ทั้งหลายได้เอื้อเฟื้อเพื่อเป็นวิทยาทานด้วยครับ....
2 @R08979
dim conn as new adodb.connection
dim rs as new adodb.recordset
dim sql as string
dim i as long
set conn = currentproject.connection
sql = "Select * from table1 order by HN, [NO];"
rs.open sql, conn, 3,1
sql = rs(1)
do while not rs.eof
if rs(1) <> sql then i = 1
rs(2)=i
rs.update
i= i+1
sql= rs(1)
rs.movenext
loop
rs.close
set rs= nothing
set conn=nothing
3 @R08980
อบกวนอาจารย์ Yeadram อีกครั้งครับ..

มันขึ้น Runtime error 3251 ครับ
Current Recordset dosnot Support updating , This mayby limitation of the provider, or of the select locktype.

แล้วมาหยุดที่   rs(2) = i ครับ

ผมใช้ Access 2003   
No = Number
HN= Text
NoLab= Number

ต้องแก้ไขตรงไหนบ้างครับ
ขอบพระคุณมากครับ..
4 @R08981
เปลี่ยน ชนิดการล็อคระเบียน (LockType) ของชุดข้อมูลใหม่ครับ ผมให้ผิดไป
rs.open sql, conn, 3,1
เปลี่ยนเป็น
rs.open sql, conn, 3,3

เลข 3, 1 หรือ 3, 3 ที่ผมเปลี่ยนไปมานี้ หากต้องการศึกษาเพิ่มเติม
ให้ค้นจาก help หรือ msdn web site หรือ google ก็ได้ครับ
ด้วยคีย์เวิร์ด "Locktype" และ "CursorType"

หรือในเบื้องต้นหามาให้แล้วครับ สองลิงค์
ADO Locktype w3schools

ADO CursorType w3schools
5 @R08982
ขอบคุณมากครับ...อาจารย์ผมลองแก้ไขก็ใช้ได้แล้วครับและ
ผมได้ลองเอา Code ของอาจารย์มาปรับแก้...ได้แบบนี้ครับ....
ผมยัง งงๆ กับ ADO อยู่น่ะครับ...แต่แบบนี้ผมถนัดมากว่า ไม่รู้ว่าเรียกอะไรเหมือนกันครับ...ผมว่ามันคล้ายๆกัน แต่น่าจะมีข้อแตกต่าง....

Dim MyDB As Database
Dim MyRec As Recordset
Dim MySQL, sql As String

    Set MyDB = CurrentDb()
    MySQL = "Select NO, HN, NoLab "
    MySQL = MySQL & "From Table1 "
    Set MyRec = MyDB.OpenRecordset(MySQL)
    
MySQL = MyRec!HN
Do While Not MyRec.EOF
MyRec.Edit
If MyRec!HN <> sql Then i = 1
MyRec!NoLab = i
MyRec.Update
i = i + 1
sql = MyRec!HN
MyRec.MoveNext
    
    Loop
    
    DoCmd.Requery
    MyRec.Close
    MyDB.Close
    Set MyRec = Nothing
    Set MyDB = Nothing

แบบนี้มีข้อผิดพลาดตรงไหนหรือเปล่าครับ....เพราะข้อมูลมี เป็น แสน Record แต่ Code ที่อาจารย์ให้มา มันทำโดยตรงที่เทเบิลเลย แต่ที่ผมเขียน มันต้องวาดลงบน ฟอร์มก่อน ไม่ทราบว่ามีความแตกต่างในด้านความเร็วในการประมวลผลหรือเปล่าครับ....ถ้าไม่ได้ Code ของอาจารย์ผมต้องทำเป็น 10 Qry ทั้ง Select Qry ทั้ง Clostab Qry ให้วุ่นวายไปหมด ตอนนี้ผมก้ทำแค่ 2 Qry คุ้มค่าครับกับการอดนอน สองวันสองคืน...ขอบพระคุณอาจารย์มากครับที่ให้ความกระจ่าง ให้อาจารย์มีสุขภาพแข็งแรงสมบูรณ์ อยู่กับ เวบบอร์ด Access ใปนานๆนะครับ...
6 @R08983
อย่างที่ทำก็ไม่ผิดครับ
แบบที่คุณแหลมทองใช้ เรียกว่า DAO
บรรทัดคำสั่ง   MySQL = MyRec!HN
จริงๆ แล้วควรจะเป็น sql = MyRec!HN คือผมจะเก็บค่า HN เข้าตัวแปรก่อนเข้าลูปครับ แต่ดูๆ ไปมันก็ไม่จำเป็นครับ เอาเป็นว่าเอาบรรทัดนี้ออกก็ได้ครับ

ความเร็วความช้า ระหว่างการใช้ DAO กับ ADO อันนี้ต้องถาม อ.สันติสุขครับ ผมไม่ถนัด

การเปิดชุดข้อมูล ( Open recordset ) ของ DAO โดยสังเกตจากโค้ดของคุณแหลมทองจะเห็นได้ว่า ชุดข้อมูลที่เปิดขึ้นมา พร้อมแล้วที่จะให้แก้ไขข้อมูลได้

แต่การเปิดชุดข้อมูลของ ADO จะมีการแบ่งแยกระดับ เพื่อความรวดเร็ว คล่องตัว เหมาะการงานนั้นๆ หากไม่จำเป็นจริงๆ มันจะไม่เปิดแบบเต็มรูปแบบ เพื่อความเร็วและป้องกันปัญหาจราจรของข้อมูลครับ (ถ้าเป็นฐานข้อมูลใหญ่ๆ และมีผู้ใช้ในเวลาเดียวกันจากหลายๆ แหล่ง เรื่องเหล่านี้จะมีความสำคัญมากๆ ครับ)
7 @R08984
55555 ผมก็ไม่ถนัดเหมือนกัน

เคยนึกสงสัยไหมครับว่าระบบที่ไม่ได้เลือกไม่ว่าจะ DAO หรือ ADO Library แต่เมื่อทำ bound form มันก็ยังไปดึงข้อมูลและจัดการข้อมูลให้เราได้ แปลว่าอะไร ?!? แปลว่า Access มันต้องใช้ Data Access Method อะไรสักอย่างในการเข้าถึงข้อมูล แต่ Access มี DAO และ ADO อยู่แล้ว มันจะสร้าง Data Access Method ตัวใหม่เพื่อให้ใช้เป็นการภายในหรือเป็นการส่วนตัวของ Access ทำไม เมื่อเกิดข้อสงสัยนี้ ผมก็ไปได้คำตอบ (จำไม่ได้ว่าจากการถามฝรั่งหรือไปอ่านมาจากไหน) ว่า Access จะใช้ DAO เป็น Data Access Method โดนปริยาย ไม่แน่ใจว่าสิ่งนี้ยังคงเป็นจริงตั้งแต่ Access 2007 ขึ้นไปหรือไม่

ดังนั้นถ้าทำระบบเป็น bound form โดยที่เราไม่ได้กำหนดว่า recordset ที่ใช้นั้นเป็น DAO หรือ ADO ผมแนะนำให้ใช้ DAO ครับ

ไม่ว่าจะเลือกใช้ ADO หรือ DAO ที่อยากจะเตือนไว้คือ ในระบบหนึ่งๆ อย่าใช้ทั้ง 2 อย่างเพราะ connection มันคนละช่องทางกัน ข้อมูลที่ถูกอัพเดตด้วยวิธีการนึง จะไม่เห็นด้วยอีกวิธีการนึงอย่างทันทีทันใด และไปบังคับมันก็ไม่ค่อยจะได้ผลด้วย ดังนั้น Data Integrity อาจผิดเพี้ยนไปได้ ที่ผมบอกได้เพราะเคยทำมาแล้วและเจ็บปวดมาแล้ว

โดยส่วนตัวผมชอบ DAO เพราะเป็นขั้นเป็นตอนดี ผมมันพวกอนุรักษ์นิยม แต่ถ้าใครชอบพลิกแพลง โฉบเฉี่ยว ก็ ADO เลยครับ
8 @R08985
ขอบพระคุณ ท่านอาจารย์ทั้งสองมากครับ...หลักๆแล้วงานที่ทำอยู่เป็นการทำ รีพอร์ทเป็นส่วนใหญ่...มีปรับแต่งข้อมูลส่งออกเป้น Excel บ้าง เป็น Text บ้าง เป็นการอำนวยความสะดวกให้กับเพื่อนร่วมงาน เป็นข้อมูล เรือนแสนครับ....แต่ตัดมาทำ รีพอร์ทเป็นรายเดือน ใช้ Access น่าจะพอไหว....ถ้าตัดรายปี ก้ไปใช้ Fox ก็ทำได้แต Qry...อาศัย สำเนา Code จาก Access ไปว่างใน Fox ใช้ได้บ้างไม่ได้บาง เคยใช้ Access ตัดยอดข้อมูล 9 แสนกว่า เรคคอร์ด เครื่องค้างไปเลยครับ จริงๆแล้วมันก็ทำงานอยู่ แต่เราไม่ใจเย็นพอทนรอให้มันประมวลผลจนเสร็จ (SQL ใน Fox กับ Access มันไม่เหมือนกันทั้งหมด บางคำสั่งมันไม่ทำงาน อันนี้ รบกวนถามอาจารย์ทั้งสองครับว่า จริงๆแล้วมันใช้ด้วยกันได้หรือเปล่า ) ก็พยายามเรียนรู้ไปเรื่อยๆครับ ...จากที่ท่านอาจารย์ทั้งสองแนะนำ ผมควรศึกษา ADO เพราะสามารถ เช็ตรูปแบบของข้อมูลได้ว่า อ่านอย่างเดียว หรือให้แก้ไขได้ เพราะ รีพอร์ทส่วนใหญ่ก็ได้มาจากฐานข้อมูลไม่ค่อยมีการแก้ไขก็น่าลองศึกษา ADO ดู....(ADO นี่ผมนังหลับตา จนหลับไปจริงๆ ก็ยังนึกไม่ค่อยออกว่าอะไรมันอยู่ตรงไหน ถ้าเป็น DAO เหมือนว่ามันมองด้วยตาเปล่าเห็น) คงได้ปรึกษาอาจารย์อีกหลายครั้งแน่ครับ ตอนนี้ผมเขียน โปรแกรม วัสดุคงคลังของโรงพยาบาลอยู่ครับ(เขียนใช้เองในหน่วยงานราชการครับ)ก็ยังมี ข้อบกพร่องอีกเยอะเลยครับ ตรงตัด สตอค รับมาจ่ายไป ตรวจสอบแล้วก้ถูกต้องดี ครับ ตอนนี้ พบว่า ราคาของอุปกรณ์ ในการซื้อแต่ละครั้งไม่เท่ากัน(ของเหมือนกัน) มีปัญหาตอนจ่ายออกเราไม่รู้ว่าอันที่จ่ายออกไปเป็นราคาเท่าไหร่ ตัดยอดเงินสิ้นปี ข้อมูลไม่ถูกต้องครับ...กำลังคิดว่าจะใช้ระบบ บาร์โคด ไม่ทราบว่า MS ACCESS สามารถทำได้หรือเปล่าครับ รวมทั้งเครื่องแสกนลายนิ้วมือด้วยครับจะได้นำไปประยุกต์ใช้ในการให้บริการผู้ป่วยที่มารับบริการ ซึ่งส่วนใหญ่เป็นชาวเขาครับ (โรงพยาบาลที่ผมอยู่เป็นโรงพยาบาลเล็กๆ.และห่างไกล งบประมาณมีจำกัด ไม่สามารถจัดหาโปรแกรม หรูๆมาใช้ในโรงพยาบาลได้ครับ ปัจจุบัน ยังใช้โปรแกรม ที่เขียนด้วย Fox pro เป็น Text Mode อยู่เลยครับ เลยต้องเสาะหาและเรียนรู้เอาเองครับ) ก็หวังว่าคงได้อาจารย์ทั้งสองเป็นแกนหลักในการให้คำปรึกษาและข้อเสนอแนะนะครับ..และเพื่อนๆที่อยู่ในเวบบอร์ด ไท Access ทุกคน ที่ได้แลกเปลียนเรียนรู้ซึงกันและกัน...ขอบคุณอีกครั้งครับ....
9 @R08986
ลองเอาภาพพวกนี้ไปดู น่าจะทำให้มองเห็นโครงสร้างของ ADO ได้บ้าง

10 @R08987
นี่อีกรูป
11 @R08988
- SQL ของแต่ละค่ายก็มีอะไรที่แตกต่างกันเล็กน้อยครับ ส่วนใหญ่เลยก็คือการเรียกใช้ฟังก์ชั่นพ่วงไปในคำสั่ง SQL ที่อาจไม่เหมือนกันครับ

- เครื่องอ่านบาร์โค้ด เป็นอุปกรณ์ที่ไม่ขึ้นกับโปรแกรมที่จะนำไปใช้ครับ ใช้กับ Access ได้ แต่เึครื่องสแกนลายนิ้วมือนี่ผมไม่รู้ครับ ต้องลองถาม บ. ที่ขายดูว่าจะเอามาใช้กับโปรแกรมของเราได้อย่างไรบ้าง

- "ไม่รู้ว่าอันที่จ่ายออกไปเป็นราคาเท่าไหร่" ก็เพราะไม่ได้เก็บราคาไว้กับสินค้าคงคลัง ซึ่งต้องปรับเป็นแบบมีเลขล็อตหรือเลขวัสดุคงคลังแปะไปด้วย

- ไม่ต้องใช้โปรแกรมหรูหรอกครับ แต่ควรให้มันทำงานได้ถูกต้อง เป็นมิตรต่อผู้ใช้ ลดเวลาทำงานของเจ้าหน้าที่ลง เพื่อที่จะได้เอาเวลาไปดูแลคนไข้ดีกว่า

- เห็นข้อมูลมีมาก อย่าลืม backup เก็บไว้ประจำทุกวันๆ   ถ้าทำได้ backup 2 ชุด ชุดนึงเก็บไว้ในโรงพยาบาล อีกชุดเก็บไว้นอกโรงพยาบาล *** อย่า backup ระหว่างที่ฐานข้อมูลถูกใช้งาน ไม่เช่นนั้นอาจได้ข้อมูลที่นำไปใช้ไม่ได้ หรือใช้ได้แต่อาจให้ข้อมูลที่ผิดจากความเป็นจริง ***

- ขอชื่นชมครับสำหรับบุคลากรที่ทำงานในโรงพยาบาลที่ห่างไกลและจำกัดด้วยงบประมาณและสิ่งอำนวยความสะดวกต่างๆ เพราะเป็นงานที่เป็นบุญเป็นกุศลครับ ขอให้งานสำเร็จลุล่วงไปด้วยดีครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3316s