รายงานตามเงื่อนไข
กระทู้เก่าบอร์ด อ.Yeadram

 6,297   32
URL.หัวข้อ / URL
รายงานตามเงื่อนไข



อยากเปิดรายงานตามเงื่อนไข ตามรูปครับ โดยที่
คอมโบ เลือกบริษัท = cbo1
คอมโบ เลือกสาขา   = cbo2
คอมโบ เลือกพนักงาน = cbo3
คอมมานด์ เปิดรายงาน = cmdopen
เทกบอกซ์ วันเริ่มต้น = txtstrat
เทกบอกซ์ วันสิ้นสุด = txtend

รายงานจากคิวรี่เดี่ยวกัน ประกอบด้วย
jobid    date   cus   branch service

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

ต้องเขียนโค้ดอย่างไรครับ หรือว่าต้องใช้ อะไรในการต้องการเงือนไขอย่างนี้ครับ

รบกวนด้วยครับ

ขอบคุณครับ

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

1 @R07454
เอาไปเป็นแนวทาง และประยุกต์ต่อเองครับ นำไปใช้ทันทียังไม่ได้นะครับ
อย่างน้อยต้องสำรวจชื่อออบเจคต่างๆ และดูชนิดข้อมูลของแต่ละข้อมูลก่อนด้วย ว่าเป็น text หรือ number หรือ date/time

Sub cmdOpen_click()
Dim stWhere as string
stWhere = "[service] Like '*'"

if cbo1<>"" then stWhere = stWhere & " AND [jobid] =" & cbo1
if cbo2 <> "" then stWhere = stWhere & " AND [branch] = " & cbo2
if cbo3 <> "" then stWhere = stWhere & " AND [cus] = " & cbo3
if txtstart <> "" then
   if txtend = "" or txtend < txtstart then
      txtend.setfocus
      exit sub
   end if
   stWhere = stWhere & " AND ([date] BETWEEN #" & txtstart & "# and #" & txtend & "#)"
elseif txtend <> "" then
      txtstart.setfocus
      exit sub
end if

DoCmd.OpenReport "report 's name", acViewPreview, , stWhere
end sub
2 @R07456
ลองทำตามแล้วครับ
ได้ผลอย่างนี้ครับ



ช่วยด้วยนะครับ ไม่ทราบจริง ๆ ว่า โค้ดทำงานยังไง มองภาพไม่ออกนะครับ

Private Sub cmdOpenrpt_Click()
Dim stWhere As String
stWhere = "[Ser] Like '*'"

If cbo1 <> "" Then stWhere = stWhere & " AND [JobID] =" & cbo1
If cbo2 <> "" Then stWhere = stWhere & " AND [Branch] = " & cbo2
If cbo3 <> "" Then stWhere = stWhere & " AND [Cus] = " & cbo3
If txtstart <> "" Then
   If txtEnd = "" Or txtEnd < txtstart Then
      txtEnd.SetFocus
      Exit Sub
   End If
   stWhere = stWhere & " AND ([date] BETWEEN #" & txtstart & "# and #" & txtEnd & "#)"
ElseIf txtEnd <> "" Then
      txtstart.SetFocus
      Exit Sub
End If

DoCmd.OpenReport "rptJobNo", acViewPreview, , stWhere

End Sub


ข้อมูลการตั้งค่าตาราง

jobid >> text >> 10                     FK
date >> date/time >>short date
cus >> text >> 100
branch >> text >> 150
service >> text >> 150


แบบสอบถาม qryjobser
มี 4 ตาราง ประกอบด้วย
job               มี Jobid,date
cus               เอา idcus เชื่อม     เป็นชนิด text
branch           เอา idbranch เชื่อม เป็นชนิด number
service           เอา idser เชื่อม   เป็นชนิด text

ได้ข้อมูล
jobid   date   idcus cus idbran   branch idser service

นำคิวรี่นี้มาทำรายงานครับ

ขอบคุณครับ
3 @R07457
ตามหาสาเหตุกันครับ
1 ให้คุณเปิดคิวรี่ qryjobser มาดู (โดยไม่ต้องใส่เงื่อนไขใดๆ ทั้งสิ้น) ดูว่ามันถามหา พารามิเตอร์หรือเปล่า
ถ้าถามหาพารามิเตอร์ แสดงว่าคิวรี่มีปัญหา คุณต้องหาทางเอา พารามิเตอร์ตรงนั้นออกก่อน แล้วลองทำงานผ่านฟอร์มดูอีกครั้ง
ถ้าไม่ถาม แสดงว่า ตัวคิวรี่ไม่มีปัญหา ไปทดสอบข้อ2

