แสดงกระทู้

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

หน้า: [1]
1
เรียนเพิ่มเติมครับ
ชุดคำสั่งจะเอาผลลัพท์ค่าแรกของแถวไปเก็บที่ เลขที่สด1 ทุกแถวเลยครับ(เป็นตัวเลขเดียวกันท้งหมด)
ผมต้องการแบบนี้ครับ
เลขที่สด1     ผลลัพท์          รหัส                        ข้อมูล
1                   1            30150144001   30150144000
2                   2            30150144002   30150144000
8                   8            30150144008   30150144000
ผมต้องการเอาผลลัพท์ที่ได้มาเก็บที่ฟิวส์ เลขที่สด1 เพียงกดปุ่มครั้งเดียวครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

2
> ลองจัดชุดคำสั่งเป็นแบบนี้ครับ
DoCmd.SetWarnings False
Dim SQL As String
        SQL = "UPDATE select SET select.เลขที่สด1 =Text188.value"
        DoCmd.RunSQL SQL
        Me.Refresh 'หรือ Me.Recalc
DoCmd.SetWarnings True

> หรืออัพเดทที่ตาราง tb_recuit โดยใช้ WHERE เพื่อกรองข้อมูลที่ต้องการ
.....
        CurrentDb.Execute = "UPDATE tb_recuit SET เลขที่สด1 = "& me.Text188 &" WHERE ฟิวส์ = '" & มีค่าเท่ากับ & "'", dbFailOnError
        Me.Recalc
.....
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

3
โจทย์เดียวกันกับกระทู้นี้นะครับ https://www.thai-access.com/index.php?topic=1614.msg7017#msg7017
คำตอบ
โค๊ด: [Select]
Private Sub Select_AfterUpdate()
    CurrentDb.Execute "UPDATE RssmNew_filter SET complete = " & Me.Select & " WHERE เลขที่ใบเบิก = '" & Me.IDNumber & "'", dbFailOnError
    Me.Recalc
End Sub

ชุดคำสั่งที่จะนำไปใช้ก็แก้ให้ตรงกับของท่านดังนี้
Private Sub "ชื่อปุ่ม Input"_Click()
   RssmNew_filter--> ชื่อตารางหรือคิวรี่ที่ซัพฟอร์มดึงมา
   Me.IDNumber--> ชื่อกล่องข้อมูลบนฟอร์มหลักที่ใช้กรองข้อมูลซัพฟอร์ม(จากภาพท่านกรองจากกล่อง Iso No. ใช่หรือไม่?)
เลขที่ใบเบิก--> ชื่อฟิวล์ในตารางซัพฟอร์มที่รับคำสั่งกรองมาจากข้อบน ^^^^^
Me.Select--> me.cmb_package(ชื่อกล่องที่ต้องการดึงบนหน้าฟอร์ม)
complete--> j_testloop(ชื่อฟิวล์ในตารางที่ต้องการให้นำข้อมูลมาวาง)
End Sub

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

4
ถ้าหากจะใช้การตัดวันที่ ที่ผ่านมาออกไปแสดงเฉพาะวันที่ปัจจุบันเป็นต้นไปยังไม่เคยทำครับ

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

Private Sub txtDatePick_AfterUpdate()
If Me.txtDatePick < Date() Then
MsgBox "ไม่สามารถเลือกวันที่ย้อนหลังได้", vbCritical, "แจ้งเตือน"
Me.Text0 = Null
End If
End Sub

ถ้าผมตอบก่อนจะบอกว่า"กรุณาเลือกวันที่ปัจจุบันหรืออนาคต"นะนี่ :shout:
โค๊ด: [Select]
Private Sub Text20_AfterUpdate()
    If Me.Text20 < Date Then
         MsgBox "กรุณาเลือกวันที่ปัจจุบันหรืออนาคต"
    End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

5
update นะคะ

ตอนนี้แก้ได้แล้วค่ะ เรื่องของเรื่องเนี่ย เหมือนว่าเวลาคำนวณมันจะมีช่องที่เป็น 0 อยู่ เพราะคำนวณพร้อมกัน แล้วก่อนหน้านี้มีโค้ดให้ save record ก่อนค่ะ ทำให้เวลาsave ไปแล้วค่าตัวอื่นมันรีเซ็ทใหม่มันเลยกลายเป็น 0 แล้ว 0 เนี่ยมันก็เอามาหารไม่ได้มันเลยขึ้น error ค่ะ ซึ่งวิธีแก้นะคะ ก็คือต้องลำดับcode ใหม่ ให้โปรแกรมมันคำนวณให้เสร็จก่อนแล้วค่อยsave ค่ะ เพราะที่มันจะได้ไม่เอา 0 มาหาร  :zzz:

ยังไงก็ขอบคุณ คุณ PNR มากนะคะที่มาตอบ ได้คิดอะไรหลายอย่างเลยค่ะ  :fake smile:
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

6
เพิ่มเป็นแบบนี้ครับ
โค๊ด: [Select]
Private Sub Combo0_AfterUpdate()
If Me.Combo0 = "1" Then
Me.Text1.Locked = False
Me.Text1 = "0"
Me.Text2.Locked = False
Me.Text2 = "0"
Me.Text3.Locked = False
Me.Text3 = "0"
Me.Text4.Locked = True
Me.Text4 = Null
Me.Text5.Locked = True
Me.Text5 = Null
Me.Text6.Locked = True
Me.Text6 = Null
ElseIf Me.Combo0 = "2" Then
Me.Text1.Locked = False
Me.Text1 = "0"
Me.Text2.Locked = False
Me.Text2 = "0"
Me.Text3.Locked = False
Me.Text3 = "0"
Me.Text4.Locked = False
Me.Text4 = "0"
Me.Text5.Locked = False
Me.Text5 = "0"
Me.Text6.Locked = False
Me.Text6 = "0"
ElseIf Me.Combo0 = "3" Then
Me.Text1.Locked = False
Me.Text1 = "0"
Me.Text2.Locked = False
Me.Text2 = "0"
Me.Text3.Locked = True
Me.Text3 = Null
Me.Text4.Locked = True
Me.Text4 = Null
Me.Text5.Locked = True
Me.Text5 = Null
Me.Text6.Locked = True
Me.Text6 = Null
Else
Me.Text1.Locked = True
Me.Text1 = Null
Me.Text2.Locked = True
Me.Text2 = Null
Me.Text3.Locked = True
Me.Text3 = Null
Me.Text4.Locked = True
Me.Text4 = Null
Me.Text5.Locked = True
Me.Text5 = Null
Me.Text6.Locked = True
Me.Text6 = Null
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

7
DAO.Recordset คือการอ้างถึงคลาสที่ชื่อ Recordset ในไลบรารี่ DAO (จะไม่เขียน DAO. ก็ได้ถ้า 1. เราแน่ใจว่าเรามีคลาสชื่อ Recordset และชื่อนี้ไม่ซ้ำกับคลาสอื่นในไลบรารี่ตัวอื่นในระบบเรา หรือ 2.มีซ้ำในไลบรารี่อื่นๆด้วย แต่เราอ้างถึงไลบรารี่ลำดับแรกที่พบ ซึ่งเราก็ต้องมั่นใจด้วยว่าลำดับของไลบรารี่เรียงถูกต้องแล้ว)

Dim RST As DAO.Recordset  เป็นการสร้างตัวแปรออปเจค RST ที่จะมีคุณสมบัติตามคลาส Recordset

CurrentDb.OpenRecordset("tb_newmember") ให้ชุดเรคอร์ดที่ได้จากเทเบิล tb_newmember และเทเบิลนี้อยู่ในฐานข้อมูลที่โค้ดเรากำลังทำงาน

Set RST = CurrentDb.OpenRecordset("tb_newmember") ให้ตัวแปรออปเจค RST ชี้ไปยังชุดเรคอร์ดที่ได้มาจากคำอธิบายข้างบน

RST.AddNew เป็นเมธอดที่บอกให้ระบบรู้ว่าเราต้องการให้เตรียมพื้นที่สำหรับเรคอร์ดใหม่ในชุดเรคอร์ดในตัวแปรออปเจค RST

RST.Update เป็นเมธอดที่สั่งให้ตัวแปรออปเจค RST เขียนเรคอร์ด กรณีนี้คือเรคอร์ดในพื้นที่ ที่ได้จาก RST.AddNew

Set RST = Nothing บอกให้ตัวแปรออปเจค RST เลิกชี้ไปยังออปเจคใดๆที่มันเคยชี้อยู่
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

8
สวัสดีครับ อยากทราบความหมายของโค๊ด
กระผมได้ก็อป โค๊ดนี้มาใช้ แต่ยังไม่เข้าใจในส่วนที่ผมทำสีแดง

Private Sub Bnt_Add_Click()
Dim RST As DAO.Recordset บางที่ก็ใช้ database
Set RST = CurrentDb.OpenRecordset("tb_newmember")
RST.AddNew
RST("เลขบัตรปชช") = Me.T_เลขบัตรปชช
RST("คำนำหน้า") = Me.T_คำนำหน้า
RST("ชื่อ") = Me.T_ชื่อ
RST("สกุล") = Me.T_สกุล
RST.Update
Set RST = Nothing

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

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

