การค้นหาข้อมูลโดยใช้ Combo Box
กระทู้เก่าบอร์ด อ.Yeadram

 10,872   21
URL.หัวข้อ / URL
การค้นหาข้อมูลโดยใช้ Combo Box

สวัสดีค่ะ....

     หนูมีปัญหาเกี่ยวกับการค้นหาโดยใช้ Combo box ค่ะ...
คือหนูสร้าง Combo Box 2 ตัวขึ้นมาเพื่อใช้ในการค้นหาโดย...
      ตัวที่ 1 จะเป็นประเภทรายการครุภัณฑ์
      ตัวที่ 2 จะเป็นปี
โดยมีเงื่อนไขคือ ต้องเลือก 2 หัวข้อนี้ก่อนเพื่อระบุข้อมูลที่เราต้องการค้นหาลงไปและใน 2 หัวข้อนี้จะมีรายการที่ต้องการให้แสดงข้อมูลทั้งหมดด้วยค่ะ...
เมื่อเลือกข้อมูล 2 หัวข้อนี้แล้วให้ข้อมูลที่ตรงกับ Combo box 2 หัวข้อนี้ ไปแสดงยังฟิลด์ Text box ที่สร้างขึ้นมาค่ะ....

รบกวนด้วยนะค่ะ....
ขอบคุณค่ะ

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

1 @R01861
ค้นหาจากกระทู้เก่าๆ ได้ครับ แล้วลองเอาไปปรับใช้ดูครับ
อาจใช้ คีย์เวิร์ดในการค้น ว่า Combo box ตรงๆ เลยก็ได้ครับ
ตัวอย่างผลการค้นครับ

http://thai-access.com/yeadram_view.php?topic_id=401

http://thai-access.com/yeadram_view.php?topic_id=276

นี่เป็นการค้นจากบอร์ดใหม่อย่างเดียวนะครับ ถ้ายังไม่ชัดเจนจะไปค้นในเว็บบอร์ดของอาจารย์ สุภาพ อีกก็ได้ครับ
ช่องการค้น และลิงค์ไปบอร์ดของ อ.สุภาพ อยู่ที่หน้าแรกของเว็บครับ
2 @R01862
ขอบคุณค่ะ...สำหรับคำแนะนำ...ขอโทษนะค่ะ...ไม่ทราบชื่ออะไรค่ะ...

หนูไม่แน่ใจว่าอ่านว่าอะไรค่ะ....กลัวเรียกชื่อผิดค่ะ...
3 @R01863
จริงๆ เวลาจะเรียกผ่านการเขียนไม่ต้องซีเรียสเรื่องคำอ่านก็ได้นะครับ ชื่อผมน่ะ อิอิ ก็อบเอามาวางเลยก็ได้ครับ

มาจากนามสกุลครับ "เหยียดรัมย์"
4 @R01864
ค่ะ....
5 @R01865
     ขอโทษที่ต้องรบกวนนะค่ะ...หนูยังไม่ค่อยเข้าใจกระบวนการทำงานของ Access สักเท่าไหร่นัก...

     จึงทำให้ไม่ทราบว่าข้อความเหร่านี้ต้องไปวางที่ใดบ้าง...กลัววางที่ผิดค่ะ...

1. ช่วงนี้เอาไว้ใส่ตรงไหนหรือค่ะ หนูไม่เข้าใจค่ะ
table1
st_id
st_name
st_fruit


2. ส่วนนี้หนูเข้าใจค่ะ
comboFruit
- Row source type = "Table/query"
- Row soure = "Select Disctinc st_fruit From table1"
- Column count = 1

3. ส่วนนี้หนูเข้าใจค่ะ
comboStudent
- Rowsouretype = "Table/query"
- Rowsouce = "select * from table1"
- column count = 3
- column width = "0,3,0"

4. ส่วนนี้หนูไม่เข้าใจค่ะว่าต้องวางที่ใดค่ะ แล้ว 2 โค้ดนี้ต้องวางที่เดียวกันหรือป่าวค่ะ...
Code:
Private sub comboFruit_Change()
if comboFruit<>"" then
comboStudent.RowSource = "Select * From table1 where st_Fruit like '" & comboFruit & "'"
comboStudent.Requery
end if
End Sub

Private Sub comboStudent_Change()
if comboStudent<>"" then
docmd.OpenForm "ฟอร์มนักเรียน", acNormal, "[st_ID] = " & comboStuden.column(0)
docmd.close acForm, me.name
end if
End sub
6 @R01866
docmd.close acForm, me.name