2 ให้คุณเปิดรายงาน rptJobNo (ดับเบิ้ลคลิ๊กเปิดขึ้นมาเลย ข้อมูลมามากน้อยก็ช่าง) ดูว่ามันมีการถามหาพารามิเตอร์หรือเปล่า
ถ้ามันถาม แสดงว่าตัวรายงานมีปัญหา ให้คุณหาทางเอาพารามิเตอร์เหล่านั้นออกให้ได้ เช่น - มีการ เขียนนิพจน์ผิดๆ ตาม textbox ต่างๆ หรือเปล่า , - มีการตั้งค่าการเรียงลำดับโดยอ้างชื่อผิดหรือเปล่า , - มีการตั้งกลุ่มแล้วอ้างชื่อผิดหรือเปล่า
ถ้ามันไม่ถาม แสดงว่า ตัวรายงานไม่มีปัญหา ให้ไปทดสอบข้อ3

3 สันนิษฐานว่า คุณต่อสายอักขระตัวเงื่อนไข ผิดรูปแบบ
ให้คุณลอง debug ดูสายอักขระดูก่อน

...
...
End If

เพิ่มบรรทัดนี้
debug.print stWhere
เบรคบรรทัดนี้
' DoCmd.OpenReport "rptJobNo", acViewPreview, , stWhere

End Sub

ลองทำงานผ่านฟอร์ม ใส่ข้อมูลตามต้องการ > > กดปุ่มเรียกรายงาน >> กดปุ่ม ctl+G ดูผลการ debug ดูว่ามันเขียนอะไรออกมาบ้าง ลองคัดลอกมาทั้งหมด มาโพสต์ครับ หรือถ้าดูเป็นก็ลองสังเกตเรื่องของชื่อฟิลด์ ชื่อตาราง   
ถ้าเป็นชื่อฟิลด์ควรถูกคร่อมด้วยเครื่องหมายวงเล็บสี่เหลี่ยม
ถ้าเป็นตัวเลขไม่ควรถูกคร่อมด้วยเครื่องหมายใดๆ เลยและ operator ต้องเป็นเครื่องหมายเท่ากับเท่านั้น
ถ้าเป็น text จะต้องถูกคร่อมด้วยเครื่องหมาย หยดน้ำค้าง และใช้ opertor Like ไม่ใช่เครื่องหมายเท่ากับ
ถ้าเป็น Date/Time ต้องถูกคร่อมด้วยเครื่องหมายชาร์ฟ ใช้ Operator Between...and...

สุดท้ายขอเพิ่มเติมนิดครับ จากรูปที่นำมาให้ดู ZZ0718 คืออะไรครับ
เป็นชื่อฟิลด์ ชื่อตาราง(ที่คุณไม่ได้บอกมาหรือเปล่า)
หรือว่าเป็นข้อมูล ถ้าเป็นข้อมูล เป็นข้อมูลของฟิลด์อะไรครับ
พารามิเตอร์ตัวนี้ มันขึ้นมาตลอดหรือเปล่า หากว่าคุณได้ลองเลือกเงื่อนไขอื่นๆ ดู มันยังขึ้นตัวนี้หรือว่าเป็นตัวอื่น
4 @R07458
ข้อ1 เปิดได้ปกติครับ
ข้อ2 รันรายงานได้ปกติครับ
ส่วน ZZ0718 เป็นรหัสบริษัทครับ
หลังจากเพิ่มโค้ดแล้วทำตาม ข้อ3



ที่ หลัง = DD001   เป็น idcus    รหัสของบริษัท ครับ

cbo1 ผมดึงมาจากตาราง cus
cbo2 ผมดึงมาจากตาราง branch
cbo3 ผมดึงมาจากตาราง service

รบกวนด้วยครับ

ขอบคุณครับ
5 @R07460
จากรูป [JobId] = DD001
ต้องเปลี่ยนเป็น [JobID] Like 'DD001'
DD001 มันเป็น text ไม่ใช่ number ต้องใช้ operator Like ส่วนข้อมูลทีมาเปรียบเทียบต้องคร่อมด้วย หยดน้ำค้าง

เพราะฉะนั้นในโค้ดจากปกติ
If cbo1 <> "" Then stWhere = stWhere & " AND [JobID] =" & cbo1

คุณก็ต้องเปลี่ยนเป็น
If cbo1 <> "" Then stWhere = stWhere & " AND [JobID] Like '" & cbo1 & "'"

ลองทำดูอีกทีครับ (ปล่อยบรรทัดที่เบรคไว้แล้วลองสั่งทำงาน) ถ้ายังไม่ได้ส่งไฟล์เข้า gmail มาครับ เดี๋ยวดูให้
6 @R07461
ผมส่งไฟล์เข้าไปในเมลล์แล้วนะครับ อยู่ในจดหมายร่าง ครับ


