แสดงกระทู้

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 - apirak

หน้า: 1 2 [3] 4 5
37
ทำคลิปให้ดูนะครับ เผื่อช่วยได้

Youtube
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

38
เพิ่มเติมต่อจากอาจารย์อีกหน่อยนะครับ

สมมุติตารางชื่อ Table1
Field ชื่อ  CusID,CusName,DocNumber,DocAddDate
Textbox ชื่อ txtFindCusID / txtFindCusName /  txtFindDocNum / txtFindDocAddDate
Form ในการค้นหา ชื่อ frmSearchCustomer
โค๊ด: [Select]
Private Sub Command40_Click()
Dim StrFilter1, StrFilter2, StrFilter3, StrFilter4 As String
Dim GroupFilter As String

'กำหนดเงื่อนไขให้กับตัวแปรว่าถ้ามีข้อมูลจะนำ Where Clause นี้มาต่อประโยคใน Sql
If Not IsNull(Me.txtFindCusID) Then
StrFilter1 = "(((Table1.CusID)=[forms]![frmSearchCustomer]![txtFindCusID])"
End If
If Not IsNull(Me.txtFindCusName) Then
StrFilter2 = "(((Table1.CusName)=[forms]![frmSearchCustomer]![txtFindCusName])"
End If
If Not IsNull(Me.txtFindDocNum) Then
StrFilter3 = "(((Table1.DocNumber)=[forms]![frmSearchCustomer]![txtFindDocNum])"
End If
If Not IsNull(Me.txtFindDocAddDate) Then
StrFilter4 = "(((Table1.DocAddDate)=[forms]![frmSearchCustomer]![txtFindDocAddDate])"
End If

'นำเงื่อนไขที่ได้จากด้านบน มาต่อประโยคกัน
GroupFilter = IIf(StrFilter1 = "", "", StrFilter1) & IIf(StrFilter2 = "", "", StrFilter2) & IIf(StrFilter3 = "", "", StrFilter3) & IIf(StrFilter4 = "", "", StrFilter4)

'ใช้ Replace เพื่อใช้ And ต่อเงื่อนไขใน Where Clause
GroupFilter = Replace(GroupFilter, ")(((", ") and ((")

'นำประโยคที่ได้มากำหนด RecordSource
If IsNull(Me.txtFindCusID) And IsNull(Me.txtFindCusName) And IsNull(Me.txtFindDocAddDate) And IsNull(Me.txtFindDocNum) Then
Me.RecordSource = "Select * from table1;"
Else
Me.RecordSource = "Select * from table1 where " & GroupFilter & ");"
End If
End Sub

ข้อดีคือ  สามารถเลือกค้นหาข้อมูลได้ทุก textbox ที่อยากค้นและ เราใช้การสร้าง RecordSource แค่อันเดียว เพราะ Sql ที่ได้มาจากการสร้างเงื่อนไขค้นหาด้านบนไว้หมดแล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

39
ไฟล์ตัวอย่างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

40
ลองดูตัวอย่างนี้ครับ พอดีค้นหาเจอจากเว็บนอก และเพิ่มเติมบางส่วนเช่นเลือกข้อมูลจากตารางพิกัส gps ลูกค้าให้ด้วยคับ
ตัวแผนที่อัพเดทล่าสุด 2019
Credit : Philben




โพสต์นี้ได้รับคำขอบคุณจาก: apirak

41
พอดีมีเวลาและเห็นว่ามีหลายครั้งที่มีการถามถึงการสร้างฟอร์มล็อคอินและเมนู ผมเลยเขียนตัวอย่างขึ้นมาเอาไว้ให้เป็นแนวทางในการศึกษาครับ

ระบบมี 2 เทเบิลคือ tbUser ไว้เก็บ ID,รหัสผ่าน,และเมนูที่จะใช้ ในขณะที่อีกเทเบิล tbMenu จะเก็บว่าแต่ละเมนูมีโครงสร้างอย่างไร

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

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

ปล. อย่าถามนะว่า login ID และรหัสผ่านมีอะไรบ้าง  :sweat:
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

