พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

03 มิ.ย. 63 , 10:44:12
อ่าน 1268 ครั้ง

Un

ต้องการพิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด



ในแต่ละแผ่นก็มีข้อมูลเช่น ชื่อ-สกุล ปัญหาคือ เช่น
นาย ก ต้องการ 3 แผ่น นาย ข 4 แผ่น นาย ค 5 แผ่น
เก็บข้อมูลในตารางไว้ดังนี้
์Name                 Unit(จำนวนแผ่นที่จะพิมพ์)
นาย ก                    3
นาย ข                    4
นาย ค                    5
ต้องตั้งค่าหรือ เขียนยังงัยให้พิมพ์ออกมาในสติกเกอร์ ดังรูปภาพ ได้ครับ

ขอบคุณครับ


 

04 มิ.ย. 63 , 08:09:53
ตอบกลับ #1

Un

: พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« ตอบกลับ #1 เมื่อ: 04 มิ.ย. 63 , 08:09:53 »
ลองคิดขั้นตอนการทำ
1. สร้างตารางใหม่ เพื่อเก็บ Record ที่ต้องการไปทำ Report
2. กำหนดค่าใน Report ให้แสดงเป็น Column เท่าจำนวน Column ใน สติกเกอร์
 แต่ในขั้นตอนที่ 2 ลองเขียนดู แล้วผลออกมาเป็นแบบนี้



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

 

04 มิ.ย. 63 , 09:23:52
ตอบกลับ #2

PNR

: พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« ตอบกลับ #2 เมื่อ: 04 มิ.ย. 63 , 09:23:52 »
เดี่ยว DIY ให้ครับ
« แก้ไขครั้งสุดท้าย: 04 มิ.ย. 63 , 09:47:13 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Un

04 มิ.ย. 63 , 10:02:52
ตอบกลับ #3

Un

: พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« ตอบกลับ #3 เมื่อ: 04 มิ.ย. 63 , 10:02:52 »
เดี่ยว DIY ให้ครับ
ขอบคุณครับอาจารย์ ผมลองผิดลองถูก ไปเรื่อยๆ รออาจารย์ครับ

 

04 มิ.ย. 63 , 12:10:01
ตอบกลับ #4

PNR

: พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« ตอบกลับ #4 เมื่อ: 04 มิ.ย. 63 , 12:10:01 »
ลองดูครับ ไม่รู้ต้องการแบบนี้ไหม
ถ้าจะปรับตรงไหนสอบถามได้ครับ

โดยขั้นตอนแรก
ใช้การนำข้อมูลจากตาราง work มา Addnew ไปยังตารางที่ 2 คือ WorkExtrackUNIT
โดยจำนวนครั้งเอามาจากการจำนวนของ Unit ในแต่ละ Fullname

โค๊ด: [Select]
Sub AddRowByUnit()
Dim RS As DAO.Recordset
Dim rst As DAO.Recordset
Dim strFullname As String
Dim I As Long
    Set rst = CurrentDb.OpenRecordset("Work", dbOpenDynaset)
    Set RS = CurrentDb.OpenRecordset("WorkExtrackUNIT", dbOpenDynaset)
 
rst.MoveFirst
Do Until rst.EOF
strFullname = rst!FullName
For I = 1 To rst!unit
If strFullname = rst!FullName Then
            RS.AddNew
            RS![FullName] = rst!FullName
            RS![HN] = rst!HN
            RS!row = "1"
            RS.Update
End If
    Next
  rst.MoveNext
  Loop
    RS.Close
    Set RS = Nothing
End Sub

ขั้นตอนต่อมา
ใช้การนำข้อมูลที่ได้มาสร้างเป็นแถวเดียว หลายคอลัมน์
โดยใช้ Do until
สั่งเกตุจากขั้นตอนแรกผมจะเพิ่มแถวที่ชื่อ Row เข้าไปด้วยเพื่อไว้เช็คค่าตอน Update ไปยังตาราง

โค๊ด: [Select]
Public Sub ExplodeTable()
    Dim DB  As DAO.Database
    Dim RS  As DAO.Recordset
    Dim I   As Integer
    Dim LastID  As Variant
   
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("SELECT WorkExtrackUNIT.row,WorkExtrackUNIT.Fullname, WorkExtrackUNIT.HN FROM WorkExtrackUNIT ORDER BY WorkExtrackUNIT.ID;")
    RS.MoveFirst
    Do Until RS.EOF
    If RS!row <> LastID Then
                I = 1
            DB.Execute "insert into Workreport (row, box1) values (" & CStr(RS!row) & ", '" & CStr(RS!FullName & vbCrLf & " HN " & RS!HN) & "')", dbFailOnError
            Else
                I = I + 1
            DB.Execute "update Workreport set Box" & CStr(I) & " = '" & CStr(RS!FullName & vbCrLf & " HN " & RS!HN) & "' where row = '" & CStr(RS!row) & "'", dbFailOnError
   End If
   LastID = RS!row
    RS.MoveNext
    Loop
    RS.Close: Set RS = Nothing
    DB.Close: Set DB = Nothing
    DoCmd.OpenReport "rptdemo", acViewPreview
End Sub

แล้วสร้างปุ่มคลิ๊กขึ้นมาซักตัวหนึ่ง ใส่โค้ดให้จัดลำดับการทำงานตั้งแต่เริ่มจนถึงการออกรายงาน
โดยจะสั่งให้ลบข้อมูลในตาราง ชั่วคราวออกก่อนรับข้อมูลใหม่มาแสดงที่รายงานทุกครั้ง
โค๊ด: [Select]
Private Sub Command0_Click()
Dim DB  As DAO.Database
Set DB = CurrentDb
DB.Execute "Delete * from WorkExtrackUNIT;"
DB.Execute "Delete * from Workreport;"
Call AddRowByUnit
Call ExplodeTable
DB.Close: Set DB = Nothing
End Sub
« แก้ไขครั้งสุดท้าย: 04 มิ.ย. 63 , 12:56:06 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa

04 มิ.ย. 63 , 12:45:40
ตอบกลับ #5

Un

: พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« ตอบกลับ #5 เมื่อ: 04 มิ.ย. 63 , 12:45:40 »
สำเร็จแล้วครับ อาจารย์ จะเก็บโคตไว้ใช้ต่อไปครับ ขอบพระคุณครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5