ปัญหาการคิวรี่
กระทู้เก่าบอร์ด อ.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
เป็นต้น

ผมขอให้ อ. และท่านผู้รู้ ช่วยเหลือด้วยครับ

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

1 @R17173
ถ้าผมอธิบายไม่เข้าใจช่วยบอกด้วยนะครับ จะได้อธิบายใหม่ครับ
ขอเพิ่ม G = กลุ่ม ที่สร้างฟิวด์เพิ่มในคิวรี่ เพื่อโชว์ให้ดูเวลาเรียกใช้งาน

กรุณาท่านผู้รู้ทุกท่านช่วยเหลือด้วยครับ ว่าจะต้องทำอย่างไร หรือเขียนคำสั่งในคิวรี่อย่างไร

ขอบคุณครับ
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;

ประมาณนี้ครับ ลองปรับใช้ดู
5 @R17189
ขอขอบคุณ อ.สันติสุข และคุณ TTT มากครับ เดี๋ยวผมจะลองนำของคุณ TTT ไปปรับลองใช้ดูก่อน เพราะจะตรงกับที่ต้องการ ได้ผลประการใดจะมาบอกอีกครั้งครับ
6 @R17190
ของคุณ TTT ใช้ได้เฉพาะเมื่อเรียงด้วย A จากน้อยไปมากเท่านั้นนะครับ
7 @R17194
ครับ อ.สันติสุข ครับ ผมได้ลองของคุณ 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 นี้เข้าสูตรไปเลยก็ได้ครับ
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 นั้นมาเข้าสูตรแค่นั้นเองครับ
10 @R17197
ก่อนอื่นขอขอบคุณมากครับ ทำให้ได้ความรู้มากขึ้น

คุณ TTT ครับ ถ้าเป็นฟิวด์ เลขที่บัตรประชาชน จะนำมาใช้ Running ได้ไหมครับ ถ้าได้ จะต้องตั้งฟิวด์เป็น Number หรือไม่ ครับ

และในกรณีของ อ.สันติสุข ผมก็ได้ลองทำดู แต่ไม่ได้ ทำแล้วงงครับ (ความรู้ยังน้อยอยู่ครับ ต้องการศึกษาเพิ่ม...) แต่ถ้าทำได้ ไม่ทราบว่าจะมีปัญหาตอนสร้างคิวรี่ที่จะไปใช้กับรายงานหรือไม่ เพื่อให้ออกมาเหมือนกัน จึงอยากจะลองทำในคิวรี่เลยถ้าทำได้ แต่ถ้าไม่ได้ ก็ต้องปรับปรุงเปลี่ยนแปลงไปตามคำแนะนำจาก อ. และท่านผู้รู้ทุกท่านครับ

ขอขอบคุณมากครับ
11 @R17199
อื่มคืองี้ครับ ไม่ทราบว่าคุณทำ Running Number ใน Report เป็นหรือเปล่าครับ ถ้าเป็น ก็ไม่ต้องทำอะไรเลยครับ แค่ทำเหมือนตัวอย่างที่อธิบายไว้ก็จบแล้วครับ แต่ถ้าไม่เป็นอีกก็ลองศึกษาจากกระทู้เก่าๆดูครับ ผมคงไม่อธิบายเพิ่มแล้วนะครับ พักนี้ไม่ค่อยมีเวลา ไว้รอท่านอื่นๆแล้วกันครับ
12 @R17201
วิธีที่ผมแนะนำ ไม่ใช่สร้างที่ตัวคิวรี่ แต่ต้องนำคิวรี่ไปสร้างเป็น Contunuous Form หรือ Datasheet Form แล้วไปจัดการที่เท็กซ์บ็อกซ์ในฟอร์มอย่างที่ว่าไปแล้ว แต่จะไม่มีผลอะไรกับการทำรายงาน รายงานก็ส่วนรายงาน แยกกันครับ ถ้าเป็นรายงาน ตามวิธีของคุณ TTT เหมาะสมและง่ายดีแล้ว หรือไม่ก็จากในฟอร์มตามวิธีผมนั่นแหล่ะ อยากจะเรียงตามลำดับอะไรก็กดปุ่มเรียงลำดับบน tools bar หรือ ribbon bar ก็แล้วแต่ แล้วสั่งพรินท์ฟอร์มออกกระดาษไปเลยก็ได้
13 @R17223
ขอขอบคุณ อ.สันติสุข และคุณ TTT ครับ ที่ให้คำแนะนำ และให้ความช่วยเหลือครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3242s