42
อ้างถึง
แต่ตอนนี้ เค้าขอเพิ่มหลายส่วนเลยค่ะ TOT
:shout: เป็นเรื่องธรรมดาของคนพัฒนาโปรแกรมจัดเก็บข้อมูลเลยครับ เท่าที่ทำมามันจะมีเรื่่องมาให้ทำต่อยอดไปเรื่อยๆ ละครับ
ค่อยๆ พัฒนาไปเรื่อยๆ ครับ ตัวเราเองต้องกำหนดระบบงานที่ต้องการให้ชัดเจ็นจะได้ไม่มีปัญหาภายหลัง อย่างงานที่ผมทำถ้าจะเพิ่มเติมแก้ไขส่วนไหน ก็จะสร้าง Flow การทำงานของงานจริงแล้วนำมาสร้างโปรแกรม และก่อนเริ่มสร้างจะประชุมจนได้ข้อสรุปว่าต้องการแบบนี้จริงๆ ผมถึงจะทำให้ เพราะมีบ่อยมากทำให้แล้วเปลี่ยนใจอยากให้แก้ไขอีกซึ่งจะเป็นงานเหนื่อยของพวกเราคับ  :sweat: :sweat: :spook:

ถ้าติดตรงส่วนไหนก็สอบถามในบอร์ดได้ตลอดคับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

43
ลองดูไม่แน่ใจว่าใช้แบบนี้ไหมนะครับ

1.Frm_Show_Downtime ให้เปิดทิ้งไว้ ฟอร์มนี้จะอัพเดท ข้อมูลซึ่งเราจะนำไปไว้ที่ เครื่องของ Admin หรือ เครื่องของ Tech ครับ
ข้อมูลแถวที่แสดงคือข้อมูลจากการคีย์ DownTime เข้ามาและยังไม่ได้รับการแก้ไข

2.เมื่อ User จะคีย์ Frm_Downtime ก็ให้ Login Frm_Downtime_Login แล้วทำการระบุข้อมูล
เมื่อกดบันทึก ระบบจะทำการสอบถามว่าต้องการบันทึกหรือไม่ ถ้าบันทึก รอซักแปปนึง ข้อมูลจะมาแสดงที่ฟอร์ม Frm_Show_Downtime

3.Tech ผู้ให้การแก้ไข สามารถกดปุ่ม Show Issuse เพื่อดูสาเหตุอาการของปัญหา และ สามารถกด Tech FIX เผื่อเข้าไปแก้ไข
และเมื่อจบงาน (OUT TIME) แล้ว ข้อมูลที่ Frm_Show_Downtime ที่แก้ไขแล้วจะหายไป
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

44
โปรแกรมออกแบบมาแบบไหนครับ ฐานข้อมูลเป็น Ms access หรือ SQL server ส่วนที่สอบถามมาผมจะตอบเท่าที่ทราบนะครับ

อ้างถึง
เราจะสามารถนำโปรแกรมไปใช้งานได้อย่างไรคะ
โดยจะมีผู้ใช้(user) จำนวน 8 เครื่อง แต่จะให้มีจอรายงานผลหลัก 1 เครื่อง
สร้าง Back-End ไว้ที่เซิฟเวอร์และสร้าง Front-End ไว้ให้ User ทั้ง 8 เครื่องใช้งาน บันทึกข้อมูลหรือแก้ไขข้อมูล
หรือ สร้าง Back-End ไว้ที่เครื่อง Admin แล้วใช้การ Mapdrive ให้เครื่อง User LinkTable มายัง Back-End
โดยให้เครื่อง Admin ดึงข้อมูลจาก Back-End มาแสดงครับ ลองศึกษาการสร้าง Back-End ดู
การเชื่อมโยงอาจจะใช้การ LinkTable

อ้างถึง
มีการแจ้งเตือนเมื่อ user ล็อกอินมาเราควรสร้างจากอะไรคะ ฟร์อม หรือรีพอร์ต
ที่เครื่อง Admin ควรจะสร้าง หน้าจอ DashBoard โดยสร้างจาก Form นิแหละครับมาแสดงรายละเอียดข้อมูลที่ต้องการ โดยใช้การแสดงผล
โดยใช้การตั้ง TimeInterval ในการ refresh ข้อมูลล่าสุดมาแสดง
ส่วนการเรียกข้อมูลมาแสดงสามารถทำได้หลายวิธีครับ

รออาจารย์ท่านอื่นมาเสริมนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

45
ในภาษา VBA  เครื่องหมาย double quote เป็น string delimeter เปิด/ปิดสำหรับค่าคงที่ของข้อความ (ในนี้ผมจะใช้สีแดงแล้วกัน) เช่น ค่าคงที่ของข้อความ AB ก็จะต้องสร้างเป็น "AB"   แต่ถ้าค่าคงที่ของข้อความต้องมี double quote อยู่ภายในอยู่ด้วย เช่น A"B  เราต้องใช้ double quote 2 ตัว   VBA จะรู้ว่าจริงๆแล้ว นี่เป็นตัวอักษร double quote เพียงตัวเดียว ไม่ใช่ delimiter  ดังนั้นเราก็ต้องสร้างเป็น "A""B" 


