กระทู้เก่าบอร์ด อ.Yeadram
4,256 14
URL.หัวข้อ /
URL
แบบสอบถามแบบแท็บไขว้ กับ ตัวแปร
ในแบบ สอบถามแบบ Select เราสามารถอ้างอิงเงื่อนไข
ได้เช่น =[forms]![Y].[d1]
แต่ในแบบไขว้ ผมอ้างแบบเดียวกันมันกับบอกว่า unrecognize
เมื่อลองแบบไม่ใช้ตัวแปร เช่น between #01/05/2552# and #01/09/2552#
มันก็ OK ไม่มี error ใดๆ มันเป็นเพราะอะไรครับ หรือเป็นข้อจำกัดของ
QUERY แบบนี้ ขอบคุณครับ
ได้เช่น =[forms]![Y].[d1]
แต่ในแบบไขว้ ผมอ้างแบบเดียวกันมันกับบอกว่า unrecognize
เมื่อลองแบบไม่ใช้ตัวแปร เช่น between #01/05/2552# and #01/09/2552#
มันก็ OK ไม่มี error ใดๆ มันเป็นเพราะอะไรครับ หรือเป็นข้อจำกัดของ
QUERY แบบนี้ ขอบคุณครับ
14 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R02571
เอาประโยค SQL เต็มๆทั้งประโยคมาโพสให้ดูหน่อยครับ
2 @R02573
สิ่งที่ผมลองผิดลองถูก และทำไปแล้วมีดังนี้ครับอาจารย์
SELECT YallowPage.ID, YallowPage.DateM, YallowPage.Jay
FROM YallowPage
WHERE (((YallowPage.DateM) Between [forms]![y].[d1] And [forms]![y].[d2]));
ใช้ Select QUERY เลื่อกข้อมูลโดยแปรผันตามตัวแปรใน FORM Y
ใช้ QUERY ที่ได้ สร้าง CROSSTAB QUERY ดังนี้
TRANSFORM First(T.Jay) AS FirstOfJay
SELECT T.ID
FROM T
GROUP BY T.ID
PIVOT Format([DateM],"Short Date");
เปิดดูไม่ได้ UNRECOGNIZE ครับ
หรือจะสร้างตรงๆ โดยไม่มี QUERY ที่1 สร้างเสร็จแล้ว
กำหนดเงื่อนไขทีหลัง ผลก็เหมือนกันครับ
แต่ถ้าไม่รับตัวแปรจาก FORM ใส่ค่าลงไปเลยเช่น #01/05/2552#
แบบนี้มันทำงานได้ครับ
SELECT YallowPage.ID, YallowPage.DateM, YallowPage.Jay
FROM YallowPage
WHERE (((YallowPage.DateM) Between [forms]![y].[d1] And [forms]![y].[d2]));
ใช้ Select QUERY เลื่อกข้อมูลโดยแปรผันตามตัวแปรใน FORM Y
ใช้ QUERY ที่ได้ สร้าง CROSSTAB QUERY ดังนี้
TRANSFORM First(T.Jay) AS FirstOfJay
SELECT T.ID
FROM T
GROUP BY T.ID
PIVOT Format([DateM],"Short Date");
เปิดดูไม่ได้ UNRECOGNIZE ครับ
หรือจะสร้างตรงๆ โดยไม่มี QUERY ที่1 สร้างเสร็จแล้ว
กำหนดเงื่อนไขทีหลัง ผลก็เหมือนกันครับ
แต่ถ้าไม่รับตัวแปรจาก FORM ใส่ค่าลงไปเลยเช่น #01/05/2552#
แบบนี้มันทำงานได้ครับ
3 @R02574
ทำใน VBA หรือสร้างเป็น Access Query ใน Database Window
ถ้าเป็นกรณีแรก แน่นอนครับว่า ผิดแน่นอน สิ่งที่ถูกต้องคือ ประโยคนี้ต้องถูกตีค่าของ d1 และ d2 ออกมาสร้างเป็น SQL นั่นคือ
"SELECT YallowPage.ID, YallowPage.DateM, YallowPage.Jay FROM YallowPage WHERE YallowPage.DateM Between #" & format$([forms]![y].[d1], "dd-mmm-yyyy") & "# And #" & format$([forms]![y].[d2],"dd-mmm-yyyy") & "#"
ถ้าเป็นกรณีหลัง คือ SQL แรกสร้างเป็น Access Query ชื่อว่า T (เข้าใจว่าเช่นนั้น) แล้ว SQL ตัวที่สองสร้างเป็น Access Query อีกตัว มันก็น่าจะทำได้นะครับ ยังมองไม่เห็นจุดที่ผิด ... อาจลองรันดูว่า Query T นั้น ทำงานแล้วเกิด error ก่อนหรือไม่ก็ได้ แล้วค่อยคลำหาจุดผิดต่อไป
ถ้าเป็นกรณีแรก แน่นอนครับว่า ผิดแน่นอน สิ่งที่ถูกต้องคือ ประโยคนี้ต้องถูกตีค่าของ d1 และ d2 ออกมาสร้างเป็น SQL นั่นคือ
"SELECT YallowPage.ID, YallowPage.DateM, YallowPage.Jay FROM YallowPage WHERE YallowPage.DateM Between #" & format$([forms]![y].[d1], "dd-mmm-yyyy") & "# And #" & format$([forms]![y].[d2],"dd-mmm-yyyy") & "#"
ถ้าเป็นกรณีหลัง คือ SQL แรกสร้างเป็น Access Query ชื่อว่า T (เข้าใจว่าเช่นนั้น) แล้ว SQL ตัวที่สองสร้างเป็น Access Query อีกตัว มันก็น่าจะทำได้นะครับ ยังมองไม่เห็นจุดที่ผิด ... อาจลองรันดูว่า Query T นั้น ทำงานแล้วเกิด error ก่อนหรือไม่ก็ได้ แล้วค่อยคลำหาจุดผิดต่อไป
4 @R02581
ได้แล้วครับอาจารย์ ไปอ่าน HELP เขาให้ระบุ parameter ด้วยครับ เช่น
PARAMETERS [Forms].[y].[d1] DateTime, [Forms].[y].[d2] DateTime;
TRANSFORM First(YallowPage.Jay) AS FirstOfJay
SELECT YallowPage.ID
FROM YallowPage
WHERE (((YallowPage.DateM) Between [Forms]![y].[d1] And [forms]![y].[d2]))
GROUP BY YallowPage.ID
PIVOT YallowPage.DateM;
ขอบคุณครับ
PARAMETERS [Forms].[y].[d1] DateTime, [Forms].[y].[d2] DateTime;
TRANSFORM First(YallowPage.Jay) AS FirstOfJay
SELECT YallowPage.ID
FROM YallowPage
WHERE (((YallowPage.DateM) Between [Forms]![y].[d1] And [forms]![y].[d2]))
GROUP BY YallowPage.ID
PIVOT YallowPage.DateM;
ขอบคุณครับ
5 @R02604
ขออนุญาตนำไปใช้นะครับ ผมก็ติดปัญหานี้อยู่เหมือนกัน ขอบคุณมากครับ
6 @R02656
หลังจากผ่านขั้นตอนนี้มาแล้ว ผมพบว่า ในการ Open Report ที่ได้จาก
Crosstab แต่ละครัง จะได้จำนวน Field ในแต่ล่ะ collum heading ไม่เท่ากัน
ขึ้นอยู่กับว่ามันมี ข้อมูลหรือไม่(วันที่ ที่ระบุ ได้ข้อมูลมาหรือไม่)
ถ้าได้ครบ Report ที่วางไว้ก็ออกได้ แต่ถ้าไม่ครบ มันจะ UNRECONIZE
ผมจะทำอย่างไรกับ Collum heading ที่ไม่มีข้อมูลครับ
หมายเหตุ ได้ค้นแฟ้มเก่าของ อ.สุภาพทราบว่า อ.BATMAN เคยทำตัว
อย่างไว้ให้ ถ้าใครมีผมรบกวนด้วยครับ
Crosstab แต่ละครัง จะได้จำนวน Field ในแต่ล่ะ collum heading ไม่เท่ากัน
ขึ้นอยู่กับว่ามันมี ข้อมูลหรือไม่(วันที่ ที่ระบุ ได้ข้อมูลมาหรือไม่)
ถ้าได้ครบ Report ที่วางไว้ก็ออกได้ แต่ถ้าไม่ครบ มันจะ UNRECONIZE
ผมจะทำอย่างไรกับ Collum heading ที่ไม่มีข้อมูลครับ
หมายเหตุ ได้ค้นแฟ้มเก่าของ อ.สุภาพทราบว่า อ.BATMAN เคยทำตัว
อย่างไว้ให้ ถ้าใครมีผมรบกวนด้วยครับ
7 @R02662
ใน Query Design View ให้แสดง Property Sheet แล้วไปใส่ข้อความของ Coulmn Heading ที่เป็นไปได้ทั้งหมดในช่อง Column Heading โดยไม่จำเป็นต้องเรียงจากมากไปน้อยหรืออย่างไรทั้งสิ้น แต่ให้เรียงตามลำดับที่เราต้องการ เช่น "Paracetamol","Bactrim","Abiomox","Piroxicam" เป็นต้น แม้ผลของคิวรี่จะไม่มีค่าสำหรับคอลัมน์ Bactrim ก็ตาม แต่ก็จะมีคอลัมน์ Bactrim แสดงออกมาด้วย
8 @R02667
ได้แล้วครับ สังสัยเพิ่มเติมครับว่า กรณีที่ Column Head มีค่าไม่คงที่
User อาจ KEY เพิ่มอีก(มีรายการใหม่เข้ามา เช่น รายการจ่าย มี 5 หมวด
แต่ในอนาคต USER เพิ่ม หมวดที่ 6)
แต่ REPORT เราวางไว้แล้ว
อย่างนี้ก็ ต้อง แก้ REPORT และ QUERY ตามไป ใช่ไหมครับ
(ผมคิดว่า ไม่น่าจะมีวิธีอื่น)
ขอบคุณครับ
User อาจ KEY เพิ่มอีก(มีรายการใหม่เข้ามา เช่น รายการจ่าย มี 5 หมวด
แต่ในอนาคต USER เพิ่ม หมวดที่ 6)
แต่ REPORT เราวางไว้แล้ว
อย่างนี้ก็ ต้อง แก้ REPORT และ QUERY ตามไป ใช่ไหมครับ
(ผมคิดว่า ไม่น่าจะมีวิธีอื่น)
ขอบคุณครับ
9 @R02669
SQL Statement ที่ใช้สำหรับสร้าง Crosstab Query ก็อยู่ในรูปแบบ
TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN (value1[, value2[, ...]])]
value1, value2, ... ก็คือ column heading ที่เราต้องการ ดังนั้นเราก็สร้าง SQL Statement นี้ขึ้นมาแล้วกำหนดให้เป็น RecordSource ของตัวรายงานในขณะ runtime ก็ได้ครับ ไม่ต้องไปใช้ Access Query
TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN (value1[, value2[, ...]])]
value1, value2, ... ก็คือ column heading ที่เราต้องการ ดังนั้นเราก็สร้าง SQL Statement นี้ขึ้นมาแล้วกำหนดให้เป็น RecordSource ของตัวรายงานในขณะ runtime ก็ได้ครับ ไม่ต้องไปใช้ Access Query
10 @R03852
ได้วาง Comlume heading โดย นำมาใส่ ใน TEXTBOX ที่ UNBOUND
ใน REPORT โดยใช้ CODE ดังนี้ครับ (เพื่อให้รายงายยืดหยุ่น)
Private Sub Report_Open(Cancel As Integer)
Dim rstJ As DAO.Recordset
Dim SqmJ As String
SqmJ = " select rubtype from rubtype where RorJ = '2' "
Set rstJ = CurrentDb.OpenRecordset(SqmJ)
rstJ.MoveFirst
Dim i
i = 1
Do Until rstJ.EOF
Me("T" & i).ControlSource = rstJ!RubType
i = i + 1
rstJ.MoveNext
Loop
rstJ.Close
Set rstJ = Nothing
End Sub
TEXTBOX ผมสร้างไว้ เช่น T1 T2 T3 ...................
ทุกอย่างเป็นอย่างที่ ต้องการ ยกเว้น Field ข้อมูล ที่ USER KEY
ต่อด้วยจุด เช่น
ค่าตอบแทน 500. 'มีจุดต่อท้าย
ค่าตอบแทน 1000
ตรง ค่าตอบแทน 500. มันจะ Error ครับ
Name? จะแก้ยังงัยดีครับ
ใน REPORT โดยใช้ CODE ดังนี้ครับ (เพื่อให้รายงายยืดหยุ่น)
Private Sub Report_Open(Cancel As Integer)
Dim rstJ As DAO.Recordset
Dim SqmJ As String
SqmJ = " select rubtype from rubtype where RorJ = '2' "
Set rstJ = CurrentDb.OpenRecordset(SqmJ)
rstJ.MoveFirst
Dim i
i = 1
Do Until rstJ.EOF
Me("T" & i).ControlSource = rstJ!RubType
i = i + 1
rstJ.MoveNext
Loop
rstJ.Close
Set rstJ = Nothing
End Sub
TEXTBOX ผมสร้างไว้ เช่น T1 T2 T3 ...................
ทุกอย่างเป็นอย่างที่ ต้องการ ยกเว้น Field ข้อมูล ที่ USER KEY
ต่อด้วยจุด เช่น
ค่าตอบแทน 500. 'มีจุดต่อท้าย
ค่าตอบแทน 1000
ตรง ค่าตอบแทน 500. มันจะ Error ครับ
Name? จะแก้ยังงัยดีครับ
11 @R03855
ได้แล้วครับ
Me("T" & i).ControlSource = Replace(rstJ!RubType, ".", "_")
Me("T" & i).ControlSource = Replace(rstJ!RubType, ".", "_")
12 @R03900
ติดอีกแล้วครับ
หลังจาก สร้าง T1 T2...........
หาค่า controlSouce มาได้ ตอนนี้ Sum Report ท้ายรายงาน ไม่สามารถ
ทำได้เช่น =Sum([t1]) มึนมากเลยครับ
หลังจาก สร้าง T1 T2...........
หาค่า controlSouce มาได้ ตอนนี้ Sum Report ท้ายรายงาน ไม่สามารถ
ทำได้เช่น =Sum([t1]) มึนมากเลยครับ
13 @R03901
ถ้าทำใน Report Footer จะทำได้ แต่ถ้าทำใน Page Footer จะทำไ่ม่ได้ ถ้าจะทำ ต้องใช้เทคนิคจาก http://office.microsoft.com/en-gb/access/HA011224441033.aspx
14 @R03903
ได้แล้วครับอาจารย์
ก็คิดว่าจะเอาไว้ที่ Report Footer นี่แหละครับ แต่ลืมคิดถึงเครื่องหมาย
"=" ก็เลยหลงทางมาไกล
Me("S" & i).ControlSource = "=" & "sum([" & Replace(rstJ!RubType, ".", "_") & "])"
ส่วนที่อาจารย์แนะนำก็จะได้เข้าไปค้นหาความรู้ต่อไป
ขอบคุณครับ
ก็คิดว่าจะเอาไว้ที่ Report Footer นี่แหละครับ แต่ลืมคิดถึงเครื่องหมาย
"=" ก็เลยหลงทางมาไกล
Me("S" & i).ControlSource = "=" & "sum([" & Replace(rstJ!RubType, ".", "_") & "])"
ส่วนที่อาจารย์แนะนำก็จะได้เข้าไปค้นหาความรู้ต่อไป
ขอบคุณครับ
Time: 0.3338s