1
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.
หน้า: [1]
2
ห้อง MS Access / : ไฮไลท์ row ที่โฟกัส
« เมื่อ: 19 มิ.ย. 63 , 16:48:52 »การสร้าง Highlight ให้กับ Current Record ลองดูตัวอย่างนี้ครับ
1.สร้าง textbox unbound ขึ้นมา 1 อันชื่อ txtHighlight แล้วซ่อนไว้ ไม่ต้องแสดง
2.เลือก textbox ตรง Detail ทั้งหมด แล้วเลือกไปที่ี การจัดรูปแบบตามเงื่อนไข ดังภาพด้านล่าง
3.กำหนดเงื่อนไข นิพจน์ โดยสร้างเงื่อนไขเช็คว่า ถ้าเรคคอร์ดปัจจุบัน = txtHighlight ก็จะแสดง สีตามที่เรากำหนด ดังรูป
4.กำหนดโค้ด Event Form_Current()
Private Sub Form_Current()
Me.txtHighlight = Me.[ID]
End Sub
หมายเหตุ
ถ้าคุณอยากให้ได้แบบการเลือกทีละหลายๆ เรคคอร์ดโดยใช้ In เหมือนตัวอย่างเก่าที่เคยทำ ก็นำมาปรับใช้ได้เลยครับ ใช้วิธีแบบนั้นได้เหมือนกัน
โดยกำหนดเงื่อนไข แบบตัวอย่างข้อ 2
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
3
ห้อง MS Access / : พิมพ์สติกเกอร์ตามจำนวนแผ่นที่กำหนด
« เมื่อ: 04 มิ.ย. 63 , 12:10:01 »
ลองดูครับ ไม่รู้ต้องการแบบนี้ไหม
ถ้าจะปรับตรงไหนสอบถามได้ครับ
โดยขั้นตอนแรก
ใช้การนำข้อมูลจากตาราง work มา Addnew ไปยังตารางที่ 2 คือ WorkExtrackUNIT
โดยจำนวนครั้งเอามาจากการจำนวนของ Unit ในแต่ละ Fullname
ขั้นตอนต่อมา
ใช้การนำข้อมูลที่ได้มาสร้างเป็นแถวเดียว หลายคอลัมน์
โดยใช้ Do until
สั่งเกตุจากขั้นตอนแรกผมจะเพิ่มแถวที่ชื่อ Row เข้าไปด้วยเพื่อไว้เช็คค่าตอน Update ไปยังตาราง
แล้วสร้างปุ่มคลิ๊กขึ้นมาซักตัวหนึ่ง ใส่โค้ดให้จัดลำดับการทำงานตั้งแต่เริ่มจนถึงการออกรายงาน
โดยจะสั่งให้ลบข้อมูลในตาราง ชั่วคราวออกก่อนรับข้อมูลใหม่มาแสดงที่รายงานทุกครั้ง
ถ้าจะปรับตรงไหนสอบถามได้ครับ
โดยขั้นตอนแรก
ใช้การนำข้อมูลจากตาราง 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
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
4
ห้อง MS Access / : สร้าง frm_Login ใช้งานได้ไม่ครบ
« เมื่อ: 04 มิ.ย. 63 , 09:15:45 »
ถูกต้องครับ คือถ้ากำหนด nEmployee datatype เป็น Integer ต้องกำหนดค่าเป็นตัวเลข
ถ้ากำหนด 01 คือการกำหนดเป็น string ครับ
ถ้ากำหนด 01 คือการกำหนดเป็น string ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
5
ห้อง MS Access / : แยกข้อมูล combo box main form ไป combo box sub form ข้อมูลไม่อัพเดท
« เมื่อ: 31 พ.ค. 63 , 17:08:11 »6
ห้อง MS Access / : รายงานดึงข้อมูลมาไม่ครบ
« เมื่อ: 28 พ.ค. 63 , 08:21:43 »
ลองแก้ sql ของรายงานเป็นแบบนี้นะครับ
โค๊ด: [Select]
SELECT PartRequestList.Request_No, PartRequestList.Request_Date, PartRequestList.Company_ID, tb_CompanyData.CompanyName, PartRequestList.ProcessID, tb_ProcessData.ProcessName, PartRequestList.RecordByID, EmplayeeRecord.EplName, PartRequestList.RequestByID, EmplayeeRequest.EplName, qry_RequestDetail.PartName, qry_RequestDetail.Material, qry_RequestDetail.Qty, qry_RequestDetail.Unit FROM tb_ProcessData INNER JOIN (EmplayeeRecord INNER JOIN (EmplayeeRequest INNER JOIN (tb_CompanyData INNER JOIN (PartRequestList INNER JOIN qry_RequestDetail ON PartRequestList.Request_No = qry_RequestDetail.Request_No) ON tb_CompanyData.Company_ID = PartRequestList.Company_ID) ON EmplayeeRequest.Epl_ID = PartRequestList.RequestByID) ON EmplayeeRecord.Epl_ID = PartRequestList.RecordByID) ON tb_ProcessData.ProcessID = PartRequestList.ProcessID;
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
7
ห้อง MS Access / : ผมลองใช้สูตร DSUM แต่ ERROR ครับ
« เมื่อ: 26 พ.ค. 63 , 09:46:34 »
งั้นแก้จากแบบเดิมที่มีการอ้างอิง mainform มาใส่แบบนี้ครับ
=DSum("[Qty]","[IncomingMove]","[PartID]='" & [txt_PartID] & "'")
สาเหตุที่ค่าผิดพลาดเพราะเมื่อเราเปิดเฉพาะ Subform
การอ้างอิงผิดพลาดตรงที่เราจะอ้างอิง MainForm ด้วย
ให้แก้ใหม่ครับ
=DSum("[Qty]","[IncomingMove]","[PartID]='" & [txt_PartID] & "'")
สาเหตุที่ค่าผิดพลาดเพราะเมื่อเราเปิดเฉพาะ Subform
การอ้างอิงผิดพลาดตรงที่เราจะอ้างอิง MainForm ด้วย
ให้แก้ใหม่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
8
ห้อง MS Access / : ผมลองใช้สูตร DSUM แต่ ERROR ครับ
« เมื่อ: 25 พ.ค. 63 , 13:20:08 »
ลองอ้างอิง แบบนี้ดูครับถ้าตัว textbox อยู่ในซัพฟอร์มให้อ้าง Mainform ไปหา Subform และไปยังตัว Control ครับ
และในกรณีที่ PartID เป็นtext ให้ใส่ เครื่องหมาย ' (single quote) ด้วยครับ
และในกรณีที่ PartID เป็นtext ให้ใส่ เครื่องหมาย ' (single quote) ด้วยครับ
โค๊ด: [Select]
=DSum("[Qty]","[IncomingMove]","[PartID]='" & [Forms]![frm_IncomingSheet]![frm_IncomingList].[Form]![txt_PartID] & "'")
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa
หน้า: [1]