ส่วน string delimeter ในภาษา SQL จะใช้ได้ทั้ง double quote และ single quote  ดังนั้นเมื่อต้องการค่าคงที่ของข้อความ SELECT * FROM Output WHERE [Type] like 'AB' ลงในตัวแปรชื่อ SQL เราก็จะสร้างคำสั่งเป็น SQL = "SELECT * FROM Output WHERE [Type] like 'ABC'" หรือถ้าเราใช้ double quote แทน single quote คำสั่งก็จะกลายเป็น SQL = "SELECT * FROM Output WHERE [Type] like ""ABC"""


ส่วน & คือ operator ที่ใช้เชื่อมข้อความ 2 ข้อความเข้าด้วยกัน เช่น "A" & "B" ก็จะได้ค่าคงที่ของข้อความเป็น AB หรือ "A" & """B""" ก็จะได้เป็น A"B"
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

46
อ้างถึง
1. หลักความแตกต่างระหว่าง " และ ' และ & คืออะไรครับ

 " และ '  เราเรียกว่า double quote และ Single quote ครับ สัญลักษณ์พวกนี้เป็นการบอกให้ทราบว่า คุณได้กำหนดช่วงของ ข้อความ หรือ String หรือ ตัวเลข หรือตัว Control จาก ไหน ถึง ไหน ครับ เช่น "..............." เป็นการบอกว่า ภายใน double quote นี้คือเนื้อหาส่วนเดียวกัน

ความแตกต่างของการใช้  " และ ยกตัวอย่างการใช้ Dlookup
เราจะใช้ ' ในการกรณีที่ อ้างถึงเขตข้อมูลที่เป็น string หรือข้อความ เช่น
DLookup("FieldName" , "TableName" , "Criteria= 'String'")

ในกรณีที่เป็น ตัวเลข เราจะใช้ " ในการกำหนดขอบเขตครับเช่น N คือตัวเลข
DLookup("FieldName" , "TableName" , "Criteria = n")

แต่ " " นี้ก็ไม่ได้ใช้กับตัวเลขเสมอไป เราจะใช้ในการกำหนด เริ่มต้นและสิ้นสุดของข้อความที่เรากำหนดได้เหมือนกันเช่น

msgbox "สวัสดีครับ",vbInformation,"ทักทาย"

& นั้นใช้ในการเชื่อมต่อกับส่วน อื่นๆของคำสั่ง เช่น ตัวแปร เชื่อมกับ Control / ข้อความเชื่อมกับ Control / กำหนด เชื่อมฟิลล์เข้าด้วยกัน เช่น Field1 & "/" & Field2  ก็จะได้ Field1/Field2เป็นต้น

อ้างถึง
2. ในกรณีนี้ทำไมต้องใส่ " " ที่ตอนต้นและตอนท้ายด้วยครับ เพราะดูในที่อื่น ก็ select * from  where ไม่เห็นต้องมี " " ปิดหัวท้ายเลย


คุณอ้างถึงตัวแปร Sql ที่เป็น string ซึ่ง ต้องมี " " ปิดหัวท้ายเพื่่อกำหนดขอบเขตของ String ที่เรากำหนดคับ

อ้างถึง
3. like '" & Nz(Me.tcombo, "*") & "'  --> รบกวนช่วยแปล Code นี้หน่อยครับ ไม่เข้าใจตรงการเขียน '" & XXX & "'
จากตัวอย่างนี้ลองสังเกตุ '" & XXX & "' การใส่ เครื่องหมาย  " และ ' ให้การ Control ที่เป็นข้อความคับ
Nz(Me.tcombo, "*") คือการกำหนดให้ตรวจสอบ Control ที่ชื่อ tcombo ครับโดยการกำหนดให้แสดงผลตามว่า tcombo ว่างหรือไม่ว่าง
ถ้า tcombo ไม่เป็นค่าว่าง สมมุติเราใส่ กรุงเทพ เงื่อนไขของ คำสั่งนี้คือ   like "กรุงเทพ" ซึ่ง ถ้าเขตข้อมูลไหนมีคำว่ากรุงเทพก็จะแสดงรายการออกมาครับ
แต่ถ้า tcombo เป็นค่าว่าง Nz Function ก็จะแทนค่าว่างด้วย * คือถ้าว่างก็ให้เงื่อนไขคือแสดงข้อมูลทั้งหมด

