การกรองข้อมูลบนฟอร์ม
กระทู้เก่าบอร์ด อ.Yeadram

 4,051   11
URL.หัวข้อ / URL
การกรองข้อมูลบนฟอร์ม

ผมอยากจะกรองข้อมูลบนฟอร์มพร้อมกัน
คือผมมี comboBox อยู่ 4 ตัวที่ใช้ในการกรองข้อมูล มี Model , Status , Process ,Incharger
อยากให้ comboBox ของModel เป็นตัวหลักในการกรอง แล้วกรองcomboBoxอื่นๆ พร้อมกับcomboBox ของModel ได้
แล้วมีปุ่มสำหรับโชว์ข้อมูลทั้งหมดด้วย

รบกวนผู้รู้ช่วยชี้แนะด้วยน่ะครับ
ขอบคุณมากครับ

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

1 @R06313
dim st as string
st = "Select........."
if cbModel="" then goto slct

st = st & " Where (Model = " & cbModel & ")"
if cbStatus<>"" then st=st & " AND (status = " & cbStatus & ")"
if cbProcess<>"" then st=st & " AND (Process = " & cbProcess & ")"
if cbIncharger<>"" then st=st & " AND (Incharger = " & cbIncharger & ")"

slct:
me.recordsoure = st
me.requery
2 @R06314
คือผมเป็นมือใหม่เพิ่งหัดเขียนะครับ
รบกวนคุณ yeadram ช่วยอธิบายอีกหน่อย
ว่าจะนำไปใช้งานยังไง


รบกวนด้วยน่ะครับ
ขอบคุณมากครับ
3 @R06341
Private Sub Form_Load()
Dim st As String
st = "SELECT Accident_History.[Register No], Accident_History.Model, Accident_History.TypeID, " & _
"Accident_History.[Dept Issue], Accident_History.Subject, Accident_History.[Occure Process], " & _
"Accident_History.Part, Accident_History.Incharger, Accident_History.StratDate, Accident_History.FinishDate, " & _
"[Incharger Query].Name, Work_Days([StratDate],IIf(Not IsNull([Finishdate]),[FinishDate],Date()-1))+1 AS Expr1, " & _
"[stratdate]+[sub1] AS [Due Date], IIf([TypeID]="UserClaim",1,IIf([TypeID]="Normal",5, " & _
"IIf([TypeID]="B-Test Chamber",5,3))) AS sub1, IIf([Test]>[sub1],"Overdue",IIf([Test]<=[sub1], " & _
""Ondue","Operation")) AS sub2, [FinishDate]-[StratDate]+1 AS Test, IIf([dda]="xx", " & _
"[Today]-[stratdate]+1,[finishdate]-[stratdate]+1) AS Average, Date() AS Today, IIf([finishdate]>0,"d","xx") AS dda " & _
"FROM [Incharger Query] INNER JOIN Accident_History ON [Incharger Query].incharger = Accident_History.Incharger;"

If cbModel = "" Then GoTo slct

st = st & " Where (Model = " & cbModel & ")"
If cbStatus <> "" Then st = st & " AND (status = " & cbStatus & ")"
If cbProcess <> "" Then st = st & " AND (Process = " & cbProcess & ")"
If cbIncharger <> "" Then st = st & " AND (Incharger = " & cbIncharger & ")"

slct:
Me.recordsoure = st
Me.Requery

End Sub

มันขึ้น
Compile error :
syntax error

จะต้องแก้ไขยังไงดีครับ
รบกวนผู้รู้ด้วยน่ะครับ
4 @R06343
- ที่สายอักขระของคุณ ให้ไปดูตอนท้ายสุด เอาเครื่องหมาย เซมิ-โคลอน ( ; ) ออก ครับ
- ในฟอร์มของคุณ มี combo box 4 ตัวแต่ละตัว ตั้งชื่ออย่างไร
ตามตัวอย่างโค้ดที่ผมให้ไป
คอมโบของฟิลด์ Model ตัวค??มโบมันต้องชื่อว่า cbModel
คอมโบของฟิลด์ Status ตัวคอมโบมันต้องชื่อว่า cbStatus ดูแล้วคุณไม่มีฟิลด์ชื่อนี้นะ ??
คอมโบของฟิลด์ Process ตัวคอมโบมันต้องชื่อว่า cbProcess ฟิลด์ชื่อนี้ของคุณก็ไม่มี ??
คอมโบของฟิลด์ Incharger ตัวคอมโบมันต้องชื่อว่า cbIncharger
- คอมโบทุกตัวจะต้องเก็บค่าเป็น Number เท่านั้น จะเป็น string ไม่ได้

