1
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.
หน้า: [1]
2
ห้อง MS Access / : จะกำหนด shortcut ที่ desktop ถ้ามี msaccess มากกว่า 1 Version
« เมื่อ: 01 พ.ย. 64 , 10:17:26 »
ลง Access เพียงเวอร์ชั่นเดียวก็พอครับ 2013 กับ 2019 แทบจะไม่ต่างกันเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
3
ห้อง MS Access / : อยากให้แสดงตัวเลข เศษที่่เหลือรวมในงวดสุดท้าย และ วันที่ตามกำหนดดิวครับ
« เมื่อ: 01 เม.ย. 64 , 10:36:50 »
ถ้าเท่ากันทุกงวดงั้นโค๊ดจะเป็นแบบนี้


โค๊ด: [Select]
Private Sub Command0_Click()
Dim rs As DAO.Recordset
Dim i As Integer
Dim getMonth As String
Dim getYear As String
Dim getDate As String
Dim getTotal As Long
Dim getPay As Long
Dim getPayMonth As Long
Dim getLastpay As Long
Dim getInterest As Long
Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
getTotal = 98000 'ส่วนที่จะสร้าง textbox ระบุยอดเงิน
getDate = "5" 'ส่วนที่จะสร้าง textbox กำหนดวันที่ชำระ
getMonth = DatePart("m", Date)
getYear = DatePart("yyyy", Date)
getPay = (getTotal) / 36
getPayMonth = getTotal
Do Until i > 36
For i = 1 To 36
getMonth = getMonth
If getMonth > 12 Then
getYear = getYear + 1
getMonth = "1"
Else
getYear = getYear
End If
'---------------เพิ่มเรคคอร์ดใหม่--------------
rs.AddNew
'ใส่ชื่อฟิลด์ที่ต้องการ และใส่ค่า โดยกำหนด Data Type ให้ถูกต้อง ถ้าเป็น Text ต้องมี "" คล่อม ถ้าเป็นตัวเลขไม่ต้องมี
rs!รหัส = "001"
rs!ชื่อสินค้า = "งวดที่ " & i
rs!วันครบกำหนด = CDate(getDate & "/" & getMonth & "/" & getYear)
If i = 36 Then
rs!จำนวน = getPayMonth
Else
rs!จำนวน = getPay
End If
rs!ดอกเบี้ย = (((getTotal * 15) / 100) / 12)
rs.Update
getMonth = getMonth + 1
getPayMonth = getPayMonth - getPay
Next i
Loop
'-----------------------------------------
rs.Close: Set rs = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
4
ห้อง MS Access / : อยากให้แสดงตัวเลข เศษที่่เหลือรวมในงวดสุดท้าย และ วันที่ตามกำหนดดิวครับ
« เมื่อ: 31 มี.ค. 64 , 15:54:47 »5
ห้อง MS Access / : ต้องการ update ชื่อพนักงาน ข้อมูลเข้าอีกตารางตามจำนวนที่กำหนด โดยเรียบลำดับ
« เมื่อ: 30 ก.ค. 63 , 15:05:16 »
ลองดูตัวอย่างนี้นะครับน่าจะได้ข้อมูลแบบที่คุณต้องการนะ