รบกวนด้วยครับ
ขอบคุณครับ
7 @R07464
ดูเมล์แล้วครับ
เป็นไฟล์ Access เวอร์ชั่น 2007
รบกวนท่านอื่นๆ ที่มี access เวอร์ชั่นนี้ ช่วยโหลดไฟล์ไปดูให้ด้วยครับ
ผมไม่มี Access เวอร์ชั่นนี้ครับ
8 @R07465
ขออนุญาต นำไฟล์ของคุณ saknoi มาแปลงให้เป็นเวอร์ชั่น 2003 แล้วค่ะ ส่งไปไว้ที่เดิม ในหัวข้อ " แปลงไฟล์ Jobservice เป็น 2003 "
อาจารย์ yeadram ลองนำไปทดสอบดูใหม่นะคะ
9 @R07466
ขอบคุณ คุณมาลีครับ

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

เหมือนคุณไปสั่งให้ "จงหาชนิดสัตว์ที่ชื่อ มังคุด" มันจะมีไหมล่ะ
"จงหารุ่นรถถังที่ชื่อ โบอิ้ง747" มันจะมีไหมล่ะ

คุณนำของผมไปใช้ทันทีเลยแบบนี้If cbo1 <> "" Then stWhere = stWhere & " AND [JobID] Like '" & cbo1 & "'"
If cbo2 <> "" Then stWhere = stWhere & " AND [BraName] Like '" & cbo2 & "'"
If cbo3 <> "" Then stWhere = stWhere & " AND [CusName] Like '" & cbo3 & "'"



แต่ไปดูค่าข้อมูลของคอมโบของคุณ จริงๆ แล้วมันเกี่ยวข้องกับฟิลด์อื่นต่างหาก มันไม่ได้ถูกซักตัวเลย งานของคุณ คอมโบของคุณ โค้ดของคุณมันต้องออกมาเป็นชื่อฟิลด์พวกนี้ ถึงจะถูก (กลับไปดูดีๆ)
If cbo1 <> "" Then stWhere = stWhere & " AND [cusID] Like '" & cbo1 & "'"
If cbo2 <> "" Then stWhere = stWhere & " AND [BraID] Like '" & cbo2 & "'"
If cbo3 <> "" Then stWhere = stWhere & " AND [ServiceID] Like '" & cbo3 & "'"


สิ่งที่คุณเห็นหน้าจอ ที่คอมโบน่ะ มันใช่ มันเป็นชื่อคน แต่คอมโบของคุณคุณที่เป็น 2-3 ฟิลด์ ค่าที่คอมโบมันเก็บได้มาน่ะ มันไม่ใช่ชื่อคน มันเป็นรหัสของคน

ย้ำ มันเก็บ"รหัส" มันไม่ได้เก็บ "ชื่อ" (คุณออกแบบคอมโบมาแบบนี้) เพราะฉะนั้นเวลานำข้อมูลไปเปรียบเทียบ ก็ต้องเอารหัสไปเปรียบไม่ใช่เอาชื่อไปเปรียบครับ

ต้องทำความเข้าใจกับมันดีๆ ครับ
10 @R07472
ขอบคุณอาจารย์ yeadram มากเลยครับ
ที่ช่วยชี้แนะ และแก้ไข ตอนนี้ สามารถนำโค้ดที่อาจารย์ ให้มานำมาใช้ได้แล้วครับ


ขอบคุณมากครับ



ปล. ขอบคุณ คุณมาลี ที่ช่วยแปลงไฟล์ให้ด้วยนะครับ

11 @R07647
แนะนำหน่อยครับ
ไม่ทราบว่า มันมีปัญหาที่ตรงไหนครับ

ตอนนี้ผมคีย์ข้อมูลไปได้ประมาณ 50 เรคคอร์ด แล้วมีปัญหาครับ

เมื่อผมเลือก ช่วงวันที่

txtstart   กับ txtend แล้ว รายงานเปิดหน้าว่าง ๆ ขึ้นมาครับ ลองเปลี่ยนรูปแบบวันที่ค้นหาแล้ว ก็ยังไม่เจอครับ

พอใส่เงื่อนไข เฉพาะวันที่ก็ไม่สามารถหาค่าที่ต้องการได้ ทั้งที่ค่าระหว่างวันที่ ที่คีย์ไปนั้นมีในตารางนะครับ

แต่ถ้าใส่เงือนไขอื่น ๆ ก็เปิดรายงานได้ปกติ ครับ แต่ห้ามใส่ช่วงวันที่เท่านั้นเอง





และอีกไฟล์นะครับ
เมื่อใส่ช่วงวันที รายงานจะแสดงวันที่ ที่คีย์ไปจนถึงวันที่น้อยที่สุดนะครับ
ตัวอย่าง ตารางผมมี ข้อมูล ตั้งแต่ 1/2/2010 -31/7/2010

เมื่อใส่ช่วงเวลา 1/5/2010-31/5/2010 กดเปิดรายงาน