ในคำถามตอนตั้งกระทู้คุณว่ามีฟิลด์ Status ในสายอักขระที่คุณให้มาดู เห็นๆ กันอยู่ว่ามันไม่มีฟิลด์ Status อันนี้ผมไม่เข้าใจ ผมไปต่อไม่ถูกเหมือนกันครับ
5 @R06352
ขอโทษด้วยครับที่ไม่ได้อธิบายแต่ทีแรก
คือผมไม่ได้เปลี่ยนชื่อนะครับ
ฟิลด์ Status คือ sub2
ฟิลด์ Process คือ TypeID

- คอมโบทุกตัวจะต้องเก็บค่าเป็น Number เท่านั้น จะเป็น string ไม่ได้ ???
ช่วยอธิบายอีกหน่อยครับ
คือผมเป็นมือใหม่เพิ่งหัดเขียนะครับ

รบกวนผู้รู้ด้วยน่ะครับ
6 @R06356
ส่งไฟล์งานของคุณเข้า เมล์กลาง มาเลยครับ อธิบายยาก
ผมว่าผมเคยทำตัวอย่างประเภทนี้ไว้หลายตัวแล้ว แต่ลองค้นก็จำไม่ได้ว่าจะใช้คีย์เวอร์ดอะไรดี เลยคิดว่า เอางานของคุณมาปรับให้เลยดีกว่า

-ลดจำนวนข้อมูลลงให้เหลือรายการซัก 15-20 เรคคอร์ด
-ตารางไหน ฟอร์มใด ที่ไม่เกี่ยวข้องก็เอาออกไปก่อน
-ทำการ compact ฐานข้อมูล แล้ว บีบอัดไฟล์

-ส่งเข้าเมล์ accboard _ gmail.com
-เขียนหัวเรื่องอีเมล์ว่า "การ กรองข้อมูล หลายเงื่อนไข หลายคอมโบ"
-เขียนเนื้อความใน อีเมล์ระบุชื่อฟอร์มหรือชื่อตารางที่เกี่ยวข้อง (เพื่อให้ผู้ตอบจะได้เปิดไฟล์ขึ้นมาแล้วมุ่งประเด็นไปตรงจุดได้เร็ว)
- ในเนื้อความอีเมล์ ให้อ้างลิงค์ มาที่กระทู้นี้ด้วย (เมื่อผู้อื่นเปิดเจออีเมล์จะได้รู้ที่มาที่ไปของไฟล์แนบ)

** เมล์กลางนี้สามารถเปิดอ่านได้ทุกคน (เป็นสาธารณะ) ข้อความใดๆ ทั้งในอีเมล์และหรือในฐานข้อมูลของคุณ หรือข้อมูลในตัวอย่างของคุณจะต้องสามารถเปิดเผยได้ ถ้าเป็นข้อมูลความลับ ข้อมูลที่ไม่เหมาะสมใดๆ ควรจะดัดแปลงปรับแต่งก่อน แล้วค่อยส่งมา
7 @R07072
ผมส่งตัวอย่างให้แล้วน่ะครับ

รบกวนอาจารย์ด้วยน่ะครับ
8 @R07079
ผมมีโอกาสโหลดไฟล์ของคุณลงมาดูแล้ว
ความเห็นที่ผมเขียนไว้ใน R06343 มันไม่มีความหมายอะไรเลย
เพราะคุณไม่ได้ทำอะไรตามเลย แม้กระทั่งแค่การตั้งชื่อคอมโบ ก็ไม่ได้ตั้งสักชื่อเดียว
9 @R07114
ผมต้องขอโทษด้วยจริงๆๆครับ ที่ผมลืมเปลี่ยนชื่อคอมโบ
ตอนนี้ผมได้แก้ไขและส่งตัวอย่างให้ใหม่เรียบร้อยแล้วครับ
รบกวนอาจารย์ yeadram อีกครั้งด้วยน่ะครับ
10 @R07128
เกี่ยวข้องกับกระทู้นี้ด้วยนะครับ http://www.thai-access.com/yeadram_view.php?topic_id=1675


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

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

ข้อจำกัดบางอย่าง ในไฟล์ที่ผมแก้ไขแล้วส่งกลับ
- คอมโบ ตัวที่ชื่อ cbStatus ไม่สามารถทำงานได้อย่างสมบูรณ์ (เกิดจากชื่อฟิลด์ในตาราง เขียนมีช่องว่าง ทำให้ต้องใส่เครื่องหมาย สี่เหลี่ยมคร่อม จนซ้ำซ้อนกัน SQL ไม่สามารถอ่านค่าได้)

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

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