ผมตอบได้เท่าที่ผมนึกออกนะคับ  รออาจารย์ท่านอื่นมาเสริม
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

47
sql = "SELECT * FROM Output WHERE [Type] like '" & Nz(Me.tcombo, "*") & "' and [Province] like '" & Nz(Me.cprovince, "*") & "' and [District] like '" & Nz(Me.cdistrict, "*") & "' and [SubDistrict] like '" & Nz(Me.csubdistrict, "*") & "' and [Location] like '" & Nz(Me.Clocation, "*") & "'"

1. หลักความแตกต่างระหว่าง " และ ' และ & คืออะไรครับ
2. ในกรณีนี้ทำไมต้องใส่ " " ที่ตอนต้นและตอนท้ายด้วยครับ เพราะดูในที่อื่น ก็ select * from  where ไม่เห็นต้องมี " " ปิดหัวท้ายเลย
3. like '" & Nz(Me.tcombo, "*") & "'  --> รบกวนช่วยแปล Code นี้หน่อยครับ ไม่เข้าใจตรงการเขียน '" & XXX & "'

ขอโทษนะครับ ที่ต้องรบกวนให้อธิบายเยอะเลย
ขอบคุณล่วงหน้าครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

48
ลองศีกษาฟังชั่น DateDiff() ดูครับ สิ่งที่จะได้คือเวลาที่สาย
จากนั้นใช้คำสั่ง If เพื่อใช้คัดกรองผู้ที่มาสาย = 1

ลองเพิ่มรูปแบบคำสั่งนี้เข้าไปใน Query ดูครับ LateChk: IIf(DateDiff("n",[StrtWrk],"08:00")<0,"1","")





ขอขอบคุณความรู้เกี่ยวกับ MS-Access จาก อ. สุภาพ ไชยา
ก็ฝากไว้เผื่อจะสามารถช่วยให้มิตรรักแฟนเพลงท่านหนึ่งท่านใด ก้าวพ้นปัญหาที่กำลังแก้อยู่ได้เร็วขึ้น
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

49
โค๊ด: [Select]
Option Compare Database

Private Sub SearchCombo()
Dim sql As String

sql = "SELECT * FROM tbldata WHERE [Province] like '" & Nz(Me.Combo1, "*") & "' and [District] like '" & Nz(Me.Combo2, "*") & "'"
    Forms!frmsearch!frmdata.Form.RecordSource = sql
    Forms!frmsearch!frmdata.Form.Requery
   
If Not IsNull(Me.Combo1) Then
Me.Combo2.RowSource = "SELECT DISTINCT tbldata.District, tbldata.Province FROM tbldata WHERE (((tbldata.Province)=[forms]![frmsearch]![Combo1]));"
Else
Me.Combo2.RowSource = "SELECT DISTINCT tbldata.District FROM tbldata GROUP BY tbldata.District;"
End If
End Sub
Private Sub Combo1_AfterUpdate()
    Me.Combo2 = Null
    SearchCombo
End Sub
Private Sub Combo2_AfterUpdate()
    SearchCombo
End Sub
Private Sub Combo2_GotFocus()
  SearchCombo
End Sub


สร้างเงื่อนไขในการกำหนด RowSource ครับลองดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

50
ถ้าจะเก็บข้อมูลลงในตารางเป็น ID ของ ตารางนั้นก็คงจะเหมาะครับ เพราะใช้ทรัพยากรน้อยลง
ถ้าคุณกำหนดข้อมูลแถวของ Combobox เป็น คอลัมน์1 ID คอลัมน์2 ชื่อจังหวัดหรือตำบลหรืออำเภอ
ตรง column width(ความกว้างของคอลัมน์) กำหนดซัก 0ซม.;5ซม. หรือตัวเลขอื่นๆ เพื่อให้แสดงรายการได้ครบ


column width กำหนดซัก 0ซม.;5ซม. คือ Combobox คอลัมน์ไหน กำหนดเป็น 0 จะไม่แสดงคอลัมน์นั้น จากการกำหนดนี้ข้อมูลจะถูกเก็บข้อมูล ID แต่จะแสดง รายการของคอมโบบ๊อกนั้นแทน
ส่วน BoundColumn(คอลัมน์ที่ถูกผูกไว้)ถ้าอยากจะเก็บข้อมูลเป็น ID กำหนดเป็น 1 ถ้าจะเก็บเป็นตัวหนังสือหรือรายการกำหนดเป็น 2 หรือดูจากการกำหนดชนิดแหล่งข้อมูลแถวว่าต้องการผูกคอลัมน์ไหนไว้ครับ

