สมัครสมาชิก

แสดงกระทู้

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 4 ... 11
1
- คิวรี่นี้ซับซ้อนเสียหน่อย ถ้าเขียนจริงๆคงจะเป็น SELECT ซ้อนกัน 3 ชั้น แต่เพื่อให้ดูง่าย(หรือเปล่าไม่รู้)และคงการใช้ DCount() เอาไว้ ก็จะออกมาเหลือ 2 ชั้น
- ในนี้ผมสมมุติให้ชื่อเทเบิลว่า TB และชื่อฟิลด์ว่า dt,status,type คุณไปเปลี่ยนเองแล้วกัน
- ผมเขียนเพื่อให้ดูสะอาดตาขึ้นโดยขึ้นบรรทัดใหม่ แต่สามารถนำเอามาต่อกันโดยมีช่องว่างคั่นสักตัวนึงก็ได้นะครับ เช่น บรรทัดที่ 1 และ 2 สามารถเขียนเป็น SELECT [Month-Year], Inprogress, Complete, [Inprogress]+[Complete] AS Total, ก็ได้
โค๊ด: [Select]
SELECT
[Month-Year], Inprogress, Complete,
[Inprogress]+[Complete] AS Total,
Format([Complete]/([Inprogress]+[Complete])*100,"0.00") AS [% Complete]
FROM
(SELECT Format([dt],"mmm-yyyy") AS [Month-Year],
First(Month([dt])) AS M,
First(Year([dt])) AS Y,
First(Val(DCount("*","TB","Status = '2' and Type = '1' and (month(dt) = " & Month([dt]) & ") and (year(dt) = " & Year([dt]) & ") "))) AS Inprogress,
First(Val(DCount("*","TB","Status = '1' and Type = '1' and (month(dt) = " & Month([dt]) & ") and (year(dt) = " & Year([dt]) & ") "))) AS Complete
FROM TB
GROUP BY Format([dt],"mmm-yyyy"))  AS Q1

ORDER BY Y, M;
โพสต์นี้ได้รับคำขอบคุณจาก: Peerapach

2
ถ้าแค่เอามาเพื่อดู หรือออกรายงาน ก็ให้ทำ Linked-Table จากเทเบิลที่ต้องการของทั้ง 3 ไฟล์  เข้ามาในไฟล์ที่สร้างฟอร์ม  สร้าง UNION Query ที่เป็นการรวมเรคอร์ดจากเทเบิลเหล่านั้นเข้าด้วยกัน แล้วเอาคิวรี่นี้ไปใช้เป็น RecordSource ของฟอร์ม/รายงานก็ได้ครับ  ตย. https://www.thai-access.com/topic_post.asp?CategoryID=1&TopicID=475
โพสต์นี้ได้รับคำขอบคุณจาก: buakird

3
ผมแนะนำว่าควรมีการบันทึกในใบคืนของ ว่าเป็นการคืนมาจากการยืมเลขที่อะไรด้วย (สมมุติชื่อฟิลด์คือ Loan_no) ถ้าเพิ่มได้ คิวรี่นี้ก็เปลี่ยนเงื่อนไขที่ WHERE เป็น (Asset ถูกยืมไปแล้ว) และ (ไม่พบใบคืนที่มีเลขที่ยืมอันเดียวกันนี้ปรากฏอยู่)

