แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - preechaaesanan

หน้า: [1] 2
1
จำเป็นต้องสร้างรายงานที่มี column มากๆ เป็นหลักร้อย มีแนวทางการสร้างมั้ยครับ

2
ห้อง MS Access / Crosstab Query To Report
« เมื่อ: 30 ก.ค. 61 , 18:29:33 »
ได้มีโอกาสทดสอบใช้งาน  Crosstab Query To Report


ของท่านสมาชิก TTT 

ทดสอบทำตามตัวอย่าง จาก Clip  select  1 Row, 1 Column,1Sum



แต่ หาก เมื่อ Select Row มากกว่า 1  Row



ปรากฏว่า  Error  type mismatch



มีแนวทาง ปรับปรุงยังไง ครับ

3
รบกวนขอคำชี้แนะ และขออภัย หากมีคำถามแบบนี้แล้วครับผม

มีความจำเป็นต้องใช้การ Query โดยมีเงื่อนไข หลัง WHERE  ที่ต้องใช้ criteria  เป็นการรับค่าจาก หลายๆฟอร์ม  จึงจำเป็นต้องส่งค่ามาเก็บไว้ใน
ตัวแปร ถึงจะสามารถใช้ Query ตัวเดียวกัน เพื่อให้ได้คำตอบ  (หรือเปล่านะ) ไม่งั้น ต้องใช้ Query หลายตัวเพื่อ ให้ได้คำตอบ
เท่าที่รู้คือ ต้องใช้ criteria หลัง Where ที่เป็น ค่าที่ได้มาจาก Function  จึงได้สร้าง Function แบบง่ายๆเพื่อ รับและส่งค่าตัวแปร จาก หลายๆฟอร์ม
มายัง Query ตัวดังกล่าว  ผ่านทาง Function ซึ่ง หากเป็น เงื่อนไขที่ เป็น = จะได้คำตอบปกติ   แต่เมื่อไหร่ ที่ใช้  เป็น Like จะออกค่าว่าง
โดยถ้าทดสอบระบุค่า ตรงๆ หลังเงื่อนไข WHERE จะได้ปกติ
โดยมี่ ตัวอย่าง ดังนี้

######################### Where  invoice_id=ฟังก์ชั่น  แล้ว ใช้งานได้ #######################
กำหนด ตัวแปร
Public strInvid As String

สร้างปุ่มเพื่อรับและส่งค่าเข้าไปเก็บไว้ในตัวแปรก่อน
Private Sub Command0_Click()
 
'รับค่าจาก ฟิลด์ ที่ต้องการ
   strInvid = [invoice_id]
  ' ไหนดูผลหน่อยย 
  MsgBox "" & strInvid, vbOKOnly, "your invoice_id"
End Sub

ส่งค่าไปฝากไว้ใน Function เพื่อ ไปใช้หลัง WHERE
Public Function get_invoice_id() As String
 get_invoice_id = strInvid
End Function

ตัวอย่าง Query ที่ผลลัพธ์ออกปกติ
SELECT invoice_main.invoice_id
FROM invoice_main
WHERE (((invoice_main.invoice_id)=Get_invoice_id()));

#########################  Where  invoice_id  like ฟังก์ชั่น  แล้ว ใช้งานไม่ได้  #####################

กำหนด ตัวแปร
Public strsearch_Invid As String

สร้างปุ่มเพื่อรับและส่งค่าเข้าไปเก็บไว้ในตัวแปรก่อน
Private Sub Command50_Click()
strsearch_Invid = "'NC*'"
MsgBox "" & strsearch_Invid, vbOKOnly, "criteria "

End Sub

ส่งค่าไปฝากไว้ใน Function เพื่อ ไปใช้หลัง WHERE
Public Function drplist_search() As String
 drplist_search = strsearch_Invid
End Function

ตัวอย่าง Query ที่ผลลัพธ์ไม่แสดงค่าใด
SELECT invoice_main.invoice_id
FROM invoice_main
WHERE (((invoice_main.invoice_id) Like drplist_search()));

4
https://www.thai-access.com/index.php?topic=298.msg1122#msg1122

คุณปิ่นณรงค์เคยจัดไปรอบนึง แล้วครับ ลองนำไปปรับดู

5
ได้แล้ว ครับ  เครดิต
https://www.fmsinc.com/microsoftaccess/query/crosstab-report/index.html

ก็เลยได้  code มาแบบนี้

TRANSFORM Sum(sales_order.quantity) AS S
SELECT sales_order.product_id,sum(S) AS ผลรวม
FROM sales_order
where  sales_order.Date between #2018/04/01# and #2018/04/30#
GROUP BY sales_order.product_id
PIVOT Format((sales_order.Date),"dd");