แล้วประโยคช่วงนี้คือหมายถึงอะไรค่ะ

me.name หมายถึงอะไร แล้ว me แทนอะไร name แทนอะไรค่ะ

ขอบคุงคับ...

7 @R01867
Private Sub comboHGT_Change()
If comboHGT <> "" Then
comboyear.RowSource = "Select * From HGT_Query where HardGoodType like" '& comboHGT & '""
comboyear.Requery
End If
End Sub

Private Sub comboyear_Change()
If comboyear <> "" Then
DoCmd.OpenQuery "HGT_Query", acNormal, "[yea]=" & comboyear.Column(0)
DoCmd.Close acQuery, HardGoodType.Name
End If
End Sub

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

ขอบคุงคับ...
8 @R01870
ใน
Private Sub comboyear_Change()
If comboyear <> "" Then

End If
End Sub

ระบุว่า ถ้า มีการเลือก ใน comboyear ถึงทำงาน ถ้าไม่มีการเลือกก็ไม่ต้องทำงานใดๆ โค้ด 4 บรรทัดนี้ เป็นปกติครับ

แต่ สองคำสั่ง นี้ซิครับ มันสับสน
- DoCmd.OpenQuery "HGT_Query", acNormal, "[yea]=" & comboyear.Column(0)
ว่าคุณกำลังต้องการจะให้มันทำอะไร นี่เป็นคำสั่งที่ผิดครับ การเปิดคิวรี่ ไม่มีการระบุเงื่อนไขครับ
คุณต้องการเปิดคิวรี่ จริงหรือเปล่า คิวรี่สำเร็จรูปที่ชื่อ HGT_Query เนี่ยเหรอ

ส่วนคำสั่งต่อมา
"DoCmd.Close acQuery"
นี่คือคำสั่งปิดคิวรี่ที่กำลังเปิดอยู่ (มันต้องกำลังเปิดอยู่เท่านั้น มิฉะนั้นมันจะ error เพราะมันไม่มีอะไรให้ปิด)

ถ้าคุณมั่นใจว่ามันกำลังเปิดอยู่ ณ ขณะนั้นๆ คุณก็ใส่ชื่อของคิวรี่ต่อท้ายไปได้เลย
โดย ถ้าเป็นชื่อตรงๆ ให้ใส่ เครื่องหมาย ดับเบิ้ลโควต คร่อมไว้ด้วย เช่น
DoCmd.Close acQuery, "qryHGT_Query"

แต่ถ้าชื่อคิวรี่ของคุณเก็บไว้ในตัวแปรมาก่อนนี้ เช่น
dim strName as string
strName = "qyrHGT_Query"
คุณก็ต่อท้ายประโยคคำสั่งด้วยชื่อของตัวแปรได้เลยโดยไม่ต้อง คร่อมเครื่องหมาย เช่น
DoCmd.Close acQuery, strName

แต่ที่คุณทำมา
DoCmd.Close acQuery,HardGoodType.Name
ผมเดาไม่ออกว่า HardGoodType คือชื่อของอะไร

.Name เป็นคุณสมบัติของ object ของ Access
เช่น form, query, table, Report, ฯลฯ
เราจะใช้มันในกรณีที่อ้าง ออปเจคเหล่านี้ ผ่านตัวแปร เช่น

dim ctl as control
set ctl = ...........
.....[dubug.print].... ctl.name
หรือ dim md as module
set md = ...........
.....[dubug.print].... md.name

กรณีอย่างของคุณ ถ้าจะใช้ HardGoodType.Name แสดงว่า ก่อนหน้านี้ต้องการมีการประกาศตัวแปรตัวนี้เป็น Query มาก่อน
เช่น
Dim HardGoodType as QueryDef    ' ใช้ Library DAO ด้วย
set HardGoodType = .........
แล้วค่อยมาเรียกใช้อย่างนี้ได้

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

อืมม มันก็ยาก หลายเรื่องเหมือนกันนะเนี่ย แต่ทำไงได้ครับ ผมไม่เห็นหน้าจอเหมือนที่คุณเห็น ผมไม่รู้จุดหมาย เหมือนที่คุณรู้ ผมก็พาปรับ พาแต่งไปไม่ถูกเหมือนกันครับ



9 @R01956
ขอบคุณค่ะพี่ งั้นหนูจะขออธิบายเป็นลำดับให้พี่ฟังแล้วกันนะค่ะ

