กระทู้เก่าบอร์ด อ.Yeadram
        
           4,498   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.4204s
    
      
		