กระทู้เก่าบอร์ด อ.Yeadram
4,048 11
URL.หัวข้อ /
URL
การกรองข้อมูลบนฟอร์ม
ผมอยากจะกรองข้อมูลบนฟอร์มพร้อมกัน
คือผมมี comboBox อยู่ 4 ตัวที่ใช้ในการกรองข้อมูล มี Model , Status , Process ,Incharger
อยากให้ comboBox ของModel เป็นตัวหลักในการกรอง แล้วกรองcomboBoxอื่นๆ พร้อมกับcomboBox ของModel ได้
แล้วมีปุ่มสำหรับโชว์ข้อมูลทั้งหมดด้วย
รบกวนผู้รู้ช่วยชี้แนะด้วยน่ะครับ
ขอบคุณมากครับ
คือผมมี 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
2 @R06314
คือผมเป็นมือใหม่เพิ่งหัดเขียนะครับ
รบกวนคุณ yeadram ช่วยอธิบายอีกหน่อย
ว่าจะนำไปใช้งานยังไง
รบกวนด้วยน่ะครับ
ขอบคุณมากครับ
รบกวนคุณ 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
จะต้องแก้ไขยังไงดีครับ
รบกวนผู้รู้ด้วยน่ะครับ
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 อันนี้ผมไม่เข้าใจ ผมไปต่อไม่ถูกเหมือนกันครับ
- ในฟอร์มของคุณ มี combo box 4 ตัวแต่ละตัว ตั้งชื่ออย่างไร
ตามตัวอย่างโค้ดที่ผมให้ไป
คอมโบของฟิลด์ Model ตัวค??มโบมันต้องชื่อว่า cbModel
คอมโบของฟิลด์ Status ตัวคอมโบมันต้องชื่อว่า cbStatus ดูแล้วคุณไม่มีฟิลด์ชื่อนี้นะ ??
คอมโบของฟิลด์ Process ตัวคอมโบมันต้องชื่อว่า cbProcess ฟิลด์ชื่อนี้ของคุณก็ไม่มี ??
คอมโบของฟิลด์ Incharger ตัวคอมโบมันต้องชื่อว่า cbIncharger
- คอมโบทุกตัวจะต้องเก็บค่าเป็น Number เท่านั้น จะเป็น string ไม่ได้
ในคำถามตอนตั้งกระทู้คุณว่ามีฟิลด์ Status ในสายอักขระที่คุณให้มาดู เห็นๆ กันอยู่ว่ามันไม่มีฟิลด์ Status อันนี้ผมไม่เข้าใจ ผมไปต่อไม่ถูกเหมือนกันครับ
5 @R06352
ขอโทษด้วยครับที่ไม่ได้อธิบายแต่ทีแรก
คือผมไม่ได้เปลี่ยนชื่อนะครับ
ฟิลด์ Status คือ sub2
ฟิลด์ Process คือ TypeID
- คอมโบทุกตัวจะต้องเก็บค่าเป็น Number เท่านั้น จะเป็น string ไม่ได้ ???
ช่วยอธิบายอีกหน่อยครับ
คือผมเป็นมือใหม่เพิ่งหัดเขียนะครับ
รบกวนผู้รู้ด้วยน่ะครับ
คือผมไม่ได้เปลี่ยนชื่อนะครับ
ฟิลด์ Status คือ sub2
ฟิลด์ Process คือ TypeID
- คอมโบทุกตัวจะต้องเก็บค่าเป็น Number เท่านั้น จะเป็น string ไม่ได้ ???
ช่วยอธิบายอีกหน่อยครับ
คือผมเป็นมือใหม่เพิ่งหัดเขียนะครับ
รบกวนผู้รู้ด้วยน่ะครับ
6 @R06356
ส่งไฟล์งานของคุณเข้า เมล์กลาง มาเลยครับ อธิบายยาก
ผมว่าผมเคยทำตัวอย่างประเภทนี้ไว้หลายตัวแล้ว แต่ลองค้นก็จำไม่ได้ว่าจะใช้คีย์เวอร์ดอะไรดี เลยคิดว่า เอางานของคุณมาปรับให้เลยดีกว่า
-ลดจำนวนข้อมูลลงให้เหลือรายการซัก 15-20 เรคคอร์ด
-ตารางไหน ฟอร์มใด ที่ไม่เกี่ยวข้องก็เอาออกไปก่อน
-ทำการ compact ฐานข้อมูล แล้ว บีบอัดไฟล์
-ส่งเข้าเมล์ accboard _ gmail.com
-เขียนหัวเรื่องอีเมล์ว่า "การ กรองข้อมูล หลายเงื่อนไข หลายคอมโบ"
-เขียนเนื้อความใน อีเมล์ระบุชื่อฟอร์มหรือชื่อตารางที่เกี่ยวข้อง (เพื่อให้ผู้ตอบจะได้เปิดไฟล์ขึ้นมาแล้วมุ่งประเด็นไปตรงจุดได้เร็ว)
- ในเนื้อความอีเมล์ ให้อ้างลิงค์ มาที่กระทู้นี้ด้วย (เมื่อผู้อื่นเปิดเจออีเมล์จะได้รู้ที่มาที่ไปของไฟล์แนบ)
** เมล์กลางนี้สามารถเปิดอ่านได้ทุกคน (เป็นสาธารณะ) ข้อความใดๆ ทั้งในอีเมล์และหรือในฐานข้อมูลของคุณ หรือข้อมูลในตัวอย่างของคุณจะต้องสามารถเปิดเผยได้ ถ้าเป็นข้อมูลความลับ ข้อมูลที่ไม่เหมาะสมใดๆ ควรจะดัดแปลงปรับแต่งก่อน แล้วค่อยส่งมา
ผมว่าผมเคยทำตัวอย่างประเภทนี้ไว้หลายตัวแล้ว แต่ลองค้นก็จำไม่ได้ว่าจะใช้คีย์เวอร์ดอะไรดี เลยคิดว่า เอางานของคุณมาปรับให้เลยดีกว่า
-ลดจำนวนข้อมูลลงให้เหลือรายการซัก 15-20 เรคคอร์ด
-ตารางไหน ฟอร์มใด ที่ไม่เกี่ยวข้องก็เอาออกไปก่อน
-ทำการ compact ฐานข้อมูล แล้ว บีบอัดไฟล์
-ส่งเข้าเมล์ accboard _ gmail.com
-เขียนหัวเรื่องอีเมล์ว่า "การ กรองข้อมูล หลายเงื่อนไข หลายคอมโบ"
-เขียนเนื้อความใน อีเมล์ระบุชื่อฟอร์มหรือชื่อตารางที่เกี่ยวข้อง (เพื่อให้ผู้ตอบจะได้เปิดไฟล์ขึ้นมาแล้วมุ่งประเด็นไปตรงจุดได้เร็ว)
- ในเนื้อความอีเมล์ ให้อ้างลิงค์ มาที่กระทู้นี้ด้วย (เมื่อผู้อื่นเปิดเจออีเมล์จะได้รู้ที่มาที่ไปของไฟล์แนบ)
** เมล์กลางนี้สามารถเปิดอ่านได้ทุกคน (เป็นสาธารณะ) ข้อความใดๆ ทั้งในอีเมล์และหรือในฐานข้อมูลของคุณ หรือข้อมูลในตัวอย่างของคุณจะต้องสามารถเปิดเผยได้ ถ้าเป็นข้อมูลความลับ ข้อมูลที่ไม่เหมาะสมใดๆ ควรจะดัดแปลงปรับแต่งก่อน แล้วค่อยส่งมา
7 @R07072
ผมส่งตัวอย่างให้แล้วน่ะครับ
รบกวนอาจารย์ด้วยน่ะครับ
รบกวนอาจารย์ด้วยน่ะครับ
8 @R07079
ผมมีโอกาสโหลดไฟล์ของคุณลงมาดูแล้ว
ความเห็นที่ผมเขียนไว้ใน R06343 มันไม่มีความหมายอะไรเลย
เพราะคุณไม่ได้ทำอะไรตามเลย แม้กระทั่งแค่การตั้งชื่อคอมโบ ก็ไม่ได้ตั้งสักชื่อเดียว
ความเห็นที่ผมเขียนไว้ใน R06343 มันไม่มีความหมายอะไรเลย
เพราะคุณไม่ได้ทำอะไรตามเลย แม้กระทั่งแค่การตั้งชื่อคอมโบ ก็ไม่ได้ตั้งสักชื่อเดียว
9 @R07114
ผมต้องขอโทษด้วยจริงๆๆครับ ที่ผมลืมเปลี่ยนชื่อคอมโบ
ตอนนี้ผมได้แก้ไขและส่งตัวอย่างให้ใหม่เรียบร้อยแล้วครับ
รบกวนอาจารย์ yeadram อีกครั้งด้วยน่ะครับ
ตอนนี้ผมได้แก้ไขและส่งตัวอย่างให้ใหม่เรียบร้อยแล้วครับ
รบกวนอาจารย์ yeadram อีกครั้งด้วยน่ะครับ
10 @R07128
เกี่ยวข้องกับกระทู้นี้ด้วยนะครับ http://www.thai-access.com/yeadram_view.php?topic_id=1675
ตัวอย่างปัญหารอบแรก ที่ส่งเข้า gmail มานั้น ผมเอามาตรวจเอามาแก้ไขให้แล้ว
เหตุและผล ของปัญหาที่พบ
- คุณตั้งชื่อออปเจคต่างๆ ด้วยการไม่เคารพกฎการตั้งชื่อ (มีทั้งคำสงวน มีทั้งช่องว่างในคำ)
- งานของคุณมันซับซ้อนพัวพันกันหลายเหตุการณ์ หลายออปเจ็ค เกินกว่าจะอธิบายผ่านบอร์ดหรืออีเมล์ได้
- คุณรู้คุณสมบัติของ Access น้อยเกินไป รู้น้อยว่า Access ทำอะไรได้บ้าง, ทำอะไรไม่ได้บ้าง คือคุณมีความเข้าใจกับมันน้อยเกินกว่าที่จะทำงานที่ซับซ้อนอย่างนี้
ส่วนที่ผมแก้ไขปรับปรุง ผมแค่อยากให้งานมันออกมาตามที่คุณต้องการเท่านั้น เท่าที่ผมจะพยายามแก้ไขปรับปรุงได้ ซึ่ง..
- ผมได้เปลี่ยนโครงสร้างของตาราง และคิวรี่ของคุณไปบ้างเล็กน้อย
- ผมได้เปลี่ยนโครงสร้างของฟอร์มของคุณไปมาก หลายจุด
- ผมได้เปลี่ยนคุณสมบัติต่างๆ ของออบเจคต่างๆ ที่มีอยู่บนฟอร์มของคุณไปหลายๆ จุด
- ผมได้เขียนโค้ดเพิ่มไปหลายจุด และลบโค้ดเก่าของคุณออกเกือบทั้งหมด
- โค้ดของคุณเขียนได้ยากมากๆ สาเหตุหนึ่งเดียวที่สำคัญที่สุดคือ คุณตั้งชื่อไม่ถูกหลัก
ข้อจำกัดบางอย่าง ในไฟล์ที่ผมแก้ไขแล้วส่งกลับ
- คอมโบ ตัวที่ชื่อ cbStatus ไม่สามารถทำงานได้อย่างสมบูรณ์ (เกิดจากชื่อฟิลด์ในตาราง เขียนมีช่องว่าง ทำให้ต้องใส่เครื่องหมาย สี่เหลี่ยมคร่อม จนซ้ำซ้อนกัน SQL ไม่สามารถอ่านค่าได้)
ส่วนคอมโบอื่นๆ น่าจะทำงานได้ตรงตามที่คุณต้องการแล้ว
ฟอร์มที่ผมทำให้ไป ให้ถือว่าเป็นตัวอย่าง เป็นแนวทางเท่านั้น พยายามทำความเข้าใจกับมัน แล้วไปทำงานเก่าของคุณให้เป็นไปในแนวทางนั้น
อย่าได้พยายามเอาฟอร์มที่ผมแก้ไข เข้าไปรันในโปรแกรมเก่าของคุณ เพราะมันมีการเปลี่ยนแปลงอะไรหลายอย่างเกินไป
ผมตอบกลับพร้อมแนบไฟล์ตัวอย่าง ไปที่ Gmail แล้วนะครับ
ตัวอย่างปัญหารอบแรก ที่ส่งเข้า gmail มานั้น ผมเอามาตรวจเอามาแก้ไขให้แล้ว
เหตุและผล ของปัญหาที่พบ
- คุณตั้งชื่อออปเจคต่างๆ ด้วยการไม่เคารพกฎการตั้งชื่อ (มีทั้งคำสงวน มีทั้งช่องว่างในคำ)
- งานของคุณมันซับซ้อนพัวพันกันหลายเหตุการณ์ หลายออปเจ็ค เกินกว่าจะอธิบายผ่านบอร์ดหรืออีเมล์ได้
- คุณรู้คุณสมบัติของ Access น้อยเกินไป รู้น้อยว่า Access ทำอะไรได้บ้าง, ทำอะไรไม่ได้บ้าง คือคุณมีความเข้าใจกับมันน้อยเกินกว่าที่จะทำงานที่ซับซ้อนอย่างนี้
ส่วนที่ผมแก้ไขปรับปรุง ผมแค่อยากให้งานมันออกมาตามที่คุณต้องการเท่านั้น เท่าที่ผมจะพยายามแก้ไขปรับปรุงได้ ซึ่ง..
- ผมได้เปลี่ยนโครงสร้างของตาราง และคิวรี่ของคุณไปบ้างเล็กน้อย
- ผมได้เปลี่ยนโครงสร้างของฟอร์มของคุณไปมาก หลายจุด
- ผมได้เปลี่ยนคุณสมบัติต่างๆ ของออบเจคต่างๆ ที่มีอยู่บนฟอร์มของคุณไปหลายๆ จุด
- ผมได้เขียนโค้ดเพิ่มไปหลายจุด และลบโค้ดเก่าของคุณออกเกือบทั้งหมด
- โค้ดของคุณเขียนได้ยากมากๆ สาเหตุหนึ่งเดียวที่สำคัญที่สุดคือ คุณตั้งชื่อไม่ถูกหลัก
ข้อจำกัดบางอย่าง ในไฟล์ที่ผมแก้ไขแล้วส่งกลับ
- คอมโบ ตัวที่ชื่อ cbStatus ไม่สามารถทำงานได้อย่างสมบูรณ์ (เกิดจากชื่อฟิลด์ในตาราง เขียนมีช่องว่าง ทำให้ต้องใส่เครื่องหมาย สี่เหลี่ยมคร่อม จนซ้ำซ้อนกัน SQL ไม่สามารถอ่านค่าได้)
ส่วนคอมโบอื่นๆ น่าจะทำงานได้ตรงตามที่คุณต้องการแล้ว
ฟอร์มที่ผมทำให้ไป ให้ถือว่าเป็นตัวอย่าง เป็นแนวทางเท่านั้น พยายามทำความเข้าใจกับมัน แล้วไปทำงานเก่าของคุณให้เป็นไปในแนวทางนั้น
อย่าได้พยายามเอาฟอร์มที่ผมแก้ไข เข้าไปรันในโปรแกรมเก่าของคุณ เพราะมันมีการเปลี่ยนแปลงอะไรหลายอย่างเกินไป
ผมตอบกลับพร้อมแนบไฟล์ตัวอย่าง ไปที่ Gmail แล้วนะครับ
11 @R07131
ขอบคุณ yeadram มากน่ะครับ
ที่ช่วยแก้ไขปรับปรุงงานให้และคำแนะนำที่ดีๆ
ผมจะเอามาศึกษาต่อทำความเข้าใจ
ที่ช่วยแก้ไขปรับปรุงงานให้และคำแนะนำที่ดีๆ
ผมจะเอามาศึกษาต่อทำความเข้าใจ
Time: 0.2487s
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