แสดงกระทู้

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 ... 6 7 8 [9] 10 11 12 ... 19
145
อ้างถึง
txt_LoanNo = "TSD" & Format([txt_LoanDate], "yymm") & Right("000" & DCount("[Loan_No]", "[Tb_Loan]", "Left([Loan_No],4) = Format([txt_LoanDate],'yymm')") + 1, 3)

ใช่ครับ โค้ดข้างบนนี้จะเริ่มให้ค่า 1 เมื่อเป็นเดือนใหม่ ถ้าต้องการให้ +1 ในปีนั้นไปเรื่อยๆจนกว่าจะเป็นปีใหม่ ก็ต้องเป็น
อ้างถึง
txt_LoanNo = "TSD" & Format([txt_LoanDate], "yymm") & Right("000" & DCount("[Loan_No]", "[Tb_Loan]", "Left([Loan_No],2) = Format([txt_LoanDate],'yy')") + 1, 3)
แต่ผมว่าดูแปลกๆไม่สัมพันธ์กับเลขหลัง TSD หรือเปล่า เพราะพอเดือนใหม่ เลขหลัง TSD ก็เป็น ปีและเดือน ถัดไป แต่เลขรันนิ่งยังเป็นเลขต่อจากเดือนที่แล้ว เช่น ในเดือน 8 มีเลขรันจาก TSD1908001 ถึง TSD1908123 แต่เลขแรกของเดือน 9 เป็นเลข TSD1909124  แต่ไม่ว่ายังไงก็ตาม การใช้ DCount ค่อนข้างไม่ถูกต้อง เพราะมันเป็นการนับจำนวน อย่างเดือน 8 มีเลขที่สมมุติข้างบน  ถ้าเรายังอยู่ในเดือน 8 และมี 1 เรคอร์ดที่ถูกลบไป   พอสร้างเลขต่อไป  Dcount ก็จะนับได้ทั้งหมดเหลือ 122 เลข พอบวก 1 ก็จะได้เลขถัดไปเป็น TSD1908123 ซึ่งซ้ำกับเลขเดิมแน่ๆ

จริงๆ รูปแบบที่ต้องการเป็นอย่างไร และพอขึ้นเดือนต่อไปจะได้เป็นอะไร ยกตัวอย่างให้เห็นเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

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

147
auto run ของคุณคือฟิลด์ที่มีข้อมูลเป็นประเภท Autonumber หรือว่าคุณเขียนโค้ดเพื่อสร้างเลข Loan No. เอาเองครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

148
ผมไม่เคยใช้นะ ลองดูแล้วกันครับ  https://www.automateexcel.com/vba/code-formatter/
โพสต์นี้ได้รับคำขอบคุณจาก: chai

149
ห้อง MS Access / : Access + mysql แสดงข้อความ #DELETE
« เมื่อ: 19 ส.ค. 62 , 17:09:01 »
https://www.thai-access.com/index.php?topic=525.msg2340
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess

150
- คิวรี่นี้ซับซ้อนเสียหน่อย ถ้าเขียนจริงๆคงจะเป็น 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;
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa, Peerapach

151
https://www.thai-access.com/index.php?topic=225.0
โพสต์นี้ได้รับคำขอบคุณจาก: raksikanch

152
สร้างเป็น Relationship ด้วยครับ เพราะจะได้ประโยชน์โดยอัตโนมัติคือ จะป้อนเลขที่ใบยืมลงในใบคืนได้ เลขยืมนั้นต้องมีอยู่จริงแล้ว และจะไม่สามารถลบใบยืมได้ถ้าเลขที่ใบยืมยังปรากฏอยู่ในใบคืนด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

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

154
ผมแนะนำว่าควรมีการบันทึกในใบคืนของ ว่าเป็นการคืนมาจากการยืมเลขที่อะไรด้วย (สมมุติชื่อฟิลด์คือ 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

155
ห้อง MS Access / : Import excel file แบบมีเงื่อนไข
« เมื่อ: 04 ส.ค. 62 , 10:28:03 »
Import เข้ามาทุกบรรทัดลงในเทเบิลชั่วคราว T1  แล้วสั่ง UPDATE SQL statement ข้างล่างเพื่อเอาข้อมูลของคอลัมน์ V ใน T1 ไปใส่ลง V ของเทเบิล T2 ที่มีอยู่ก่อนใน Access อยู่แล้ว  โดยเลือกเฉพาะที่มี ID เหมือนกัน

UPDATE T1 INNER JOIN T2 ON T1.ID = T2.ID SET T2.V = T1.V
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

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

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

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

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

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

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

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

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

161
สั่งคำสั่ง  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

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

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

หน้า: 1 ... 6 7 8 [9] 10 11 12 ... 19