10
น่าจะได้นะครับ มันจะไปเช็คค่า ContractorID จากคิวรี่ นั้นและ อัพเดท Field TerminatedDate ตาม  ContractorID ครับ
แต่ TerminatedDate และ WorkID ต้องเชื่อมกับตารางไรตารางนึงด้วยนะครับ

โค๊ด: [Select]
Private Sub TerminatedDate_AfterUpdate()
Me.Dirty = False
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE qryWork SET qryWork.TerminatedDate = [forms]![frmEditWork]![TerminatedDate] WHERE (((qryWork.ContractorID)=[forms]![frmEditWork]![ContractorID]));", dbFailOnError
DoCmd.SetWarnings True

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

11
อ้างถึง
ความต้องการของผมคือ หากกรอก TerminatedDate ที่ Record ใด Record หนึ่ง ก็ให้ค่า TerminatedDate ที่กรอกนั้น ถูก Insert ลงไปยัง Record อื่นๆที่มี ContractorID เดียวกันให้หมด ผมควรจะเขียนโค้ดอย่างไรดีครับ

แก้ไขใหม่
น่าจะเป็น

โค๊ด: [Select]
Private Sub TerminatedDate_AfterUpdate()
Me.Dirty = False
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE tblWork SET tblWork.TerminatedDate = [forms]![frmEditWork]![TerminatedDate] WHERE (((tblWork.ContractorID)=[forms]![frmEditWork]![ContractorID]));", dbFailOnError
DoCmd.SetWarnings True
End Sub

tblWork คือตารางที่เราจะอัพเดท By ContractorID ครับ
วิธีนี้ ถ้า ContractorID เดียวกัน ก็จะอัพเดทวันที่ให้ทั้งหมดทุกแถวครับ ไม่สนว่าจะมี WorkID กี่ตัวครับ

ขอบคุณมากครับ แต่ผมใช้ Queries ชื่อ qryWork เป็น Record Source ของ Form frmEditWork
ถ้าผมเปลี่ยนจาก tblWork เปน qryWork ได้ไหมครับ เพราะผมใช้ Queries ในการ Generate ContractorID ขึ้นมาครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

12
อ้างถึง
ความต้องการของผมคือ หากกรอก TerminatedDate ที่ Record ใด Record หนึ่ง ก็ให้ค่า TerminatedDate ที่กรอกนั้น ถูก Insert ลงไปยัง Record อื่นๆที่มี ContractorID เดียวกันให้หมด ผมควรจะเขียนโค้ดอย่างไรดีครับ

แก้ไขใหม่
น่าจะเป็น

โค๊ด: [Select]
Private Sub TerminatedDate_AfterUpdate()
Me.Dirty = False
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE tblWork SET tblWork.TerminatedDate = [forms]![frmEditWork]![TerminatedDate] WHERE (((tblWork.ContractorID)=[forms]![frmEditWork]![ContractorID]));", dbFailOnError
DoCmd.SetWarnings True
End Sub

tblWork คือตารางที่เราจะอัพเดท By ContractorID ครับ
วิธีนี้ ถ้า ContractorID เดียวกัน ก็จะอัพเดทวันที่ให้ทั้งหมดทุกแถวครับ ไม่สนว่าจะมี WorkID กี่ตัวครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

13
สวัสดีครับ จะรบกวนปรึกษาครับ 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

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

14
ขอบคุณอาจารย์ที่ให้คำแนะนำครับ ถึงตอนนี้ผมยังนึกไม่ออกเลยครับ ว่าจะหาฟิวด์ไหนเป็น pimary key ร่วม เนื่องจากแต่ละฟิวด์มีโอกาศซ้ำกันมากกว่า1ทั้งหมด ส่วนการกำหนดฟิลด์หมายเลขบรรทัดคือยังไงอะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Somsak472

15
ปกติในระบบงาน ทุกเทเบิลจะมีการกำหนดฟิลด์ที่เป็น Primary Key เอาไว้ ระบบฐานข้อมูลจะไม่ยอมให้ค่าในฟิลด์เหล่านี้ซ้ำกัน  Primary Key อาจประกอบไปด้วยหลายฟิลด์ก็ได้  แต่ถ้ามี Primary Key อยู่แล้ว ก็กำหนด Key อื่นๆเพิมเติมก็ได้ และกำหนด Unique property ของ Key นั้นเป็น No หรือ Yes เพื่อให้ค่าในฟิลด์ซ้ำกันหรือไม่ซ้ำกันเหมือนคุณสมบัติของ Primary Key ก็ได้  (Key เหล่านี้รวมๆกันจะอยู่ในหมวดที่ Access เรียกว่า Indexes) 

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

หน้า: [1]