WHERE ((Tb_Assets.Asset_Status=False)
     AND NOT EXISTS (SELECT Tb_Return.Loan_No FROM Tb_Return WHERE Tb_Return.Loan_No = Tb_Loan.Loan_No);



หรือไม่ต้องเช็คสถานะของ Asset เลยก็ได้ เป็น

WHERE NOT EXISTS (SELECT Tb_Return.Loan_No FROM Tb_Return WHERE Tb_Return.Loan_No = Tb_Loan.Loan_No);

เพราะตามตรรกะของระบบแล้ว แน่นอนว่าของที่มีใบยืม แต่ไม่มีเลขที่ใบยืมอยู่ในใบคืนใดๆเลย ก็คือของที่ Asset_Status เป็น False นั่นเอง แต่มัน **อาจจะ** ทำให้การค้นหาช้าลงเมื่อมีข้อมูลการยืม/คืนอยู่เป็นจำนวนมาก (ที่บอกว่า อาจจะ เพราะถ้าอยากทราบจริงๆ ต้องขุดลึกลงไปว่าตัวจัดการคิวรี่ (Query Optimizer) มันฉลาดหรือทื่อๆแค่ไหนกับคำสั่งคิวรี่นั้นๆ)
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

4
วางทุกตารางลงใน Query Design View   เลือกฟิลด์ที่ต้องการแสดง   แล้วเชื่อม (Join) จากตาราง 1 ไปทุกตารางด้วยฟิลด์ a และ b     ในแต่ละเส้นเชื่อม ให้ดับเบิ้ลคลิกที่เส้นเชื่อม จะมีไดอะล็อกซ์คุณสมบัติแสดงออกมา ให้เลือกข้อที่ เลือกทุกเรคอร์ดจากตาราง 1 (Include all records from '1')
โพสต์นี้ได้รับคำขอบคุณจาก: ph.autom

5
ห้อง MS Access / : ส่ง SMS จาก ms access
« เมื่อ: 25 ก.ค. 62 , 15:53:06 »
คำถามน่าสนใจ ผมเลยลองเล่นดู แนวคิดคือหาโปรแกรมที่ส่ง SMS จาก PC ไปมือถือผ่าน WiFi  ก็พบว่ามีหลายๆโปรแกรม อย่างเช่นจากบทความนี้ https://techwiser.com/send-sms-from-computer/ link ผมลองเลือกโหลด AirDroid บนฝั่งมือถือ และใช้ AirDroid ที่รันบนเวปเป็นตัวที่อยู่ฝั่ง PC (เหมือนว่าจะมีโปรแกรมที่รันภายใต้วินโดว์โดยตรงด้วยเช่นกัน) ผลก็คือสามารถคีย์ SMS จากฝั่ง PC ส่งไปมือถือและส่งออกไปปลายทางผู้รับได้ในขั้นตอนเดียว

สิ่งที่คุณต้องหาต่อไปก็คือ ทำยังไงให้ Access ก็อปปี้ เบอร์มือถือ และ SMS เข้าคลิปบอร์ดทีละครั้ง แล้วเลือกหน้าต่าง AirDroid ที่เปิดอยู่  แล้ว paste สิ่งเหล่านั้นลงไป  พอ paste ทุกอย่างเสร็จ ก็คลิกปุ่ม Send เพื่อส่งอีกที

หมายเหตุ :
1. ผมคิดว่าคงมีข้อจำกัดในการใช้งาน AirDroid แบบฟรี น่าจะเป็นที่จำนวนหรือปริมาณในการส่ง ลองศึกษาดูครับ
2. ถ้าส่งไม่ได้ ไม่ว่าจะติดขัดขั้นตอนไหน ไม่รู้ว่าจะตรวจสอบได้ยังไง
3. ถ้าส่งปริมาณมากๆ อาจส่งเข้าเวปที่ให้บริการส่ง SMS โดยตรง จะถูกกว่าหรือไม่

หวังว่าพอจะเป็นแนวทางได้บ้าง
โพสต์นี้ได้รับคำขอบคุณจาก: chai

6
ห้อง MS Access / : สอบถามเรื่อง relationships
« เมื่อ: 18 ก.ค. 62 , 17:04:43 »
ถ้า tb_process_detail และ _detail_1 เป็นข้อมูลจากเทเบิลเดียวกัน แต่แยกเพราะมีสถานะอะไรบางอย่างแตกต่างกัน ก็ให้เอาสถานะนั้นสร้างเป็นฟิลด์นึงใน tb_process และ/หรือ tb_process_detail แล้วไม่ต้องแยกเทเบิล จะได้ไม่ยุ่งยากครับ
โพสต์นี้ได้รับคำขอบคุณจาก: morzor61

7
...
...
...
        Me.RecordSource = strsearch
        If Me.Recordset.RecordCount <= 0 Then
            Msgbox .....
        End If
...
...
...
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

8
ไม่เคยใช้นะครับ แต่น่าจะเลือก Enable Automatic Reconnect ในรูป 5.4 https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-dsn-windows-5-2.html link
โพสต์นี้ได้รับคำขอบคุณจาก: chai, nonc31

9
สั่งคำสั่ง  DoCmd.OpenReport "ชื่อรายงาน",,,"เงื่อนไขเรคอร์ดที่ต้องการในรายงาน"

เงื่อนไขที่ว่าก็เขียนเหมือนกับ WHERE clause ใน SQL statement โดยที่ถ้ามีชื่อฟิลด์ ก็ต้องเป็นชื่อฟิลด์ที่ได้จาก Query ที่เป็น Record Source ของรายงานด้วย กรณีนี้ก็คือ

DoCmd.OpenReport "ชื่อรายงาน",,,""Loan_No = '" & Me.txt_LoanNo & "'"

ดังนั้นเราก็จะเลือกพิมพ์เฉพาะการยืมที่ปรากฏบนหน้าฟอร์มรายการเดียวเท่านั้น

หรืออีกวิธีก็คือ บรรทัดเงื่อนไข (Criteria) ภายใน Query เองสำหรับคอลัมน์ Loan_No ก็ให้เขียนเป็น Forms![Frm_Loan]![txt_LoanNo] แต่ก็หมายความว่า เมื่อไหร่ที่คิวรี่ตัวนี้ทำงาน ฟอร์มที่ว่านั้นก็ต้องเปิดอยู่และมีค่า Loan_No ไว้ด้วย ไม่งั้นก็จะเกิด error ได้ และวิธีนี้ก็สั่งเปิดรายงานด้วยคำสั่งสั้นๆว่า DoCmd.OpenReport "ชื่อรายงาน" เท่านั้นเอง
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

10
เมื่อเก็บเป็น Path และไฟล์ภาพก็อยู่ที่เซิร์ฟเวอร์ แต่เนื่องจากโปรแกรมที่ทำงานจะอยู่ที่แต่ละเครื่อง  การเขียน Path จึงมีรูปแบบเป็น Path ที่แต่ละเครื่องอ้างไปยังไฟล์ภาพบนเซิร์ฟเวอร์ ไม่ใช่ Path ที่อ้างจากฐานข้อมูลบนเซิร์ฟเวอร์ไปยังไฟล์ภาพบนเซิร์ฟเวอร์เอง ดังนั้น Path ที่ถูกต้องก็จะเป็นรูปแบบ

\\ชื่อเซิร์ฟเวอร์\ชื่อซับโฟลเดอร์(ถ้ามี)\......\ชื่อไฟล์  เช่น \\ServEngineer\Data\Assets\Pic\NutBt0500.jpg
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

11
คุณจะดึงฟิลด์ Attachment มาจากคิวรี่แล้วมากำหนดให้ Attachment Control โดยตรงอย่างนี้ไม่ได้  แต่เราสามารถเอามาเป็น Control Source ของ  Attachment Control ได้ ดังนั้นเราจะสร้าง Attachment Control ตัวนึง (ชื่อว่า A) ใส่ลงฟอร์มเปล่า (ชื่อว่าฟอร์ม F) แล้วเอา F มาใส่เป็น Sub Form control (ชื่อ SF) ใน ฟอร์มการยืมอีกที ทีนี้เมื่อใดที่มีการเลือก Asset เราก็จะสร้าง Record Source ของ SF เป็น SQL SELECT statement ที่ดึงเอาเฉพาะฟิลด์ Attachment ที่เก็บรูปภาพตาม Asset_ID ที่เลือก  ดังนั้นภาพก็จะแสดงออกมา เท่านี้เองครับ

โค้ดให้ใส่ไว้ใน Private Sub cbo_Loanasset_AfterUpdate() , ใน Private Sub Form_Current() และใน Private Sub Form_Undo(Cancel As Integer) ด้วย
โค๊ด: [Select]
    If IsNull(Me.cbo_Loanasset) Then
        Me.SF.Form.RecordSource = ""
    Else
        Me.SF.Form.RecordSource = "select Asset_Photo from tb_Asset where Asset_ID = " & Cstr(Me.cbo_Loanasset)
    End If

นอกจากนี้ให้กำหนด property เหล่านี้เอาไว้ด้วย

สำหรับ A
Control Source เป็น Asset_Photo
Enabled   No

สำหรับ F
Record Selectors   No
Naviagtion Buttons   No
Dividing Lines      No
Scroll Bars         Neither
Recordset Type      Snapshot

ที่เหลือก็ปรับขนาดกรอบรูปเท่านั้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

12
เลือก Data Entry property ของฟอร์มเป็น Yes เท่านี้เองครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

13
แย่แล้วผม ทำไมผิดอย่างนี้    DoCmd.SetWarnings False หรือ True ไม่ต้องมีเครื่องหมาย = ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

14
ถ้าได้ก็อัพโหลดโปรแกรมมาครับ หรือไม่ก็ค่อยๆ comment หรือตัดไปทีละบรรทัด ดูว่าเมื่อไหร่ไม่มี error ก็แปลว่าบรรทัดนั้นเป็นปัญหาครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

15
ให้ลองเปลี่ยนชื่อ Loan_No, Loan_Date, Employee_ID, Asset_ID ไปเป็น  Me.ชื่อเท็กซ์บ็อกซ์หรือคอมโบบ็อกส์  ที่ตรงกันบนฟอร์มดูครับ  ถ้ายังไม่ได้อีก ก็ให้ลอง Compact and Repair Database ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

16
อ้างถึง
ขึ้นว่า Invalid SQL Statement ครับ
แปลว่า SELECT statement นั้นมีอะไรผิดแล้ว เช็คดีๆครับว่าชื่อฟิลด์ ชื่อเทเบิล ถูกต้องหรือไม่

อ้างถึง
ใน Tb_Assets นั้นตรงฟิลด์ที่เป็น Yes/No มันเอาติ๊กออกหมดเลยครับกลายเป็น No หมดเลย
ในคำสั่ง DoCmd.RunSQL "UPDATE ... เช็คชื่อฟิลด์ เทเบิล และคอมโบบ็อกส์ว่าถูกต้องหรือไม่

อ้างถึง
มันแจ้งว่าเกิด Debug ใน Code
มันบอกว่า error อะไรครับ เอาข้อความมาแสดงหน่อย หรือว่าคุณแบ่งโค้ดเป็น 2 บรรทัด  ถ้าใช่ ให้แก้ไขให้อยู่ในบรรทัดเดียวกันนะครับ

สุดท้าย ให้คลิกที่เมนู Debug และ Compile ดูว่ามีข้อผิดพลาดอะไรแสดงออกมาหรือไม่

ปล.คงอีกหลายชั่วโมงผมถึงเข้ามาตอบอีกทีครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

หน้า: [1] 2 3 4 ... 11