37
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.
38
ห้อง MS Access / > ลบข้อมูลซ้ำ
« เมื่อ: 15 มี.ค. 61 , 21:51:05 »
DoCmd.RunSQL "DELETE tblName.* FROM tblName WHERE [MemberCode]=" & MySearch!MemberCode & " AND tblName.[Date]=" & CDbl(MySearch!MaxOfDate)
แก้ชือตารางให้ตรงด้วยนะครับ
แก้ชือตารางให้ตรงด้วยนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Eik Q Sang
39
ห้อง MS Access / > การแยกข้อมูลภายในแถว
« เมื่อ: 15 มี.ค. 61 , 09:47:34 »
ลองดูตัวอย่างในฟอร์ม DemoForm ครับ ผมเรียกใช้งาน Query และ Module อยู่ในนั้น
โพสต์นี้ได้รับคำขอบคุณจาก: Earth
40
ห้อง MS Access / > ลบข้อมูลซ้ำ
« เมื่อ: 14 มี.ค. 61 , 20:09:12 »โค๊ด: [Select]
Private Sub Delete_Last()
Dim MySearch As Recordset
Set MySearch = CurrentDb.OpenRecordset("SELECT tblName.MemberCode, Count(*) AS CountRec, Max(tblName.Date) AS MaxOfDate FROM tblName GROUP BY tblName.MemberCode HAVING (Count(*))>1;")
If MySearch.RecordCount > 0 Then
MySearch.MoveFirst
Do While Not MySearch.EOF
DoCmd.RunSQL "DELETE tblName.* FROM tblName WHERE [MemberCode]='" & MySearch!MemberCode & "' AND [Date]=" & CDbl(MySearch!MaxOfDate)
MySearch.MoveNext
Loop
End If
MySearch.Close
Set MySearch = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Eik Q Sang
41
ห้อง MS Access / > การแยกข้อมูลภายในแถว
« เมื่อ: 14 มี.ค. 61 , 17:40:43 »
ลองดูตามตัวอย่างในไฟล์นะครับ
- มีการใช้ฟังก์ชั่นใน Module InvoiceConv ด้วยนะครับ
- เรียกใช้งานจากฟอร์ม DemoForm จะได้ผลลัพธ์เป็นตาราง ResultTable
- มีการใช้ฟังก์ชั่นใน Module InvoiceConv ด้วยนะครับ
- เรียกใช้งานจากฟอร์ม DemoForm จะได้ผลลัพธ์เป็นตาราง ResultTable
โพสต์นี้ได้รับคำขอบคุณจาก: Earth
42
ห้อง MS Access / > การแยกข้อมูลภายในแถว
« เมื่อ: 14 มี.ค. 61 , 14:54:05 »
Import Excel เข้ามาก่อน เอาไปไว้ที่ตารางชั่วคราวที่เรากำหนด แล้วก็ Query ข้อมูลให้เป็นอย่างที่เราต้องการครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Earth
43
ห้อง MS Access / > ต้องการ แสดง กรอบเต็มหน้ารายงานแม้ ว่า มีข้อมูลแค่ 2 รายการ ต้องทำอย่างไร ครับ
« เมื่อ: 11 มี.ค. 61 , 11:57:23 »
ตรง On Page event ของ report ให้ใช้คำสั่ง Line ในการตีเส้นครับ Line(x1,y1)-(x2,y2)
Private Sub Report_Page()
Me.ScaleMode = 7 'กำหนดให้หน่วยเป็น cm.
Me.Line (0.1, 7.4)-(0.1, 19.6) 'ลากเส้นจากตำแหน่งพิกัด 0.1 cm, 7.4 cm ไปที่พิกัด 0.1 cm, 19.6 cm
Me.Line (1.2, 7.4)-(1.2, 19.6)
Me.Line (3.1, 7.4)-(3.1, 19.6)
Me.Line (10.5, 7.4)-(10.5, 19.6)
Me.Line (12.2, 7.4)-(12.2, 19.6)
Me.Line (14.2, 7.4)-(14.2, 19.6)
Me.Line (16.2, 7.4)-(16.2, 19.6)
Me.Line (18.67, 7.4)-(18.67, 19.6)
Me.Line (0.1, 7.4)-(18.67, 7.4)
Me.Line (0.1, 8.6)-(18.67, 8.6)
Me.Line (0.1, 19.6)-(18.67, 19.6)
End Sub
Private Sub Report_Page()
Me.ScaleMode = 7 'กำหนดให้หน่วยเป็น cm.
Me.Line (0.1, 7.4)-(0.1, 19.6) 'ลากเส้นจากตำแหน่งพิกัด 0.1 cm, 7.4 cm ไปที่พิกัด 0.1 cm, 19.6 cm
Me.Line (1.2, 7.4)-(1.2, 19.6)
Me.Line (3.1, 7.4)-(3.1, 19.6)
Me.Line (10.5, 7.4)-(10.5, 19.6)
Me.Line (12.2, 7.4)-(12.2, 19.6)
Me.Line (14.2, 7.4)-(14.2, 19.6)
Me.Line (16.2, 7.4)-(16.2, 19.6)
Me.Line (18.67, 7.4)-(18.67, 19.6)
Me.Line (0.1, 7.4)-(18.67, 7.4)
Me.Line (0.1, 8.6)-(18.67, 8.6)
Me.Line (0.1, 19.6)-(18.67, 19.6)
End Sub
44
ห้อง MS Access / > สอบถามการใช้ combo Filter มากกว่า1รายการ หรือ การใส่ filter sort แต่ละ column
« เมื่อ: 08 มี.ค. 61 , 12:41:28 »
Private Function FilterOut()
Dim stCriteria As String
stCriteria = IIf(IsNull(Me.[Style No.]), "", "[Style No.] = '" & Me.[Style No.] & "' AND ") & _
IIf(IsNull(Me.Buyer), "", "[Buyer] = '" & Me.Buyer & "' AND ") & _
IIf(IsNull(Me.[OD#]), "", "[OD#] = '" & Me.[OD#] & "' AND ") & _
IIf(IsNull(Me.Currency), "", "[Currency] = '" & Me.[Currency] & "' AND ") & True
Me.SubFormName.Form.Filter = stCriteria
Me.SubFormName.Form.FilterOn = True
End Function
ใน Combobox ทุกอันในช่อง AfterUpdate ให้ใส่ = FilterOut() หรือจะ call FilterOut ใน Sub AfterUpdate event ก็ได้
ปล. พวกชื่อฟิลด์หรือคอนโทรลต่างๆ ให้ตรวจสอบกับชื่อที่ใช้จริงก่อนนะครับ
Dim stCriteria As String
stCriteria = IIf(IsNull(Me.[Style No.]), "", "[Style No.] = '" & Me.[Style No.] & "' AND ") & _
IIf(IsNull(Me.Buyer), "", "[Buyer] = '" & Me.Buyer & "' AND ") & _
IIf(IsNull(Me.[OD#]), "", "[OD#] = '" & Me.[OD#] & "' AND ") & _
IIf(IsNull(Me.Currency), "", "[Currency] = '" & Me.[Currency] & "' AND ") & True
Me.SubFormName.Form.Filter = stCriteria
Me.SubFormName.Form.FilterOn = True
End Function
ใน Combobox ทุกอันในช่อง AfterUpdate ให้ใส่ = FilterOut() หรือจะ call FilterOut ใน Sub AfterUpdate event ก็ได้
ปล. พวกชื่อฟิลด์หรือคอนโทรลต่างๆ ให้ตรวจสอบกับชื่อที่ใช้จริงก่อนนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
45
ห้อง MS Access / > สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« เมื่อ: 08 มี.ค. 61 , 10:47:22 »
ตามที่คุณ PookPuy ตอบมาเลยครับ กรณีที่มี combobox แล้วตัว combobox มีการ populate data มาจากตารางที่ต้องการอยู่แล้ว แล้วจะกำหนดให้ฟิลด์อื่นๆมีค่าตาม data ใน combobox ก็แค่เพียงกำหนดให้ฟิลด์นั้นมีค่าเท่ากับ column(0), column(1), column(2)...โดยที่ไม่ได้ต้องไป dlookup ข้อมูลในตารางอีก แต่ผมแนะนำผูกไว้กับ AfterUpdate event
Private Sub StyleNo_AfterUpdate()
OD#.Value = StyleNo.Column(1)
Customers.Value = StyleNo.Column(2)
QtyOrder.Value = StyleNo.Column(3)
End Sub
ปล. ทำไมถึงไม่ bound Table หรือ Query ไว้กับฟอร์มเลย จะได้ให้ Access มันใส่ค่าให้อัตโนมัติ (หรือต้องการเขียนเผื่อสำหรับ upsize ไป MS SQL)
Private Sub StyleNo_AfterUpdate()
OD#.Value = StyleNo.Column(1)
Customers.Value = StyleNo.Column(2)
QtyOrder.Value = StyleNo.Column(3)
End Sub
ปล. ทำไมถึงไม่ bound Table หรือ Query ไว้กับฟอร์มเลย จะได้ให้ Access มันใส่ค่าให้อัตโนมัติ (หรือต้องการเขียนเผื่อสำหรับ upsize ไป MS SQL)
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
46
ห้อง MS Access / > เชื่อม ODBC แล้ว Auto New Record ไม่ขึ้นครับ
« เมื่อ: 27 ก.พ. 61 , 13:22:49 »
คำสั่งเดียวกันกับวงกลมที่ว่าคือ
DoCmd.RunCommand acCmdSelectRecord
ลองเอาไปใส่ก่อนที่จะ save ดูครับ เผื่อจะได้
DoCmd.RunCommand acCmdSelectRecord
ลองเอาไปใส่ก่อนที่จะ save ดูครับ เผื่อจะได้
โพสต์นี้ได้รับคำขอบคุณจาก: TaroKung Ichimura
47
ห้อง MS Access / > เขียน VBA อ่าน website หนึ่ง ต้องการรหัส HTML ของเวบนั้น ต้องทำอย่างไรครับ
« เมื่อ: 05 ก.พ. 61 , 20:51:15 »
Private Sub ViewPageSource()
Dim url As String, txtPageSource As String, i As Long
url = "https://marketdata.set.or.th/mkt/sectorquotation.do?sector=SET50"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
txtPageSource = .ResponseText
End With
End Sub
ดัดแปลงจาก https://www.mrexcel.com/forum/excel-questions/556844-read-html-source-code-vba-5.html
Dim url As String, txtPageSource As String, i As Long
url = "https://marketdata.set.or.th/mkt/sectorquotation.do?sector=SET50"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
txtPageSource = .ResponseText
End With
End Sub
ดัดแปลงจาก https://www.mrexcel.com/forum/excel-questions/556844-read-html-source-code-vba-5.html
โพสต์นี้ได้รับคำขอบคุณจาก: bgfc
48
ห้อง MS Access / > สอบถามเรื่องการ update ข้อมูลในตาราง
« เมื่อ: 01 ก.พ. 61 , 16:42:35 »
พวกชื่อ Object ต่างๆใน Access พวก Form, Report, Table, Query, Control ผมแนะนำให้ใช้ภาษาอังกฤษและไม่มีเว้นวรรคหรือสัญลักษณ์ต่างๆ (ยกเว้น _ ) ในชื่อ Object เหล่านี้ครับ
ถ้าจำเป็นต้องมีเว้นวรรคหรือสัญลักษณ์ในชื่อ เวลาจะเขียน VBA เพื่ออ้างอิง Object เหล่านี้จะต้องมี [ ] คร่อมชื่อเอาไว้เพื่อให้ Access รู้ว่ามันเป็นชื่อของ Object ไม่งั้น Access จะตีความสัญลักษณ์เหล่านั้นตามความหมายที่มันมี ดังนั้นหลีกเลี่ยงการตั้งชื่อที่มีเว้นวรรคหรือสัญลักษณ์ต่างๆจะดีที่สุด จะได้ไม่ต้องพะวงมาคอยใส่ [ ] ตอนเขียน code หรือ SQL ครับ
ถ้าจำเป็นต้องมีเว้นวรรคหรือสัญลักษณ์ในชื่อ เวลาจะเขียน VBA เพื่ออ้างอิง Object เหล่านี้จะต้องมี [ ] คร่อมชื่อเอาไว้เพื่อให้ Access รู้ว่ามันเป็นชื่อของ Object ไม่งั้น Access จะตีความสัญลักษณ์เหล่านั้นตามความหมายที่มันมี ดังนั้นหลีกเลี่ยงการตั้งชื่อที่มีเว้นวรรคหรือสัญลักษณ์ต่างๆจะดีที่สุด จะได้ไม่ต้องพะวงมาคอยใส่ [ ] ตอนเขียน code หรือ SQL ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
49
ห้อง MS Access / > สร้าง QR Code ตามเงื่อนไขไม่ได้ค่ะ
« เมื่อ: 31 ม.ค. 61 , 14:25:00 »
แก้โดยการเพิ่ม parameter นี้เข้าไป
Public Function QRString(vAny As Variant) As String
Dim DateStr As String, DateChr(12) As String, i As Integer
DateStr = Format(Now(), "DDMMYYYYHHmm")
For i = 1 To 12
DateChr(i) = Mid(DateStr, i, 1)
Next
QRString = Format(Int(Rnd() * 1000), "000") & DateChr(9) & DateChr(5) & DateChr(3) & DateChr(1) & DateChr(6) & DateChr(11) & DateChr(7) & DateChr(8) & DateChr(2) & DateChr(10) & DateChr(4) & DateChr(12)
End Function
คุณได้รัน function นี้ใน Query หรือไม่ ถ้าเอาไปรันใน Query ให้ระบุชื่อ field ที่มีอยู่ฟิลด์ไหนก็ได้ลงไปใน function นี้เช่น
QRString([ชื่อฟิลด์อะไรก็ได้ที่มีอยู่])
ปล. ทุกครั้งที่มีการ populate หรือ recalculate ตัว Query นี้ค่ามันจะเปลี่ยนทุกครั้ง ดังนั้นให้เรียกใช้เพียงครั้งเดียวแล้วเก็บค่าที่ได้เข้าในตาราง หรือใน Log แล้วใช้ค่าดังกล่าวแทน
Public Function QRString(vAny As Variant) As String
Dim DateStr As String, DateChr(12) As String, i As Integer
DateStr = Format(Now(), "DDMMYYYYHHmm")
For i = 1 To 12
DateChr(i) = Mid(DateStr, i, 1)
Next
QRString = Format(Int(Rnd() * 1000), "000") & DateChr(9) & DateChr(5) & DateChr(3) & DateChr(1) & DateChr(6) & DateChr(11) & DateChr(7) & DateChr(8) & DateChr(2) & DateChr(10) & DateChr(4) & DateChr(12)
End Function
คุณได้รัน function นี้ใน Query หรือไม่ ถ้าเอาไปรันใน Query ให้ระบุชื่อ field ที่มีอยู่ฟิลด์ไหนก็ได้ลงไปใน function นี้เช่น
QRString([ชื่อฟิลด์อะไรก็ได้ที่มีอยู่])
ปล. ทุกครั้งที่มีการ populate หรือ recalculate ตัว Query นี้ค่ามันจะเปลี่ยนทุกครั้ง ดังนั้นให้เรียกใช้เพียงครั้งเดียวแล้วเก็บค่าที่ได้เข้าในตาราง หรือใน Log แล้วใช้ค่าดังกล่าวแทน
โพสต์นี้ได้รับคำขอบคุณจาก: tubitmmm
50
ห้อง MS Access / > สอบถามเรื่องการดึงข้อมูลรูปภาพ
« เมื่อ: 30 ม.ค. 61 , 19:26:12 »
--ก็จะมีฟิวด์ที่ชื่อ pict ไว้เก็บข้อมูลรูปของแต่ละ style อยู่แล้ว
ถ้าอันนี้หมายถึงฟิลด์นั้นเก็บ path ของรูปไว้ เช่น D:\pict\abc.jpg คุณก็ให้แสดงรูปได้โดยกำหนดว่า
Dim mypict As String
mypict = Nz(DLookup("pict","Production","เงื่อนไขที่กำหนด style no."))
Me.ชื่อImageControl.Picture = mypict
ถ้าอันนี้หมายถึงฟิลด์นั้นเก็บ path ของรูปไว้ เช่น D:\pict\abc.jpg คุณก็ให้แสดงรูปได้โดยกำหนดว่า
Dim mypict As String
mypict = Nz(DLookup("pict","Production","เงื่อนไขที่กำหนด style no."))
Me.ชื่อImageControl.Picture = mypict
โพสต์นี้ได้รับคำขอบคุณจาก: prajak
51
ห้อง MS Access / > สร้าง QR Code ตามเงื่อนไขไม่ได้ค่ะ
« เมื่อ: 30 ม.ค. 61 , 12:44:02 »
ไม่แน่ใจว่าหมายถึงการสร้างรหัสแบบนี้หรือเปล่า
Public Function QRString() As String
Dim DateStr As String, DateChr(12) As String, i As Integer
DateStr = Format(Now(), "DDMMYYYYHHmm")
For i = 1 To 12
DateChr(i) = Mid(DateStr, i, 1)
Next
QRString = Format(Int(Rnd() * 1000), "000") & DateChr(9) & DateChr(5) & DateChr(3) & DateChr(1) & DateChr(6) & DateChr(11) & DateChr(7) & DateChr(8) & DateChr(2) & DateChr(10) & DateChr(4) & DateChr(12)
End Function
Public Function QRString() As String
Dim DateStr As String, DateChr(12) As String, i As Integer
DateStr = Format(Now(), "DDMMYYYYHHmm")
For i = 1 To 12
DateChr(i) = Mid(DateStr, i, 1)
Next
QRString = Format(Int(Rnd() * 1000), "000") & DateChr(9) & DateChr(5) & DateChr(3) & DateChr(1) & DateChr(6) & DateChr(11) & DateChr(7) & DateChr(8) & DateChr(2) & DateChr(10) & DateChr(4) & DateChr(12)
End Function
โพสต์นี้ได้รับคำขอบคุณจาก: tubitmmm
52
ห้อง MS Access / > ต้องการให้ค่าที่ป้อนใน field ของmain form ป้อนให้อัตโนมัติในฟิวด์ของ Sub form
« เมื่อ: 20 ม.ค. 61 , 12:08:36 »
ที่ช่อง Discount ของ Main Form กำหนด AfterUpdate event ประมาณนี้
Private Sub Discount_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE PODetails SET PODetails.Discount = [Quantity] * [Unit Price] * " & Me.Discount / 100 & " WHERE PODetails.[PO Number] = '" & Me.[PO Number] & "';"
DoCmd.SetWarnings True
Me.ชื่อSubForm.Refresh
End Sub
Private Sub Discount_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE PODetails SET PODetails.Discount = [Quantity] * [Unit Price] * " & Me.Discount / 100 & " WHERE PODetails.[PO Number] = '" & Me.[PO Number] & "';"
DoCmd.SetWarnings True
Me.ชื่อSubForm.Refresh
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: chaoclub