รายงานจะโชว์ข้อมูล ตั้งแต่ 31/5/2010-1/2/2010 เลยครับ



โค้ดที่ใช้ก็ใช้โค้ดตัวเดี่ยวกันครับ ข้อมูลเดี่ยวกัน
เครื่องเดี่ยวกัน และลองกับเครื่องอื่นได้ผลเหมือนกันครับ

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

ขอบคุณครับ
12 @R07655
ไฟลแรกแก้ไขได้แล้วครับ แต่มีปัญหาเหมือนไฟล์ที่ 2 ครับ

เมื่อใส่ช่วงวันที่ เช่น 1/5/2010-31/5/2010 รายงานจะแสดงข้อมูล
ตั้งแต่ 31/5/2010 จนถึงวันที่ 1/2/2010 ครับ

ไม่ทราบว่ามันเป็นเพราะอะไรครับ

ในคิวรี่ ผมลองไปใส่ between แล้วก็สามารถเลือกได้ตาที่ต้องการนะครับ

แต่ใส่ โค้ดแล้วผลไม่ได้ตามต้องการครับ

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


ขอบคุณครับ
13 @R07665
ลองอันนี้ดูครับ
DoCmd.OpenReport "ชื่อReport", acViewPreview, "Date Between Forms!ชื่อฟอร์ม.txtstrat and Forms!ชื่อฟอร์ม.txtend"

จริงๆแล้วไม่น่านำชื่อ Date มาเป็นชื่อ field เลยนะ
ปัญหาอีกอย่างที่เคยพบคือระบบวันที่ ถ้าเป็นระบบวันที่ไทยก็จะมีปัญหาสำหรับ code ตัวนี้ (แต่ไม่มีปัญหาเมื่อใช้กับ query) ซึ่งก็ไม่เข้าใจเหมือนกัน
14 @R07667
ขอบคุณ คุณNova มากครับ
นำไปใช้กับโค้ดเดิมได้ตามต้องการเลยครับ
15 @R07689
สอบถามหน่อย ครับ ตรงตัวแปล stwhere =    นี่เท่ากับอะไร คับ ชื่อฟอร์มหรือว่า ชื่อรายงานครับ
16 @R07696
เป็นตัวแปลที่ประกาศ ที่กระทู้ (R07454) ครับร
17 @R07697
stwhere = "[ชื่อพนักงาน]" like '*'"

ประมาณนีัครับ
18 @R07701
มันคือ อ๊อบเจ็ค อะไร ครับ หรือ ว่ามัน อยู่ใน รายงาน
งานที่ ผมทำเป็นประมาณ นี้ คือ เลือก ช่วงวัน เเละ มีเงื่อนไข สอง สาม อย่าง แต่ พอใส่ค่าไม่ ครบ มันโชว์ รายงาน หน้าขาว คับ ผมใช้ มาโคร ตามโค้ดนี้ครับ
[date start] Between [Forms]![frmreport]![t39] And [Forms]![frmreport]![t41] And [equipment]=[Forms]![frmreport]![cb33] And [EQ no]=[Forms]![frmreport]![cb35] And [station]=[Forms]![frmreport]![cb31]
19 @R07702
Sub cmdOpen_click()
Dim stWhere as string
stWhere = "[station] Like '*'"

if cb33<>"" then stWhere = stWhere & " AND [equipment] =" & cb33
if cb35 <> "" then stWhere = stWhere & " AND [EQ no] = " & cb35
if cb31 <> "" then stWhere = stWhere & " AND [station] = " & cb31
if t39 <> "" then
   if t41 = "" or t41 < t39 then
      t41.setfocus
      exit sub
   end if
stWhere = stWhere & " AND ([DATE] BETWEEN forms!frmreport.t39 and forms!frmreport.t41)"
               
elseif t41 <> "" then
      t39.setfocus
      exit sub
end if

DoCmd.OpenReport "report 's name", acViewPreview, , stWhere
end sub


ลองใส่โค้ดนี้ดูครับ
20 @R07711
ตอนนี้ผมลองนำ โค้ดที่ให้มาไปใส่แล้ว และ แก้ไขชื่อ อ๊อบเจ็ค ตามโค้ดเเล้ว ครับ สามารถ ทำงานได้ในส่วนของ Date และ NO. ครับ ส่วน ถ้าใส่ ค่า ในช่อง Station หรือ Equipment จะขึ้นถามหา พารามิเตอร์ครับ เช่น ใส่คำว่า RPR มันก็จะให้ใส่ค่าพารามิเตอร์ RPR ครับ ผมลองเช็ค ตาม ข้าง ต้น ดูเเล้ว ก็ยัง หาไม่เจอ ครับ ยังไง รบกวนช่วยเเนะนำ ด้วย ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2650s