1. ฟอร์มของหนูชื่อ HGT_Form
คือหนูต้องการให้เมื่อเลือก combo box 2 ตัวนี้แล้ว ให้แสดงข้อมูลที่เลือกในส่วนรายละเอียดของฟอร์มค่ะ โดยข้อมูลที่จะมาแสดงนี้มาจาก Qurey "HGT_Qurey" และข้อมูลของ HGT_Qurey มาจากตาราง Detail ค่ะ

ในฟอร์มประกอบด้วย
ส่วนหัวของฟอร์ม
- Combo box ชื่อ comboHGT (ประเภทครุภัณฑ์)
- Combo box ชื่อ comboyear (ปี)
ส่วนรายละเอียด
- yea แทน ประจำปี
- HardGoodType แทน ประเภทครุภัณฑ์
- Division แทน คณะ/หน่วยงาน
- Area แทน พื้นที่
- Description แทน คำอธิบาย
- Amount แทน จำนวน
- Unit แทน หน่วยนับ
- PricePerUnit แทน ราคาต่อหน่วย
- Total แทน รวมเงิน
- Source แทน แหล่งเงินที่ใช้
- Remark แทน หมายเหตุ

พี่ค่ะแล้วในส่วนของ Combobox อ่ะค่ะ...เราต้องเข้าไปแก้ไขตรงไหนค่ะถึงจะให้มีหัวข้อที่ว่าแสดงทั้งหมด....คือหนูต้องการให้มีหัวข้อที่ว่าเมื่อเลือก หัวข้อแสดงทั้งหมดแล้ว ให้แสดงข้อมูลทั้งหมดในฐานข้อมูลอ่ะค่ะ...

2.ตารางมีหลายตารางค่ะ ดังนี้
- ตาราง Area (พื้นที่)
   ประกอบด้วย
   - ID_Area
   - Area
- ตาราง Division (หน่วยงาน)
   ประกอบด้วย
   - ID_Division
   - Division
- ตาราง Unit (หน่วยนับ)
   ประกอบด้วย
   - ID_Unit
   - Unit
- ตาราง Source (แหล่งเงินที่ใช้)
   ประกอบด้วย
   - ID_Source
   - Source
- ตาราง Hard Goods Type (ประเภทครุภัณฑ์)
   ประกอบด้วย
   - ID_HGT
   - HardGoodType
- ตาราง Detail (รายละเอียด)
   ประกอบด้วย
   - ID (รหัสข้อมูล)
   - ID_yea (รหัสปี)
   - ID_HGT (รหัสประเภทครุภัณฑ์)
   - ID_Division (รหัสหน่วยงาน)
   - ID_Area (รหัสพื้นที่)
   - Description (คำอธิบาย)
   - Amount (จำนวน)
   - ID_Unit (หน่วยนับ)
   - PricePerUnit (ราคาต่อหน่วย)
   - Total (รวมเงิน)
   - ID_Source (รหัสแหล่งเงินที่ใช้)
   - Remark (หมายเหตุ)

- ตาราง yea
   ประกอบด้วย
   - ID_yea
   - yea

โดยตารางที่รวมตารางทุกอย่างไว้คือ ตาราง Detail ค่ะ ส่วนตารางอื่นๆ เป็นตารางย่อยค่ะ



รบกวนด้วยนะค่ะ

ขอบคุณค่ะ
10 @R01978
คุณ yeadram ค่ะ กรุณาให้คำแนะนำหนูด้วยนะค่ะ

หนูทำไม่ได้จริงๆ ค่ะ

ขอบคุณค่ะ
11 @R01987
ตาราง htg มันเขียนด้วยการมีช่องว่างอย่างนั้นเลยเหรอครับ
ว้า..

comboHGT
ตั้งค่า rowsourcetype เป็น Table/query
ตั้งค่า rowsoucre เป็น
Select "*" as ID_HGT, "All" as HardGoodType from [Hard Goods Type]
UNION
select * from [Hard Goods Type];


comboYear
ตั้งค่า rowsourcetype เป็น Table/query
ตั้งค่า rowsoucre เป็น
select "*" as ID_yea, "All" as yea From yea
union
select * from yea;


เขียนโค้ด
Private Sub comboHGT_Change()
If comboHGT <> "" Then filterMe
End Sub


Private Sub comboyear_Change()
If comboyear <> "" Then filterMe
End Sub