โพสต์นี้ได้รับคำขอบคุณจาก: apirak

51
--> ขอไฟล์ของท่านมาดูได้หรือไม่ :question:

ท่านเอาไปใช้งานแนวไหนครับ
-> ใว้เพื่อใช้เพิ่มรายชื่อหน่วยงาน
-> ใว้เมื่อเลือกหน่วยงานแล้วกรองตัวเลือกออกมา เช่น กรมป่าไม้ > จังหวัด > อำเภอ > ตำบล > ที่อยู่ > ...

ลองแก้ตัวเลขในช่อง Bound Column หรือยังครับ


New ไฟล์ตัวอย่างที่ผมใช้เพิ่มชื่อที่อยู่ลูกค้า และเรียกมาดูครับ(ต้นฉบับผมเรียกมาใช้งาน)
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

52
ลองดูโค้ดนี้ครับ ไม่รู้รันผ่านไหมยังไม่ได้เทสครับ สร้างคิวรี่ใหม่ขึ้นมาเอา SQL นี้ไปวางแล้วรันดู

โค๊ด: [Select]
SELECT [VATBUY QUERY1].VatMonth, [VATSALE QUERY1].[Sum Of Price] AS Sale, [VATBUY QUERY1].[Sum Of Price] AS Buy, Format(Nz([sale])-Nz([buy]),"Standard") AS [Sale-Buy]
FROM [VATBUY QUERY1] INNER JOIN [VATSALE QUERY1] ON [VATBUY QUERY1].VatMonth = [VATSALE QUERY1].VatMonth;
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

53
ห้อง MS Access / : กำหนดช่วงวันที่
« เมื่อ: 22 พ.ค. 62 , 16:04:28 »

ลองดูนะครับ ไม่รู้ใช่ที่ต้องการหรือเปล่า
แนวคิดคือ
1.ถ้าเกินวันที่ 10 ก็ให้ เดือน +1
2.ถ้าเป็น เดือน 12 และ วันที่ >10 ให้ เดือนเท่ากับ 1 และ ปี+1


แบบที่ 1 แบบแสดงเดือนเป็นตัวเลข และเดือนแบบตัวอักษร
โค๊ด: [Select]
Private Sub txtDate_AfterUpdate()
Dim sMonth As String
Dim sDate As String
Dim result As String

sMonth = Month(Me.txtDate)
sDate = Day(Me.txtDate)
sYear = Format(txtDate, "yyyy")

If sDate <= 10 Then
result = Me.txtDate
Else
result = sDate & "/" & sMonth + 1 & "/" & sYear
If (Mid(result, 4, 2)) = "13" Then

result = sDate & "/" & "1" & "/" & (Format(txtDate, "yyyy") + 1)
Else
result = result
End If
End If
result = result
Me.txtMonth = "เดือน" & Month(result) & " " & MonthName(Month(result))
End Sub

แบบที่ 2 แสดงเดือนและปีแบบเต็ม
โค๊ด: [Select]
Private Sub txtDate_AfterUpdate()
Dim sMonth As String
Dim sDate As String
Dim result As String

sMonth = Month(Me.txtDate)
sDate = Day(Me.txtDate)
sYear = Format(txtDate, "yyyy")

If sDate <= 10 Then
result = Me.txtDate
Else
result = sDate & "/" & sMonth + 1 & "/" & sYear
If (Mid(result, 4, 2)) = "13" Then 'ดักเงื่อนไข กรณี เดือน 12 +1 จะเท่ากับ 13

result = sDate & "/" & "1" & "/" & (Format(txtDate, "yyyy") + 1) 'ก็ให้แปลงกลับเป็นเดือน 1 และ +ปี ไปอีก 1
Else
result = result
End If
End If
Me.txtMonth = result

End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

54
ยินดีครับ ที่จริงมันสามารถ Convert File รูป เป็นรูปแบบที่ต้องการได้ด้วยนะครับ เช่น ต้นฉบับเป็น .BMP จะแปลงเป็น .JPEG หรือ อื่นๆได้ โดยใช้ WIA
แต่จากความต้องการเจ้าของกระทู้ ไม่น่าจะใช้ในส่วนนี้ครับ  :cool: :cool:
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

หน้า: 1 2 [3] 4 5