สมัครสมาชิก

แสดงกระทู้

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 - สันติสุข

หน้า: [1] 2 3
1
อ้างถึง
1. ผมต้องการทำเลขบอกลำดับด้านหน้า Record บนคล้าย Continuous Form คล้ายๆกับ Running Sum บน Report จะมีวิธีการทำอย่างไร? (ตามภาพ)

ขั้นตอนที่ 1 สร้าง Module เอา โค้ดนี้ใส่เข้าไป
โค๊ด: [Select]
Public Function RowNum(frm As Form) As Variant
On Error GoTo Err_RowNum
   
    With frm.RecordsetClone
        .Bookmark = frm.Bookmark
        RowNum = .AbsolutePosition + 1
    End With
   
Exit_RowNum:
    Exit Function
   
Err_RowNum:
    If Err.Number <> 3021& Then
        Debug.Print "RowNum() error " & Err.Number & " - " & Err.Description
    End If
    RowNum = Null
    Resume Exit_RowNum
End Function
ขั้นตอนที่ 2 สร้าง textbox ชื่อ No ที่ ControlSource ใส่ ว่า =RowNum([Form])


ลำดับก็จะรันอัตโนมัติครับ


อ้างถึง
2. ผมทำช่องให้กรอกช่วงเวลาที่ต้องการค้นหา Record(Search by Date Rage) เอาไว้ครับ(ตามภาพ)
แก้โค้ดเป็นแบบนี้ดูครับ ใช้การกำหนด Sql แทน แก้ชื่อ Form1 เป็นชื่อฟอร์มของคุณด้วยนะครับ
โค๊ด: [Select]
Sub Search()
Dim Sql As String
 If IsNull(Me.txtDateFrom) Or IsNull(Me.txtDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.txtDateFrom.SetFocus
    Sql = "SELECT * FROM qryTransactions ORDER BY qryTransactions.TransactionsDate;"
        Else
    Sql = "SELECT * FROM qryTransactions  WHERE (((qryTransactions.[TransactionsDate]) Between forms!Form1!txtDateFrom And forms!Form1!txtDateTo)) ORDER BY qryTransactions.TransactionsDate;"       
End If
        Me.Form.RecordSource = Sql       
End Sub

อ้างถึง
3. ผมต้องการให้แสดงผลลัพธ์ทั้งหมดที่ค้นหาได้ ตามภาพด้านบน จะมีแนวทางเขียนโค้ดอย่างไร
ผมสมมัติสร้าง textbox ไว้เก็บจำนวน Record ชื่อ txt_TotalRecordSearch
เวลาเราจะเรียกใช้ก็นำไปรวมกับ คำสั้งค้นหาวันที่ แบบนี้คับ

โค๊ด: [Select]
Sub Search()
Dim Sql As String
Dim FormRecCount  As Long
 If IsNull(Me.txtDateFrom) Or IsNull(Me.txtDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.txtDateFrom.SetFocus
    Sql = "SELECT * FROM qryTransactions ORDER BY qryTransactions.TransactionsDate;"
        Else
    Sql = "SELECT * FROM qryTransactions  WHERE (((qryTransactions.[TransactionsDate]) Between forms!Form1!txtDateFrom And forms!Form1!txtDateTo)) ORDER BY qryTransactions.TransactionsDate;"       
End If
        Me.Form.RecordSource = Sql
        Me.txt_TotalRecordSearch.ControlSource = "=Count(No)"
End Sub

ตัวอย่างด้านล่างนะครับ

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

2
Union all มีแค่ 2 อันครับ
ส่วนเครื่องหมาย ; มีอันเดียวคืออันล่างสุด
การกำหนดชื่อของ Field หรือตารางถ้าชื่อมีช่องว่าง ให้ใส่เครื่องหมาย [ ] ตามที่อาจารย์สันติสุขบอกครับ

โค๊ด: [Select]
select Status,Cname,Surname,Member,Announce from [Buddist Association๗๖-๕๐]
Union all
select Status,Cname,Surname,Member,Announce from [Buddist Association๕๑-๖๐]
Union all
select Status,Cname,Surname,Member,Announce from [Buddist Association๖๑]
Order By Member,Announce;
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

3
อื่ม! ผมว่าส่วนสำคัญคือ scorebar Vertical ที่หายไป ทำไมหายไป กำหนด Property แล้วไม่ขึ้น? ต้องแก้ไขให้มันแสดงขึ้นมาดีกว่าครับ เพราะมันเป็นส่วนสำคัญของซับฟอร์มเลย ถ้าไม่มีจะใช้งานยาก
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

4
ขอบคุณอาจารย์สันติสุขมากๆครับที่คอยชี้แนะคนที่ไม่เคยทำอย่างผมมาก่อนขอบคุณจริงๆครับ
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

5
เสริมนิด เป็นทางเลือกนะครับ ถ้าเป็น VBA7 (ต่ำกว่านี้ไม่รู้ว่ามีป่าวนะ) ใช้คำสั่ง FileCopy("พาธชื่อไฟล์ต้นฉบับ", "พาธชื่อไฟล์ปลายทาง") ในการก๊อปปี้ไฟล์แบบง่ายๆ ได้เหมือนกัน
ข้อเสียคือ
1. ไม่มีตัวเลือกก๊อปปี้ทับไฟล์ชื่อซ้ำกันหรือไม่ จะเป็นการทับอย่างเดียว (หากเป็นงานที่ทับไฟล์เดิมอยู่แล้วก็ใช้ได้เลย)
2. ไม่รองรับอักษร Grave Accent เช่น è, à, Juné.jpg อย่างนี้คำสั่งจะไม่พบไฟล์
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

6
ห้องสนทนาทั่วไป / 6 Free Online Virus Scanners
« เมื่อ: 02 ก.ค. 62 , 13:04:40 »
หากท่านใดไม่มีโปรแกรมสแกนไวรัสหรือต้องการให้โปรแกรมอื่นตรวจสอบอีกรอบเพื่อความมั่นใจ :shout:
กระทู้นี้ขอเสนอ 6 Free Online Virus Scanners link เพื่อใช้ในการสแกนไวรัส(เฉพาะไฟล์)ผ่านหน้าเว็บดังนี้ :yuush:

01 VirusTotal link


02 MetaDefender Cloud link


03 Kaspersky VirusDesk link


04 Avira link


05 Jotti's Malware Scan link


06 FortiGuard Online Scanner link


ขอขอบคุณข้อมูลจาก https://www.lifewire.com/ link :love:

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

7
ลองนึกถึงใบเสร็จเวลาเราไปซื้อของในห้าง ที่หัวกระดาษเขาจะพิมพ์ว่าแคชเชียร์คือใคร และเราซึ่งเป็นลูกค้าเป็นใคร ส่วนกลางกระดาษก็จะแสดงรายละเอียดสินค้าว่าเราซื้ออะไรบ้าง ซึ่งรองรับได้หลายๆรายการ  ถ้าคุณต้องการลักษณะการเก็บแบบนี้ แปลว่านอกจากเทเบิล Loan ซึ่งเปรียบได้กับหัวกระดาษแล้ว ก็จะต้องมีเทเบิล LoanedItems ซึ่งเป็นรายละเอียดของที่ยืมเพิ่มเติมอีกครับ และอย่างน้อยก็จะมีฟิลด์ Loan_No (PK), Asset_ID(PK) ที่ย้ายมาจากเทเบิล Loan เอามาใส่ไว้ที่นี่แทน และจำนวนที่ยืมด้วยครับ และเราจะสร้างความสัมพันธ์ (Table Relationships) ระหว่างทั้ง 2 เทเบิลไว้ด้วย   (ส่วนนี้หาวิธีทำใน Youtube ด้วยคำว่า  microsoft access table relationships)

สำหรับการบันทึก ก็สร้างฟอร์มสำหรับเทเบิล Loan และ LoanedItems แล้วเราจะเอาฟอร์มของ LoanedItems มาใส่ในฟอร์มของ Loan อีกที (เราจะเรียกฟอร์มของ Loan ว่าเป็น main form และ LoanedItems ว่าเป็น sub form) เป็นการเชื่อม 2 ฟอร์มเข้าด้วยกันด้วย Loan_No ทีนี้ก็จะได้หน้าฟอร์มที่เหมือนมีหัวกระดาษและรายละเอียดรายการยืม/คืนอยู่ภายใน  (ส่วนนี้หาวิธีทำใน Youtube ด้วยคำว่า  microsoft access subform)

และเพื่อให้การแสดงดูเข้าใจมากขึ้น เราจะกำหนดคุณสมบัติต่างๆในแทป Lookup ของฟิลด์ Employee_ID, Customer_ID, Asset_ID ให้เชื่อมโยงไปยังเทเบิล Employees, Customers และ Asset เพื่อที่ว่าระบบจะดึงเอา Employees_Name, Customer_Name และ Asset Description มาแสดงแทนที่จะแสดงเป็น ID ซึ่งอาจไม่สื่อความหมายให้ผู้ใช้ได้เข้าใจอย่างชัดเจนสักเท่าไหร่ ดังนั้นเมื่อถึงเวลาสร้างคิวรี่ที่มีเทเบิล Loan และ LoanedItems เชื่อมระหว่างกัน และเลือกฟิลด์ Employee_ID, Customer_ID, Asset_ID มาแสดง   Access ก็จะดึงเอา _Name และ _Description ของค่าเหล่านี้มาแสดงให้อย่างอัตโนมัติเช่นกัน (ส่วนนี้หาวิธีทำใน Youtube ด้วยคำว่า microsoft access table lookup field) แต่ถ้าหากเราไม่ได้สร้าง Lookup เอาไว้ในฟิลด์ข้างบน ตอนสร้างคิวรี่ เราก็ต้องดึงเอาเทเบิล Employees, Customers และ Asset เข้ามาในคิวรี่ด้วย แล้วสร้างความสัมพันธ์ในคิวรี่เองครับ

ผมอยากทราบครับว่า Loan_No ที่เป็น Primary Key นั้นต้องอยู่ใน LoanedItems หรือว่า Loan ครับ เพราะอีก1ตัวที่เหลือก็จะเป็น FK ถูกไหมครับถ้าผมเข้าในไม่ผิดก็น่าจะเป็น Loan_No ที่อยู๋ใน Table Loan ใช่ไหมครับอาจารย์ แล้วก็หลังจากที่ผมสร้างฟอร์ม จาก Query แล้วเนี้ยมันมีปัญหาคือไม่สามารถเลือกค่าจาก Combobox ได้เกิดจากอะไรครับอาจารย์
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

8
ห้อง MS Access / : สอบถามการใช้ Auto Number ครับ
« เมื่อ: 23 มิ.ย. 62 , 19:40:41 »
คือประมาณว่าท่านจะทำระบบกึ่งออโต้ลำดับที่ใช้ใหมครับ นั่นคือ
ลำดับที่อันแรกท่านจะใส่เอง สมมุติใส่ 11156 พอรายการต่อๆมาให้มัน +1 ออโต้ไปเรื่อยๆเลยจนครบ 25รายการโดยที่ท่านไม่ต้องมานั่งใส่เลขเองใช้หรือไม่ครับ :question:(25รายการถ้านับรวม 11156ด้วยจะจบที่ 11180นะ)
แล้วเมื่อมันครบ25แล้วล่ะ อยากให้มัน... :question:
แล้วแนวการใส่เลขคุณเป็นอย่างไร  :question:
คือประมาณว่า
ชุดที่1 เริ่ม 11156-11180
ชุดที่2 เริ่ม 22221-22245
ชุดที่3 เริ่ม 20001-20025 < ลำดับแทนที่ดันไปแทรกกลางชุด1-2 หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

9
ห้อง MS Access / : สอบถามการใช้ Auto Number ครับ
« เมื่อ: 22 มิ.ย. 62 , 19:18:07 »
ความงงกับคำถามระดับ 5 ตามมาตราริกเตอร์
 

สมมุติผมใส่ตัวเลข 11156 มันก็จะเพิ่มขึ้นที่ละหนึ่งค่า 11157 11158 11159 ... 11181 ซึ่งจะสิ้นสุดที่ค่าที่ 25 แล้วหลังจากนั้น ก็จะใส่ตัวเลขใหม่คือ 22221 แล้วก็ให้มันเพิ่มที่ละ 1 ค่า จนสิ้นสุดค่า ที่ 25 ตามข้างต้นครับ แล้วก็ใส่ตัวเลขค่าใหม่ วนแบบนี้ซ้ำไปมาอะครับ  ขอโทษด้วยครับ ที่เขียนไม่รู้เรื่อง
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

10
ห้อง MS Access / : สอบถามการใช้ Auto Number ครับ
« เมื่อ: 22 มิ.ย. 62 , 15:57:27 »
ความงงกับคำถามระดับ 5 ตามมาตราริกเตอร์
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

11
ขออนุญาตแชร์ประสบการณ์นะคะ

โดยปกติโปรแกรมที่ทำจาก 2003 ก็สามารถนำไปเปิดใช้กับ2016 ได้อยู่แล้ว
แต่จากกรณีคำถามคือต้องการแปลงไปเป็น 2016 ก็สามารถทำได้ดังนี้ค่ะ

-เอาโปรแกรมที่ต้องการแปลง ไปเปิดใน Access2016
-ไปที่เมนู แฟ้ม ให้เลือกไปที่ "บันทึกฐานข้อมูลเป็น" หรือ "บันทึกและประกาศ"
-เลือกอ็อปชั่นที่ต้องการแล้วก็ตั้งชื่อใหม่ เสร็จแล้วค่ะ ลองดูนะคะ
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

12
ขอตอบแบบนี้นะครับ (ท่านอื่นสามารถเสริมได้นะครับ เผื่อผมผิดพลาด ตกหล่นตรงไหน)

ก่อนอื่นต้องแยกกันอย่างนี้ก่อนนะครับ
สำหรับ Object นั้นเป็นเรื่องของเทคโนโลยีเชิงวัตถุ คือมองทุกสิ่งอย่างให้เป็นวัตถุไปหมด โดยเจ้าวัตถุที่เราเห็นบนหน้าจอ (หรือที่ไม่เห็นบนหน้าจอ) ก็ต้องมีคุณสมบัติตามกฏของ Object Oriented Programming เช่น Inheritance และบลาๆๆ 3-4 ข้อจำไม่ได้ แต่ที่จำได้คือ Access มีแต่ไม่ครบทุกข้อ แต่ก็หยวนๆ วพอกล่อมแกล้มว่าเป็น OO ได้ (อันนี้บ่น)

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

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

สรุป Control ก็คือ Object แบบนึง ที่เราใส่ไว้ในฟอร์มหรือรีพอร์ต

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

13
ไม่เข้าใจ
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

14
อ่านแล้ว งง คำถาม แต่ งง ไปอีก ทำไมอาจารย์เก่งจัง
เดาได้ด้วยว่าเค้าถามอะไร
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

15
สนับสนุนการบ่นอีกเสียงครับ

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

16
กดปุ่ม [CTRL] + ['] จะเป็นการเรียกข้อมูลก่อนหน้ามาใส่ (ไม่รู้ว่าช่วยแก้ปัญหาได้ป่าวนะครับ)
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

หน้า: [1] 2 3