ผมใช้การตรวจสอบโดยการนับจำนวนครั้งของการ Append ข้อมูลลงไปในตาราง customer
โดยเช็คว่าถ้า Employee ไหน asign = 0 แล้วก็ให้ลบออกไป ไม่นำไป Append ต่อครับ
โค้ดของคิวรี่ในการเช็คจำนวนการAppend ข้อมูล
โดยจะต้องมีฟอร์มที่มีปุ่มกดให้โค้ดทำงานโดยมีโค้ดประมาณนี้ครับ
ผมใช้การตรวจสอบโดยการนับจำนวนครั้งของการ Append ข้อมูลลงไปในตาราง customer
โดยเช็คว่าถ้า Employee ไหน asign = 0 แล้วก็ให้ลบออกไป ไม่นำไป Append ต่อครับ
โค้ดของคิวรี่ในการเช็คจำนวนการAppend ข้อมูล
โค๊ด: [Select]
SELECT tbl_Job.Employee_Name, Count(tbl_Customer.Employee_Name) AS CountCTM, tbl_Job.assign, Nz([assign],0)-Nz([CountCTM],0) AS Remaining
FROM tbl_Job LEFT JOIN tbl_Customer ON tbl_Job.Employee_Name = tbl_Customer.Employee_Name
GROUP BY tbl_Job.Employee_Name, tbl_Job.assign;
โดยจะต้องมีฟอร์มที่มีปุ่มกดให้โค้ดทำงานโดยมีโค้ดประมาณนี้ครับ
โค๊ด: [Select]
Private Sub Command0_Click()
Dim rst As DAO.Recordset
Dim IntAssign As Integer
Dim sql As String
Dim I As Long
Set rst = CurrentDb.OpenRecordset("tbl_Job", dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
IntAssign = rst!Assign
For I = 1 To IntAssign
If IntAssign = rst!Assign Then
sql = "INSERT INTO tbl_Customer ( Employee_Name, Cust_Name ) SELECT QryCheckRemaining.Employee_Name, 'XXXX' AS Expr1 FROM QryCheckRemaining WHERE (((QryCheckRemaining.Remaining)>0));"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
End If
Next
rst.MoveNext
Loop
DoCmd.SetWarnings True
rst.Close
Set rst = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
6
ห้อง MS Access / : ทำฟอร์มแบบ popup ต้องการให้ popup มีขนาด เท่ากับที่เราต้องการกำหนด
« เมื่อ: 23 ก.ค. 63 , 18:45:03 »
ตัวอย่างไฟล์ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
7
ห้อง MS Access / : สอบถามให้โปรแกรมตรวจสอบตาราง (table) ก่อนลบออกจากระบบ
« เมื่อ: 15 พ.ค. 63 , 08:30:59 »รบกวนสอบถามอาจารย์ครับ ผมต้องการทำ ปุ่ม เพื่อจะลบ table ชื่อ table1 ออกจากฐานข้อมูล อยากให้โปรแกรมตรวจสอบก่อนว่ามีตาราง table1 อยู่หรือไม่ ถ้าไม่มี ให้ข้ามไปทำขั้นตอนต่อไป ถ้ามีให้ลบก่อน แล้ว ทำตามขั้นอื่นตอนต่อไป ขอบคุณครับลองทดสอบดูนะครับ
Private Sub Command0_Click()
call CheckTableToDelete
End Sub
Sub CheckTableToDelete
Dim tbd As TableDef
Dim msg As String
For Each tbd In CurrentDb().TableDefs
If tbd.Name = "table1" Then
msg = MsgBox("ตรวจพบตาราง Table1" & vbCrLf & "คุณต้องการลบตาราง ? ", vbQuestion + vbYesNo, "ระบบสอบถาม")
If msg = vbYes Then
DoCmd.DeleteObject acTable, "table1"
End If
End If
Next tbd
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
8
ห้อง MS Access / ขอปรึกษา Code กรอกข้อมูลจากที่เดียวแต่ให้บันทึกลงหลายๆ Record ที่มี ID เหมือนกัน
« เมื่อ: 10 ธ.ค. 62 , 21:15:49 »
สวัสดีครับ จะรบกวนปรึกษาครับ Code ครับ โดยผมต้องการทำ Form แก้ไขประวัติพนง.โดยทำ Form ใหญ่ 1 Form และ SubForm ย่อย 2 Subform
1. Subform1(บน) เอาไว้ใช้เปน Selector ตามแต่ละ WorkID
2. Subform2(ล่าง) เอาไว้ใช้แสดงรายละเอียดของจาก SubForm1 ซึ่งการแก้ไขข้อมูล จะแก้ไขผ่าน Subform นี้ครับ
โดยทั้งสอง Subform ใช้ Queries ตัวเดียวกัน
ความต้องการของผมคือ หากกรอก TerminatedDate ที่ Record ใด Record หนึ่ง ก็ให้ค่า TerminatedDate ที่กรอกนั้น ถูก Insert ลงไปยัง Record อื่นๆที่มี ContractorID เดียวกันให้หมด ผมควรจะเขียนโค้ดอย่างไรดีครับ
ปล. โค้ดที่ผมเขียนคือ ตามด้านล่างนี้ครับ ซึ่งไม่ได้ผลเลยครับ
รบกวนทุกท่านด้วยครับ ขอบคุณมากครับ
Private Sub TerminatedDate_Click()
DoCmd.RunSQL "SELECT GenerateID FROM tblWork WHERE GenerateID'" = Me.GenerateID
DoCmd.RunSQL "INSERT INTO tblWork([TerminatedDate])" & _
"Values ('" & Me.TerminatedDate & "');"
End If
End Sub
1. Subform1(บน) เอาไว้ใช้เปน Selector ตามแต่ละ WorkID
2. Subform2(ล่าง) เอาไว้ใช้แสดงรายละเอียดของจาก SubForm1 ซึ่งการแก้ไขข้อมูล จะแก้ไขผ่าน Subform นี้ครับ
โดยทั้งสอง Subform ใช้ Queries ตัวเดียวกัน
ความต้องการของผมคือ หากกรอก TerminatedDate ที่ Record ใด Record หนึ่ง ก็ให้ค่า TerminatedDate ที่กรอกนั้น ถูก Insert ลงไปยัง Record อื่นๆที่มี ContractorID เดียวกันให้หมด ผมควรจะเขียนโค้ดอย่างไรดีครับ
ปล. โค้ดที่ผมเขียนคือ ตามด้านล่างนี้ครับ ซึ่งไม่ได้ผลเลยครับ
รบกวนทุกท่านด้วยครับ ขอบคุณมากครับ
Private Sub TerminatedDate_Click()
DoCmd.RunSQL "SELECT GenerateID FROM tblWork WHERE GenerateID'" = Me.GenerateID
DoCmd.RunSQL "INSERT INTO tblWork([TerminatedDate])" & _
"Values ('" & Me.TerminatedDate & "');"
End If
End Sub

โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
9
ห้อง MS Access / : ต้องการดึงข้อมูลล่าสุดเพียงรายการละ 1 เรคคอร์ด
« เมื่อ: 15 พ.ย. 61 , 11:42:41 »
แบบนี้ได้ไหมครับ อาจจะมีวีธีดีกว่านี้ รอท่านอื่นมาต่อ
มี 2 คิวรี่นะครับ
คิวรี่แรก
SELECT Table1.[เลขที่สัญญา], Max(Table1.[วันที่]) AS MaxOfวันที่, Max(Table1.เวลา) AS MaxOfเวลา
FROM Table1
GROUP BY Table1.[เลขที่สัญญา];
Table 1 คือ ชื่อตารางนะครับ
คิวรี่ที่ 2 ใช้ sub Query
SELECT Table1.*
FROM Table1 INNER JOIN Query1 ON (Table1.เวลา = Query1.MaxOfเวลา) AND (Table1.[วันที่] = Query1.[MaxOfวันที่]) AND (Table1.[เลขที่สัญญา] = Query1.[เลขที่สัญญา]);
มี 2 คิวรี่นะครับ
คิวรี่แรก
SELECT Table1.[เลขที่สัญญา], Max(Table1.[วันที่]) AS MaxOfวันที่, Max(Table1.เวลา) AS MaxOfเวลา
FROM Table1
GROUP BY Table1.[เลขที่สัญญา];
Table 1 คือ ชื่อตารางนะครับ
คิวรี่ที่ 2 ใช้ sub Query
SELECT Table1.*
FROM Table1 INNER JOIN Query1 ON (Table1.เวลา = Query1.MaxOfเวลา) AND (Table1.[วันที่] = Query1.[MaxOfวันที่]) AND (Table1.[เลขที่สัญญา] = Query1.[เลขที่สัญญา]);
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
10
ห้อง MS Access / : กำหนดวันที่ใน Query โดยที่ไม่ต้องเข้ามาแก้สูตรทุก ๆ เดือน
« เมื่อ: 13 พ.ย. 61 , 21:50:18 »
Between IIf(Day(Date())>=3,DateSerial(Year(Date()),Month(Date()),2),DateSerial(Year(Date()),Month(Date())-1,2)) And IIf(Day(Date())>=3,DateSerial(Year(Date()),Month(Date())+1,2),DateSerial(Year(Date()),Month(Date()),2))
ความหมายก็คือ
หาข้อมูลระหว่างวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนนี้, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนที่แล้ว) และวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนหน้า, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนนี้)
ยังไงก็ตาม ถ้าดูตามเงื่อนไขที่คุณบอกมา จะพบว่าข้อมูลของวันที่ 2 จะนำมาหาผลลัพธ์ถ้าวันนี้เป็นวันที่ 2 เอง และแม้วันนี้จะเป็นวันที่ 3 ซึ่งเป็นวันที่เปลี่ยนเงื่อนไข แต่ข้อมูลของวันที่ 2 (เมื่อววาน) ก็ยังถูกนำมาหาผลลัพธ์อยู่ดี ลองพิจารณาดีๆว่าถูกต้องหรือไม่นะครับ
ความหมายก็คือ
หาข้อมูลระหว่างวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนนี้, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนที่แล้ว) และวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนหน้า, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนนี้)
ยังไงก็ตาม ถ้าดูตามเงื่อนไขที่คุณบอกมา จะพบว่าข้อมูลของวันที่ 2 จะนำมาหาผลลัพธ์ถ้าวันนี้เป็นวันที่ 2 เอง และแม้วันนี้จะเป็นวันที่ 3 ซึ่งเป็นวันที่เปลี่ยนเงื่อนไข แต่ข้อมูลของวันที่ 2 (เมื่อววาน) ก็ยังถูกนำมาหาผลลัพธ์อยู่ดี ลองพิจารณาดีๆว่าถูกต้องหรือไม่นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai
หน้า: [1]