sub filterMe()
dim wcYear as string
dim wcHTG as string
if comboyear="" or isnull(comboyear) then wcYear="*" else wcYear=comboyear
if combohgt ="" or isnull(combohgt) then wcHGT="*" else wcHgt =combohgt
me.recordsource="select * from HGT_Qurey where yea like '" & wcyear _
& "' and HardGoodType like '" & wcHGT "'"
me.requery
end sub
12 @R01989
ขอบคุณค่ะหนูจะลองทำดูนะค่ะ
13 @R01991
ตอนนี้หนูทำการเปลี่ยนชื่อตาราง Hard Good Type เป็น HGT แล้วนะค่ะ
เพื่อไม่ให้มีช่องว่าง...

ถ้าหนูเปลี่ยนแล้ว โค้ดที่พี่ให้หนูมาต้องเข้าไปแก้ไขตรงไหนหรือป่าวค่ะ
14 @R01996
หนูลองทำแล้วอ่ะค่ะพี่ แต่ว่าเมื่อเลือกครบ 2 combo แล้วไม่เห็นข้อมูลด้านล่าง

มีอะไรเปลี่ยนแปล?เลยอ่ะค่ะ

หนูงง
15 @R02006
- สำเนาดาต้าเบส ไว้ก่อน
- ลบข้อมูลในตาราง details ออก ให้เหลือไว้ประมาณ 10-15 reccord ก็พอ
(ให้มี HGT และวันที่ที่ แตกต่างกันบ้างก็ดี)
- ซิปไฟล์
- ส่งเข้าเมล์ accboard @ gmail.com
- เขียนหัวเรื่องว่า 432-Combofilter-รัตน์-access2007

ผมจะช่วยดูให้ หลัง 6โมงเย็นนะครับ เพราะที่นี่ ไม่ได้ลง office2007
แต่อาจมีท่านอื่นช่วยดูให้ก่อนก็ได้ ขอแค่ส่งมาก่อนครับ ให้ทุกๆ ไฟล์มันรวมไว้ในที่เดียวกัน จะได้ไม่กระจัดกระจายกันครับ
16 @R02011
หนูส่งไปให้พี่ที่เมล์ของพี่แล้วนะค่ะ

ถ้าไม่ได้ก็เข้ามาดูที่เมล์ของหนูก็ได้ค่ะ

draklight09@gmail.com
24122526

.............................................

1.Form HGT_F2
   1.ในส่วนนี้ต้องการให้พิมพ์อะไรก็ได้ลงไป โดยไม่ต้องพิมพ์ให้ตรงกับฐานข้อมูลเปะๆ คือพิมพ์แค่บางคำเท่านั้นอ่ะค่ะ
โดยต้องระบุให้ครงทั้ง 4 เงื่อนไข จากนั้นเมื่อคลิกที่ปุ่มค้นหาแล้วให้แสดงผลตามเงื่อนไขที่เลือกไว้
   2.ต้องการให้สั่งพิมพ์เฉพาะที่แสดงผลเท่านั้นแต่ที่หนูทำได้มันแสดงผลออกมาหมดเลยค่ะ

2.Form HGT_Form
   1.ใน Combo box ทั้ง 2 ตัวตรงการกำหนดค่า properties แท็บ Data ตรงการกำหนดค่าเริ่มต้น หนูพิมพ์ลงไปว่า "โปรดเลือก..."
แต่ทำไมมันขึ้นไม่ทราบอ่ะค่ะ
   2.แล้วทำไมใน list ของ combo box ทั้งสองตัวถึงมีคำว่า All แสดงขึ้นมาค่ะ แล้วตรงส่วนนี้เราสามารถเข้าไปแก้ไขได้ไหมค่ะ
หนูอยากให้เป็นภาษาไทยแทนอ่ะค่ะพี่ คือ เปลี่ยนจาก All เป็น ทั้งหมดอ่ะค่ะ
   3.ต้องการให้สั่งพิมพ์เฉพาะที่แสดงผลเท่านั้นแต่ที่หนูทำได้มันแสดงผลออกมาหมดเลยค่ะ เหมือนกับข้อ 2 ของหัวข้อForm HGT_F2 เลยค่ะ
   4.แล้วจะทำอย่างไรค่ะให้ข้อมูลในช่อง ปี มันเรียงจากน้อยไปหามากอ่ะค่ะ มันแสดงแบบแปลกอ่ะค่ะไม่ได้เรียงแบบนี้ 2549 2550 2551 2552
