กระทู้เก่าบอร์ด อ.Yeadram
2,243 13
URL.หัวข้อ /
URL
ปัญหาการคิวรี่
ไม่ทราบว่าเราจะควิรี่ให้เป็นกลุ่มได้หรือไม่ คือ
ผมสร้างคิวรี่มา 1 คิวรี่ มีรายละเอียด
A = Auto Number
B = เลขที่เงินเดือน (text)
C = ชื่อ (text)
D = เงินเดือน (Number)
E = หน่วยงาน (text)
(สมมติมีข้อมูลอยู่ 25 ราย จริงแล้วมากกว่านี้มาก)
เมื่อเรียกคิวรี่แล้วจะเป็น
A B C D E
ปัญหาคือ ต้องการให้คิวรี่ทำการจำกลุ่มให้ 10 รายแรก = กลุ่ม 1, 10 รายต่อมา = กลุ่ม 2 และต่อมา = กลุ่ม 3
(เมื่อเรียกคิวรี่ให้ขึ้นมาจะเป็นเรียงด้วย Auto Number หรือ อักษรชื่อ ก็ให้จับกลุ่มเหมือนกัน คือเมื่อเรียกขึ้นมา ก็ให้ดูตั้งแต่บรรทัดแรกที่ขึ้นมาเลยครับ)
เช่น
A B C D E G
1 125 ก 6500 ธุรการ 1
2 127 ข 6500 ธุรการ 1
3 135 จ 7500 พัสดุ 1
4 122 ค 6500 ธุรการ 1
5 137 ช 6500 ธุรการ 1
6 145 ซ 7500 พัสดุ 1
7 146 ฉ 6500 ธุรการ 1
8 150 ง 6500 ธุรการ 1
9 142 ญ 7500 พัสดุ 1
10 133 ฎ 6500 ธุรการ 1
11 147 ฐ 6500 ธุรการ 2
12 152 ฑ 7500 พัสดุ 2
เป็นต้น
ผมขอให้ อ. และท่านผู้รู้ ช่วยเหลือด้วยครับ
ผมสร้างคิวรี่มา 1 คิวรี่ มีรายละเอียด
A = Auto Number
B = เลขที่เงินเดือน (text)
C = ชื่อ (text)
D = เงินเดือน (Number)
E = หน่วยงาน (text)
(สมมติมีข้อมูลอยู่ 25 ราย จริงแล้วมากกว่านี้มาก)
เมื่อเรียกคิวรี่แล้วจะเป็น
A B C D E
ปัญหาคือ ต้องการให้คิวรี่ทำการจำกลุ่มให้ 10 รายแรก = กลุ่ม 1, 10 รายต่อมา = กลุ่ม 2 และต่อมา = กลุ่ม 3
(เมื่อเรียกคิวรี่ให้ขึ้นมาจะเป็นเรียงด้วย Auto Number หรือ อักษรชื่อ ก็ให้จับกลุ่มเหมือนกัน คือเมื่อเรียกขึ้นมา ก็ให้ดูตั้งแต่บรรทัดแรกที่ขึ้นมาเลยครับ)
เช่น
A B C D E G
1 125 ก 6500 ธุรการ 1
2 127 ข 6500 ธุรการ 1
3 135 จ 7500 พัสดุ 1
4 122 ค 6500 ธุรการ 1
5 137 ช 6500 ธุรการ 1
6 145 ซ 7500 พัสดุ 1
7 146 ฉ 6500 ธุรการ 1
8 150 ง 6500 ธุรการ 1
9 142 ญ 7500 พัสดุ 1
10 133 ฎ 6500 ธุรการ 1
11 147 ฐ 6500 ธุรการ 2
12 152 ฑ 7500 พัสดุ 2
เป็นต้น
ผมขอให้ อ. และท่านผู้รู้ ช่วยเหลือด้วยครับ
13 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R17185
สงสัย อ. หรือ ท่านผู้รู้ ยังไม่ว่างกัน ผมจะรอครับ
ช่วยเหลือด้วยครับ
ขอบคุณ
ช่วยเหลือด้วยครับ
ขอบคุณ
3 @R17187
ให้เอาคิวรี่นี้มาสร้างเป็น Continuous Form หรือ Datasheet Form แล้วสร้าง เท็กซ์บ็อกซ์ T บนฟอร์มซึ่งจะแสดงค่าของเลขกลุ่ม ส่วนเลขกลุ่มก็ลองหาจากกระทู้เก่าด้วยคำว่า AbsolutePosition ดูครับ ซึ่งจะให้เลขเรียงลำดับ 1,2,3, ... แก่เรคอร์ดบนฟอร์มออกมาให้ เราก็เอา =(((ชื่อฟังก์ชั่น(A) - 1) \ 10) + 1) มาใส่ลง ControlSource property ของ T ก็จะได้ค่าตามต้องการครับ
4 @R17188
จากตัวอย่างที่ให้มา และสูตรของ อ.สันติสุข คุณเขียน SQL ในคิวรี่แบบนี้ดูครับ
สมมุติตารางชื่อ Table1
SELECT Table1.A, Table1.B, Table1.C, Table1.D, Table1.E, Int(((Select count(*) From [Table1] as b Where b.A<= [Table1].[A])-1)/10) + 1 AS G
FROM Table1;
ประมาณนี้ครับ ลองปรับใช้ดู
สมมุติตารางชื่อ Table1
SELECT Table1.A, Table1.B, Table1.C, Table1.D, Table1.E, Int(((Select count(*) From [Table1] as b Where b.A<= [Table1].[A])-1)/10) + 1 AS G
FROM Table1;
ประมาณนี้ครับ ลองปรับใช้ดู
5 @R17189
ขอขอบคุณ อ.สันติสุข และคุณ TTT มากครับ เดี๋ยวผมจะลองนำของคุณ TTT ไปปรับลองใช้ดูก่อน เพราะจะตรงกับที่ต้องการ ได้ผลประการใดจะมาบอกอีกครั้งครับ
6 @R17190
ของคุณ TTT ใช้ได้เฉพาะเมื่อเรียงด้วย A จากน้อยไปมากเท่านั้นนะครับ
7 @R17194
ครับ อ.สันติสุข ครับ ผมได้ลองของคุณ TTT แล้วทำได้ครับ แต่ก็เป็นแบบ อ.ว่า คือ
พอผมเรียกคิวรี่ให้เรียงตัวอักษร กลุ่มที่ทำไว้ มันไม่เริ่มจับกลุ่มเป็น 1 ตั้งแต่บรรทัดแรก มันจะสลับไปมาครับ จะมีวิธีแก้ไขอย่างไรครับ ถ้าต้องการทำในคิวรี่นี้ครับ อ.สันติสุข และคุณ TTT จะมีวิธีแก้ไขอย่างไร และขอเพิ่มเติมอีกนิดครับ คือ
ถ้าผมจะนำคิวรี่นี้ไปใช้ออกรายงาน (Report) จะใช้ได้เลยใหมครับ เพราะผมลองดูแล้ว มันบอกว่ามีข้อผิดพลาด แล้วมันก็ให้ออกจากโปรแกรม และให้ทำสำรองไพล์ใหม่ครับ ไม่ทราบเป็นเพราะอะไรครับ
ขอให้ อ.สันติสุข และคุณ TTT ช่วยดู และแก้ไขให้ด้วยครับ
ขอขอบคุณครับ
พอผมเรียกคิวรี่ให้เรียงตัวอักษร กลุ่มที่ทำไว้ มันไม่เริ่มจับกลุ่มเป็น 1 ตั้งแต่บรรทัดแรก มันจะสลับไปมาครับ จะมีวิธีแก้ไขอย่างไรครับ ถ้าต้องการทำในคิวรี่นี้ครับ อ.สันติสุข และคุณ TTT จะมีวิธีแก้ไขอย่างไร และขอเพิ่มเติมอีกนิดครับ คือ
ถ้าผมจะนำคิวรี่นี้ไปใช้ออกรายงาน (Report) จะใช้ได้เลยใหมครับ เพราะผมลองดูแล้ว มันบอกว่ามีข้อผิดพลาด แล้วมันก็ให้ออกจากโปรแกรม และให้ทำสำรองไพล์ใหม่ครับ ไม่ทราบเป็นเพราะอะไรครับ
ขอให้ อ.สันติสุข และคุณ TTT ช่วยดู และแก้ไขให้ด้วยครับ
ขอขอบคุณครับ
8 @R17195
คืออย่างนี้นะครับ โค๊ดที่ผมให้ไปถ้าคุณดูดีๆ มันก็คือการทำ Running Number ในคิวรี่นั่นเอง แต่ใช้การคำนวณสูตรเข้าไปเพิ่มเพื่อให้มันได้ตัวเลขแบบที่ต้องการ
การทำ Running Number ในคิวรี่มันมีข้อจำกัดคือ ฟิลด์ที่ใช้ในการอ้างอิงจำนวนนับ จะต้องเป็นค่าที่ไม่ซ้ำกัน และข้อมูลในฟิลด์จะต้องเป็นค่าที่สามารถเปรียบเทียบค่ามากว่า น้อยกว่าได้
ซึ่งแน่นอนครับว่ามีผลต่อการจัดเรียงข้อมูลหากคุณไม่เรียงข้อมูลตามฟิลด์ที่ใช้ทำ Running Number (จากในตัวอย่างของคุณน่าจะใช้ได้แค่ฟิลด์ A และ C เท่านั้น) ก็จะทำให้เลขไม่เรียงกันอย่างที่คุณเจอนั่นแหละครับ คุณจึงต้องจัดเรียงข้อมูลตามฟิลด์ที่คุณทำ Running Number เท่านั้น
แต่หากคุณใช้วิธีอย่างที่ อ.สันติสุข แนะนำเข้าใจว่าจะเป็นการใช้การเปิด Record set (ผมไม่ได้เข้าไปหาอย่างที่อาจารย์แนะนำ แค่เดาเอาเพราะเห็นเรื่องการใช้ AbsolutePosition) มันก็จะแก้ปัญหาข้างต้นได้ เพียงแต่ก็จะใช้ทำในคิวรี่ไม่ได้ครับ
แต่ผมว่าไม่ใช่ประเด็นครับ ประเด็นอยู่ตรงสูตร
((Running Number - 1) \ 10) + 1
และประเด็นว่าคุณจะเอาไปทำอะไร ถ้าคุณจะเอาไปออกรายงาน ผมแนะนำให้ทำฟิลด์ Running Sum ในรายงานขึ้นมาในรายงานเลย แล้วนำเลข Running Sum นี้เข้าสูตรไปเลยก็ได้ครับ
การทำ Running Number ในคิวรี่มันมีข้อจำกัดคือ ฟิลด์ที่ใช้ในการอ้างอิงจำนวนนับ จะต้องเป็นค่าที่ไม่ซ้ำกัน และข้อมูลในฟิลด์จะต้องเป็นค่าที่สามารถเปรียบเทียบค่ามากว่า น้อยกว่าได้
ซึ่งแน่นอนครับว่ามีผลต่อการจัดเรียงข้อมูลหากคุณไม่เรียงข้อมูลตามฟิลด์ที่ใช้ทำ Running Number (จากในตัวอย่างของคุณน่าจะใช้ได้แค่ฟิลด์ A และ C เท่านั้น) ก็จะทำให้เลขไม่เรียงกันอย่างที่คุณเจอนั่นแหละครับ คุณจึงต้องจัดเรียงข้อมูลตามฟิลด์ที่คุณทำ Running Number เท่านั้น
แต่หากคุณใช้วิธีอย่างที่ อ.สันติสุข แนะนำเข้าใจว่าจะเป็นการใช้การเปิด Record set (ผมไม่ได้เข้าไปหาอย่างที่อาจารย์แนะนำ แค่เดาเอาเพราะเห็นเรื่องการใช้ AbsolutePosition) มันก็จะแก้ปัญหาข้างต้นได้ เพียงแต่ก็จะใช้ทำในคิวรี่ไม่ได้ครับ
แต่ผมว่าไม่ใช่ประเด็นครับ ประเด็นอยู่ตรงสูตร
((Running Number - 1) \ 10) + 1
และประเด็นว่าคุณจะเอาไปทำอะไร ถ้าคุณจะเอาไปออกรายงาน ผมแนะนำให้ทำฟิลด์ Running Sum ในรายงานขึ้นมาในรายงานเลย แล้วนำเลข Running Sum นี้เข้าสูตรไปเลยก็ได้ครับ
9 @R17196
ตัวอย่างในรายงาน
สร้าง Text Box เปล่าขึ้นมาบนรายงานแบบ Unbound ในพื้นที่ Details บนรายงาน สมมุติชื่อ Text1 กำหนดคุณสมบัติตามนนี้ครับ
Data > Control Source: =1
Data > Running Sum: Over all หรือ Over Group หากมีการจัดข้อมูลแบบ Group และต้องการนับแบบกลุ่ม
Format > Visible: No
จากนั้นสร้าง Text Box เปล่าขึ้นอีกอันบนรายงานแบบ Unbound ในพื้นที่ Details บนรายงาน ใส่ค่าลงใน Control Source ของ Text Box ดังนี้:
=(([Text1]-1)\10)+1
แล้วลองรันรายงานดู คุณก็จะได้เลยแบ่งกลุ่มตามที่คุณต้องการได้เช่นกัน
ปรับใช้ดูนะครับ ผมไม่รู้ว่าคุณชำนาญการใช้มากแค่ไหน แต่อธิบายได้แค่นี้จริงๆครับ แต่หากคุณเข้าใจคุณจะรู้ว่ามันอยู่แค่การทำ Running Number ให้เป็นและนำเลข Running นั้นมาเข้าสูตรแค่นั้นเองครับ
สร้าง Text Box เปล่าขึ้นมาบนรายงานแบบ Unbound ในพื้นที่ Details บนรายงาน สมมุติชื่อ Text1 กำหนดคุณสมบัติตามนนี้ครับ
Data > Control Source: =1
Data > Running Sum: Over all หรือ Over Group หากมีการจัดข้อมูลแบบ Group และต้องการนับแบบกลุ่ม
Format > Visible: No
จากนั้นสร้าง Text Box เปล่าขึ้นอีกอันบนรายงานแบบ Unbound ในพื้นที่ Details บนรายงาน ใส่ค่าลงใน Control Source ของ Text Box ดังนี้:
=(([Text1]-1)\10)+1
แล้วลองรันรายงานดู คุณก็จะได้เลยแบ่งกลุ่มตามที่คุณต้องการได้เช่นกัน
ปรับใช้ดูนะครับ ผมไม่รู้ว่าคุณชำนาญการใช้มากแค่ไหน แต่อธิบายได้แค่นี้จริงๆครับ แต่หากคุณเข้าใจคุณจะรู้ว่ามันอยู่แค่การทำ Running Number ให้เป็นและนำเลข Running นั้นมาเข้าสูตรแค่นั้นเองครับ
10 @R17197
ก่อนอื่นขอขอบคุณมากครับ ทำให้ได้ความรู้มากขึ้น
คุณ TTT ครับ ถ้าเป็นฟิวด์ เลขที่บัตรประชาชน จะนำมาใช้ Running ได้ไหมครับ ถ้าได้ จะต้องตั้งฟิวด์เป็น Number หรือไม่ ครับ
และในกรณีของ อ.สันติสุข ผมก็ได้ลองทำดู แต่ไม่ได้ ทำแล้วงงครับ (ความรู้ยังน้อยอยู่ครับ ต้องการศึกษาเพิ่ม...) แต่ถ้าทำได้ ไม่ทราบว่าจะมีปัญหาตอนสร้างคิวรี่ที่จะไปใช้กับรายงานหรือไม่ เพื่อให้ออกมาเหมือนกัน จึงอยากจะลองทำในคิวรี่เลยถ้าทำได้ แต่ถ้าไม่ได้ ก็ต้องปรับปรุงเปลี่ยนแปลงไปตามคำแนะนำจาก อ. และท่านผู้รู้ทุกท่านครับ
ขอขอบคุณมากครับ
คุณ TTT ครับ ถ้าเป็นฟิวด์ เลขที่บัตรประชาชน จะนำมาใช้ Running ได้ไหมครับ ถ้าได้ จะต้องตั้งฟิวด์เป็น Number หรือไม่ ครับ
และในกรณีของ อ.สันติสุข ผมก็ได้ลองทำดู แต่ไม่ได้ ทำแล้วงงครับ (ความรู้ยังน้อยอยู่ครับ ต้องการศึกษาเพิ่ม...) แต่ถ้าทำได้ ไม่ทราบว่าจะมีปัญหาตอนสร้างคิวรี่ที่จะไปใช้กับรายงานหรือไม่ เพื่อให้ออกมาเหมือนกัน จึงอยากจะลองทำในคิวรี่เลยถ้าทำได้ แต่ถ้าไม่ได้ ก็ต้องปรับปรุงเปลี่ยนแปลงไปตามคำแนะนำจาก อ. และท่านผู้รู้ทุกท่านครับ
ขอขอบคุณมากครับ
11 @R17199
อื่มคืองี้ครับ ไม่ทราบว่าคุณทำ Running Number ใน Report เป็นหรือเปล่าครับ ถ้าเป็น ก็ไม่ต้องทำอะไรเลยครับ แค่ทำเหมือนตัวอย่างที่อธิบายไว้ก็จบแล้วครับ แต่ถ้าไม่เป็นอีกก็ลองศึกษาจากกระทู้เก่าๆดูครับ ผมคงไม่อธิบายเพิ่มแล้วนะครับ พักนี้ไม่ค่อยมีเวลา ไว้รอท่านอื่นๆแล้วกันครับ
12 @R17201
วิธีที่ผมแนะนำ ไม่ใช่สร้างที่ตัวคิวรี่ แต่ต้องนำคิวรี่ไปสร้างเป็น Contunuous Form หรือ Datasheet Form แล้วไปจัดการที่เท็กซ์บ็อกซ์ในฟอร์มอย่างที่ว่าไปแล้ว แต่จะไม่มีผลอะไรกับการทำรายงาน รายงานก็ส่วนรายงาน แยกกันครับ ถ้าเป็นรายงาน ตามวิธีของคุณ TTT เหมาะสมและง่ายดีแล้ว หรือไม่ก็จากในฟอร์มตามวิธีผมนั่นแหล่ะ อยากจะเรียงตามลำดับอะไรก็กดปุ่มเรียงลำดับบน tools bar หรือ ribbon bar ก็แล้วแต่ แล้วสั่งพรินท์ฟอร์มออกกระดาษไปเลยก็ได้
13 @R17223
ขอขอบคุณ อ.สันติสุข และคุณ TTT ครับ ที่ให้คำแนะนำ และให้ความช่วยเหลือครับ
Time: 0.3242s
ขอเพิ่ม G = กลุ่ม ที่สร้างฟิวด์เพิ่มในคิวรี่ เพื่อโชว์ให้ดูเวลาเรียกใช้งาน
กรุณาท่านผู้รู้ทุกท่านช่วยเหลือด้วยครับ ว่าจะต้องทำอย่างไร หรือเขียนคำสั่งในคิวรี่อย่างไร
ขอบคุณครับ