6
รบกวนขอคำชี้แนะ ด้วยนะครับ ต้องการกลับ แถวเป็นคอลัมน์ ของ ผลลัพธ์จาก pivot


ต้องขออภัยหากคำถามนี้ซ้ำ หาไม่เจอจริงๆ ครับ



โดยมี  code ตาม นี้ นะ ครับ

TRANSFORM Sum(sales_order.quantity) AS SumOfquantity
SELECT Format([sales_order.Date],"dd") AS วันที่, Sum(sales_order.quantity) AS [ผลรวมของ quantity]
FROM sales_order
WHERE (((sales_order.product_id) In ('800','801S','801','802','803','804','804L','901','901S','902','205B')) And ((Format([Date],"dd/mm/yyyy")) Between Forms!SalesReports!startDate And Forms!SalesReports!enddate))
GROUP BY Format([sales_order.Date],"dd")
PIVOT sales_order.product_id In ('800','801S','801','802','803','804','804L','901','901S','902','205B');

8
ถามเพิ่ม เติม นิดนึงนะครับ   ถ้า เรา จะ ให้มี ตัวอักขระ นำหน้า  เช่น  NC-61070201    หรือ  ตามหลัง เช่น  61070201NC
ต้องตั้งค่าอย่างไรครับ

9
ขอบคูณมากก ๆ ครับ @pizza_p คิดว่า คงพอเป็นแนวทาง ให้ท่านที่สนใจ ไปประยุกต์ใช้กันต่อนะครับ

10
พอดีเจอ Code มาจากกระทู้นึง ของสมาชิกชื่อ Suchat/ชลบุรี

เลยเอามาปรับเพื่อให้เข้ากับที่ต้องการใช้งานนิดหน่อย แต่ เจอปัญหาว่า มัน เพิ่มไปเรื่อยๆ เกินที่ ต้องการ 
ที่ต้องการคือ ต้องการ Run ID แค่  yymmddxx  โดย  xx จะเริ่ม ตั้ง 00 จนถึง 99 พอ ครบแล่วเริ่ม นับ จาก 00 ---> 99 ใหม่
แต่จาก code ตัวด้านล่าง  มันจะนับพวกเพิ่มไปเรื่อยๆ เลย



Private Sub ID_DblClick(Cancel As Integer)
Dim strDate As String
Dim intNum As Integer, intMax As Integer
Dim strSuffix As String

strDate = Format(date, "yymmdd")

If Me.ID = "" Or IsNull(Me.ID) Then
        If IsNull(DMax("Val(Mid([ID],7))", "table1", "Left([ID],6) = '" & strDate & " '")) Then
            Me.ID = strDate & "00"
            'Debug.Print "1"
        Else
            intMax = DMax("Val(Mid([ID],7))", "table1", "Left([ID],6) = '" & strDate & " '")
            intMax = intMax + 1
            Me.ID = strDate & Format(intMax, "00")
            'Debug.Print "1"
        End If

End If

End Sub

11
หลังจาก ลองไปใช้งาน ฐานข้อมูล เป็น MYsql  Backend หรือ  SQL Server
ปรากฏว่า insert หรือ Update ข้อมูล ไม่ได้  มี error ตาม  ภาพที่แนบ


12
ขอบคุณครับ

13
ต้องทำอะไร เพิ่ม ผลถึง จะรวมข้อมุล ในวันที่มีมากกว่า 1 ครั้ง เหลือ แค่ วัน เดียว เช่น  วันที่  1,2,3,4,5,6 ... 31
หากถามซ้ำ หรือ ข้อมูลไม่เพียงพอ ขออภัย นะครับ  ผมแนบ file Query ไปด้วย นะครับ

14
ได้แล้ว ครับ ขอบคุณ มาก ครับ

15
หากใช้งานกับ ตั้งหน้ากระดาษแนวตั้ง ใช้งานได้ปกติ ไม่มี error เตือนอันใด
แต่พอใช้แนวนอน ขึ้นเตือนตลอด รบกวนชี้แนะด้วยครับ พลาดตรงไหน
ตามภาพที่แนบนะครับ







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

18
ห้อง MS Access / > การเรียงลำดับตัวเลข
« เมื่อ: 16 มี.ค. 61 , 09:09:57 »
เพิ่งหัดใช้งานเหมือนกันนะครับ แต่เคยเจอปัญหา
คลิ๊กเลือกตารางที่เป็นปัญหาแล้วไปที่  เมนู เครื่องมือฐานข้อมูล> คลิ๊กหัวข้อ กระชับและซ่อมแซมฐานข้อมูล
ลองดู ครับ



หน้า: [1] 2