แบบสอบถามแบบแท็บไขว้ กับ ตัวแปร
กระทู้เก่าบอร์ด อ.Yeadram

 4,256   14
URL.หัวข้อ / URL
แบบสอบถามแบบแท็บไขว้ กับ ตัวแปร

ในแบบ สอบถามแบบ Select เราสามารถอ้างอิงเงื่อนไข
ได้เช่น =[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#
แบบนี้มันทำงานได้ครับ
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 ก่อนหรือไม่ก็ได้ แล้วค่อยคลำหาจุดผิดต่อไป
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;

ขอบคุณครับ
5 @R02604
ขออนุญาตนำไปใช้นะครับ ผมก็ติดปัญหานี้อยู่เหมือนกัน ขอบคุณมากครับ
6 @R02656
หลังจากผ่านขั้นตอนนี้มาแล้ว ผมพบว่า ในการ Open Report ที่ได้จาก
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 ตามไป ใช่ไหมครับ
(ผมคิดว่า ไม่น่าจะมีวิธีอื่น)
ขอบคุณครับ
9 @R02669
SQL Statement ที่ใช้สำหรับสร้าง Crosstab 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?    จะแก้ยังงัยดีครับ
11 @R03855
ได้แล้วครับ

Me("T" & i).ControlSource = Replace(rstJ!RubType, ".", "_")
12 @R03900
ติดอีกแล้วครับ
หลังจาก สร้าง 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, ".", "_") & "])"

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