หนูก็อธิบายให้พี่ฟังไม่ถูกเหมือนกันแต่อยากให้ผลลัพธ์ที่ได้แสดงแบบที่หนูเขียนให้พี่ดูอ่ะค่ะ

รบกวนด้วยนะค่ะพี่
ขอบคุณค่ะ
รัตน์
17 @R02017
1) เพื่อการลำดับข้อมูลที่ถูกต้องและง่าย

ทุกๆ ฟิลด์ในฐานข้อมูลของคุณ ที่ขึนต้นด้วย ID_ ผมเปลี่ยนชนิดข้อมูล จาก text เป็น Long Integer ทั้งหมดเลยนะครับ

2) ฟอร์ม HGT_Form ผมไม่สามารถรันได้ ผมลบทิ้งเลยนะครับ
ทั้งระบบการสืบค้นแบบใช้ คอมโบ และระบบสืบค้นแบบคีย์เวอร์ด ผมทำไว้ให้ดูในฟอร์มเดียวกันไปเลย ลองแกะตามศึกษาเอาครับ

3) แมคโครสองตัว ที่ทำไว้ ไม่จำเป็นต้องใช้ผมลบทิ้งแล้วนะครับ

4) คิวรี่ของคุณมี พารามิเตอร์อยู่ด้วย 1 ตัว ผมลบมันออกแล้ว

5) รายงานของคุณมีโค้ดเพิ่มมาด้วย 1 โพรซีเยอร์

6) หากต้องการแก้ไขคำใน คอมโบ ให้เข้าไปดูใน Rowsource ของมันครับ (คลิ๊กปุ่ม ... ข้างหลังนั่นก็ได้ properties sheets ของมัน)

7) ผมอัพไฟล์ที่เสร็จแล้วส่งไปที่เมล์ กลางอีกครั้ง เพื่อให้ผู้อื่นได้ศึกษาต่อไป

8) ถ้าไม่จำเป็น ผมไม่ขอยุ่งกับ access2007 อีกละกัน แสบตาเหลือเกิน อิอิ
18 @R02019
ท่าน yeadram เหมือนผมเลย ไม่ชอบ interface ของ access2007(office 2007) เลย เลย
19 @R02028
ขอโทษนะค่ะที่ทำให้พี่ต้องลำบาก

และขอบคุณสำหรับการช่วยเหลือค่ะ

พี่ค่ะหนู save โปรแกรมที่พี่แก้ไขให้หนูไปลงเครื่องแล้วนะค่ะ

แต่ทำไมไม่ทราบค่ะ เปิดได้แต่พอคลิกปุ่มคำสั่ง หรือเลือก

combo box แล้วก็ไม่มีอะไรเกิดขึ้นเลยค่ะ print ก็ไม่ทำงาน

สรุปทำงานไม่ได้เลยค่ะ โชว์เฉยๆ อ่ะค่ะ

แล้วทำไมหน้าตาโปร?กรมทางด้านที่แสดงพวกตารางมันแปลกๆ

ไปหล่ะค่ะพี่ ธรรมดาของหนูมันโชว์ยาวเลย

แต่ของพี่มันถูกจัดเป็นหมวดหมู่ดูไม่ค่อยเท่าไหร่

แถมขนาดไฟล์ก็เล็กลงด้วย
20 @R02030
กรรม นี่ ms access 2007 มันเก็บการตั้งค่าการใช้งานฝังเข้าไฟล์ไปด้วยเหรอเนี่ย เพิ่งรู้นะเนี่ย

เครื่องของคุณรัตน์ หรือว่า Access ของคุณรัตน์ ตั้งค่า security อะไรเป็นพิเศษหรือเปล่า ประมาณว่า ถ้าเป็นไฟล์ที่มาจากที่อื่น จะไม่ยอม รันโค้ดให้

อืมม ไม่แน่ใจครับ ก็เดาส่ง บอกตรงๆ ไม่สันทัดเอาซะเลย Access2007 เนี่ย

ลองดูการตั้งค่าครับ ว่ามันยอมให้ VBA ทำงานหรือเปล่า

หรือเพื่อนๆ พี่ๆ น้องๆ ท่านใด มี Access2007 ลองโหลดไปทดสอบให้หน่อยนะครับ http://mail.google.com/mail/?ui=1&view=att&th=120cdc94e72d39ff&attid=0.1&disp=safe&realattid=f_fttzxntl0&zw

user : accboard
Pass : accgmail
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2601s