สมัครสมาชิก
 

มีปัญหาในการสร้าง Query กับการสร้าง Form รบกวนหน่อยครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

28 มิ.ย. 62 , 17:22:45
อ่าน 772 ครั้ง

Tonwrp

คือผมจะต้องทำ Software ที่ใช้ในการ ยืม/คืน , ติดตามสถานะ ทรัพย์สินของบริษัทที่มาฝึกงาน
ปัญหาคือผมมีคือ Table Asset ซึ่งประกอบไปด้วย [Asset_ID(PK) ,Category_ID ,Asset Description ,Serial No ,Code No ,Quantity]
Table Category = [Category_ID(PK) ,Categories]
Table Employees = [Employee_ID(PK) ,Employee_Name ,Department ,Region]
Table Customers (Import มาจาก Excel) = [Customer_ID(PK) ,Customer_Name ,Customer_Address]
Table Loan = [Loan_No(PK) ,Loan_Date ,Employee_ID ,Customer_ID ,Asset_ID]
แล้วผมต้องการที่จะบันทึก Record ผมต้องสร้าง Table ใหม่ไหมครับเช่น Table_LoanedItems อะไรทำนองนี้หรือว่าสามารถทำได้ด้วยการสร้าง Query เพื่อให้เป็น Source ในการเก็บ Record (คือผมค่อนข้างมือใหม่และไม่มีความรู้เกี่ยวกับภาษาคอมพ์พิวเตอร์เลย) อยากสอบถามว่าหากต้องการเก็บ Record โดยที่เราจะสามารถรู้ชื่อพนักงาน ชื่อทรัพย์สิน ชื่อลูกค้า เราต้องลาก ตัว ID หรือว่าเราลากแค่ชื่อ หรือว่าลากทั้งสองครับผมยังไม่ค่อยเข้าใจเท่าไหร่ รบกวนด้วยครับ

 

30 มิ.ย. 62 , 00:21:40
ตอบกลับ #1

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

ลองนึกถึงใบเสร็จเวลาเราไปซื้อของในห้าง ที่หัวกระดาษเขาจะพิมพ์ว่าแคชเชียร์คือใคร และเราซึ่งเป็นลูกค้าเป็นใคร ส่วนกลางกระดาษก็จะแสดงรายละเอียดสินค้าว่าเราซื้ออะไรบ้าง ซึ่งรองรับได้หลายๆรายการ  ถ้าคุณต้องการลักษณะการเก็บแบบนี้ แปลว่านอกจากเทเบิล 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 เข้ามาในคิวรี่ด้วย แล้วสร้างความสัมพันธ์ในคิวรี่เองครับ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

01 ก.ค. 62 , 09:41:57
ตอบกลับ #2

Tonwrp

ลองนึกถึงใบเสร็จเวลาเราไปซื้อของในห้าง ที่หัวกระดาษเขาจะพิมพ์ว่าแคชเชียร์คือใคร และเราซึ่งเป็นลูกค้าเป็นใคร ส่วนกลางกระดาษก็จะแสดงรายละเอียดสินค้าว่าเราซื้ออะไรบ้าง ซึ่งรองรับได้หลายๆรายการ  ถ้าคุณต้องการลักษณะการเก็บแบบนี้ แปลว่านอกจากเทเบิล 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 ได้เกิดจากอะไรครับอาจารย์
« แก้ไขครั้งสุดท้าย: 01 ก.ค. 62 , 10:47:36 โดย Tonwrp »

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

01 ก.ค. 62 , 15:44:41
ตอบกลับ #3

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

ต้องมีทั้ง 2 เทเบิลครับ เพราะมันคือฟิลด์ที่ไว้เชื่อมความสัมพันธ์กันของทั้ง 2 เทเบิล ไม่อย่างนั้น เวลาเราอ่านเรคอร์ดจาก LoanedItems เราจะไม่สามารถโยงไปหาข้อมูลของการยืมเดียวกันนี้ในเทเบิล Loan ได้เลย

จากวิธีที่ผมบอกไป เราไม่ได้สร้างฟอร์มจากคิวรี่ครับ แต่ละฟอร์มสร้างจากแต่ละเทเบิลครับ 

ส่วนคิวรี่ ผมเขียนเอาไว้เพื่ออธิบายถึงประโยชน์ของการสร้าง Lookup ในฟิลด์ต่างๆ เพื่อที่เราจะได้ไม่ต้องดึงเอาเทเบิล Employees, Customers และ Asset เข้ามาในคิวรี่ด้วย ทำให้ดูสะอาดตา ไม่รกรุงรัง  ยกเว้นว่าเราต้องการฟิลด์อื่นๆที่นอกเหนือไปจาก  _Name และ _Description จาก 3 เทเบิลที่ว่านี้ ซึ่งแน่นอนว่าเราต้องดึงเอาเทเบิลนั้นๆมาใส่ในคิวรี่ด้วยครับ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

03 ก.ค. 62 , 09:58:29
ตอบกลับ #4

Tonwrp

ผมอยากทราบว่าการที่ผมจะให้ combobox ของ Asset ในฟอร์มการยืมเนี่ย แสดงเฉพาะ Asset ที่ยังเหลืออยู่ (ตัวที่ถูกยืมจะไม่แสดงใน dropdown) สามารถทำได้อย่างไรบ้างครับ
แล้วถ้าสมมติว่ามีการ Return Asset แล้วให้กลับมาแสดงใน combobox ด้วยหรือว่าผมต้องสร้าง Field ใน Tb_Asset และกำหนด Data Type เป็น Yes/No เพิ่มลงไปแล้วทำการเขียนโค้ดว่าหากถูกยืมจะเป็น No แล้วก็ในฟอร์มการคืนก็เขียนไว้ว่าหากคืนแล้วก็ให้ Status กลายเป็น Yes แล้วเขียนให้ Combobox แสดงแต่ตัวที่เป็น Yes อย่างนี้ได้รึเปล่าครับอาจารย์

 

03 ก.ค. 62 , 11:41:43
ตอบกลับ #5

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

สามารถทำได้ครับ โดยใน Row Source property ก็เขียนคำสั่ง SQL SELECT statement เพื่อคิวรี่เอามาเฉพาะที่ของยังไม่ได้ยืมหรือคืนของมาแล้ว ทีนี้ก็ขึ้นอยู่กับการออกแบบระบบของเราเองว่า จะรู้ได้ยังไงว่า คืนของมาแล้ว อย่างวิธีการที่คุณบอกมาก็เป็นวิธีนึง หรืออาจจะไม่ต้องสร้างฟิลด์ที่ว่านั้น ถ้าคิวรี่จากเทเบิลยืม/คืนมาเปรียบเทียบกันโดยตรงได้เลย (กรณีที่การหาสถานะนั้นซับซ้อนเกินกว่าเขียนทั้งหมดใน SQL เราสามารถเขียนโค้ดเป็น Public Function ใน Module เพื่อหาสถานะ แล้วให้ SQL ก็เรียกใช้ฟังก์ชั่นนี้ก็ได้)

แต่ไม่ว่าจะวิธีไหน เราต้องสั่ง ชื่อคอมโบบ็อกส์.Requery เพื่อให้ SQL ที่เขียนไว้นั้นทำงานอ่านสถานะตอนนั้นมาใหม่ ถ้าชัวร์สุดก็สั่งใน On Enter event ของคอมโบบ็อกส์ครับ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

03 ก.ค. 62 , 15:31:40
ตอบกลับ #6

Tonwrp

ตอนนี้ผมเริ่มเข้าในเรื่อง SQL แล้วครับ
แต่อยากทราบการเขียน Module น่ะครับเผื่อจะนำไปประยุกต์ใช้ได้ ก่อนหน้านี้ที่ผมบอกอาจารย์ว่า ถ้าถูกยืมจะให้ตรง Status เป็น No ใช่มั้ยครับ
แล้วผมจะต้องเขียนอย่างไรเพื่อให้มันเป็น No เท่าที่ผมคิดไว้ตอนนี้คือจะให้โค้ดมันไปอยู่ใน OnClick ของ Save Button

แล้วเราจะเขียนโค้ดอย่างไรครับว่า ตอนที่เรากด คลิกปุ่ม Save ไปแล้ว ให้ Status ของ Asset_ID นั้นๆกลายเป็น No
ผมจะได้นำไปเขียนใน Form ของการคืนด้วยว่าหลังจากที่ Save ไปแล้วจะให้มันกลับไปเป็น Yes

ซึ่งตอนนี้ผมว่าผมเข้าใจเรื่องของให้ combobox แสดงค่า Asset_ID ที่มันเป็น Yes แล้วครับรบกวรอาจารย์สันติสุขช่วยชี้แนะด้วยครับ

« แก้ไขครั้งสุดท้าย: 03 ก.ค. 62 , 16:23:17 โดย Tonwrp »

 

03 ก.ค. 62 , 16:38:09
ตอบกลับ #7

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

1. หน้าฟอร์มที่บันทักการยืมนั้น ตกลงมี sub form หรือไม่
2. โค้ดที่มีใน OnClick ของปุ่ม Save ตอนนี้มีอะไรอยู่บ้าง แล้วออกแบบไว้ว่าจะให้มันทำอะไรบ้าง
3. ปุ่ม Save อยู่บน main form หรือ sub form
4. ถ้าไม่กดปุ่ม Save  แล้วรายการที่ป้อนไปจะเป็นยังไง ?  บันทึกไม่ได้ หรือบันทึกได้แต่ถือว่าไม่เอาไปใช้อ้างอิงในระบบ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

03 ก.ค. 62 , 16:56:08
ตอบกลับ #8

Tonwrp

1. หน้าฟอร์มที่บันทักการยืมนั้น ตกลงมี sub form หรือไม่
2. โค้ดที่มีใน OnClick ของปุ่ม Save ตอนนี้มีอะไรอยู่บ้าง แล้วออกแบบไว้ว่าจะให้มันทำอะไรบ้าง
3. ปุ่ม Save อยู่บน main form หรือ sub form
4. ถ้าไม่กดปุ่ม Save  แล้วรายการที่ป้อนไปจะเป็นยังไง ?  บันทึกไม่ได้ หรือบันทึกได้แต่ถือว่าไม่เอาไปใช้อ้างอิงในระบบ
1.ไม่มี Sub form ครับเนื่องจากทรัพย์สินนั้นจะเป็น Set เป็นกล่องจึงคิดว่าไม่ต้องทำ Sub form
2. Code ที่มีในปุ่ม Save ตอนนี้มีแค่
     Private Sub bt_SaveLoan_Click()
  Dim SavRec As Boolean
  If IsNull(Loan_No) Then
  Msgbox ("Please Put Loan No")
  Elseif IsNull(Loan_Date) Then
  Msgbox ("Please Put Loan Date")
  Elseif IsNull(Employee_ID) Then
  Msgbox ("Please Put Employee Name")
  Else
   DoCmd.RunCommand (acCmdSaveRecord)
  SavRec = True
  End If
  End Sub     
              นี่ครับที่มีในปุ่มตอนนี้ ที่ผมออกแบบไว้คือ ให้มันSave ลงในตารางหลังจากกดปุ่ม save แต่ถ้าไม่กดก็ไม่ต้องใส่ลงในตารางแล้วก็หลังจากที่เซฟเนี่ยให้มันขึ้น Record ใหม่เลยแล้วก็หลังจากที่เซฟเนี่ยให้สถานะของ Asset เนี่ยกลายเป็น No ครับเพื่อที่จะให้ combobox ดึงมาแค่ Asset ที่เป็น Yes
3.ปุ่ม Save อยู่บน MainForm ครับเพราะไม่มี Sub Form
4.ถ้าไม่กดปุ่มเซฟจะไม่สามารถบันทึกได้ครับ
 รบกวนอาจารย์ชี้แนะด้วยครับผม

 

03 ก.ค. 62 , 21:31:49
ตอบกลับ #9

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

โค๊ด: [Select]
Private Sub bt_SaveLoan_Click()
  Dim SavRec    As Boolean
 
  If IsNull(Loan_No) Then
    MsgBox ("Please Put Loan No")
  ElseIf IsNull(Loan_Date) Then
    MsgBox ("Please Put Loan Date")
  ElseIf IsNull(Employee_ID) Then
    MsgBox ("Please Put Employee Name")
  Else
    DoCmd.RunCommand (acCmdSaveRecord)
    DoCmd.RunSQL "UPDATE Asset SET Status = FALSE WHERE Asset_ID = " & CStr(Me.Asset_ID)
    SavRec = True
  End If
End Sub

ก็แค่เพิ่มมาบรรทัดเดียวเอง เป็นการสั่ง SQL statement ให้ทำงาน  (จริงๆการทำอะไรกับข้อมูลในเทเบิล สามารถทำได้หลายวิธี แต่เพื่อให้ง่าย ก็เลยเลือกใช้ .RunSQL นี้ก่อนครับ)  แต่ถ้าฟิลด์ Asset_ID ในเทเบิล Loan มีประเภทข้อมูลเป็น Text ให้เปลี่ยนข้างท้ายของบรรทัดเป็น   Asset_ID = '" & Me.Asset_ID & "'"   และถ้าฟิลด์สถานะของ Asset ไม่ใช่ชื่อ Status ก็เปลี่ยนให้ถูกต้องด้วยนะครับ

อีกอย่างที่สังเกตเห็นก็คือ ลืมเช็คว่าผู้ใช้ได้เลือก Asset แล้วหรือเปล่า

เพิ่งคิดได้ว่าถ้าคุณเลื่อนกลับไปเรคอร์ดยืมเก่าๆที่ยังไม่คืน คุณอาจจะมองไม่เห็น Asset บนฟอร์ม เพราะก่อนหน้านี้ คอมโบบ็อกซ์อาจถูกกำหนดให้แสดงเฉพาะตัวที่ยังมีให้ยืมได้เท่านั้น ดังนั้นควรเปลี่ยนไปใช้ Form Current เพื่อกำหนด Row Source ให้กับคอมโบบ็อกซ์ โดยต้องรวมเอา Asset ของการยืมนั้นๆเข้ามารวมกับ Asset ที่ยังมีให้ยืมด้วย  แต่ถ้าเป็นการยืมรายการใหม่ ก็ให้มีเฉพาะ Asset ที่ยังมีให้ยืมเท่านั้น โค้ดก็จะมีลักษณะเป็น

โค๊ด: [Select]
Private Sub Form_Current()
    If Me.NewRecord Then
        Me.Asset_ID.RowSource = "SELECt ฟิลด์ต่างๆ FROM Asset WHERE Status = True"
    Else
        Me.Asset_ID.RowSource = "SELECt ฟิลด์ต่างๆ FROM Asset WHERE Asset_ID = " & CStr(Me.Asset_ID) & " OR Status = True"
    End If
End Sub
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

04 ก.ค. 62 , 08:33:36
ตอบกลับ #10

Tonwrp

ตอนนี้เข้าใจเลยครับอาจารย์ขอบพระคุณมากที่ชี้แนะครับผม

 

04 ก.ค. 62 , 09:19:45
ตอบกลับ #11

Tonwrp



เกิด Error แบบนี้ครับอาจารย์

 

04 ก.ค. 62 , 09:32:12
ตอบกลับ #12

Tonwrp



เกิด Error แบบนี้ครับอาจารย์

แก้ได้แล้วครับตอนนี้ติดปัญหาตรงที่ใน combobox ยังโชว์ asset ที่ Status เป็น No ครับทำให้ผมงงเล็กน้อยและก่อนบันทึกจะมี Msgbox ของโปรแกรมเตือนมาว่าต้องการที่จะบันทึกใช่มั้ยจะ undo ไม่ได้นะอะไรแบบนี้อ่ะครับไม่ทราบว่าเกิดจากอะไรครับ

 

04 ก.ค. 62 , 10:20:49
ตอบกลับ #13

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

- Asset_ID มี Data Type เป็นอะไรครับ แลัวเอาโค้ดที่เขียนใน Form_Current event procedure มาแสดงหน่อยครับ
- เมื่อดูผ่านเทเบิล Asset โดยตรง เห็นมีเรคอร์ดที่ Status เป็น No แน่ๆแล้วใช่ไหมครับ

ส่วนการยกเลิกแสดงข้อความเตือน ให้สั่ง DoCmd.SetWarnings = False/True คร่อมเอาไว้ครับ
DoCmd.SetWarnings = False
DoCmd.RunSQL "UPDATE Asset ....
DoCmd.SetWarnings = True

ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

04 ก.ค. 62 , 10:35:39
ตอบกลับ #14

Tonwrp

- Asset_ID มี Data Type เป็นอะไรครับ แลัวเอาโค้ดที่เขียนใน Form_Current event procedure มาแสดงหน่อยครับ
- เมื่อดูผ่านเทเบิล Asset โดยตรง เห็นมีเรคอร์ดที่ Status เป็น No แน่ๆแล้วใช่ไหมครับ

ส่วนการยกเลิกแสดงข้อความเตือน ให้สั่ง DoCmd.SetWarnings = False/True คร่อมเอาไว้ครับ
DoCmd.SetWarnings = False
DoCmd.RunSQL "UPDATE Asset ....
DoCmd.SetWarnings = True

Asset_ID Data Type เป็น AutoNumber ครับเนื่องจาก Import มาจาก Excel
ส่วน Code มีตามนี้ครับ   Private Sub Form_frm_Loan_Current()
                                 If Me.NewRecord Then
                                    Me.Asset_ID.RowSource = "SELECT Asset_ID, FROM Tb_Assets WHERE ASSET_Status = YES"
                                 Else
     Me.Asset_ID.RowSource = "SELECT Asset_ID, FROM Tb_Assets WHERE Asset_ID = " & CSrt(Me.Asset_ID) & " OR Asset_Status = YES"
End If
End Sub


ใช่ครับใน Table Status เป็น No แล้วแต่หลังจากที่ขึ้น Record ใหม่ใน combobox ก็ยังมีตัวที่ Status เป็น No นะครับ
 On Enter Event Procedure ของ combobox ก็ใส่Code ไปว่า
 Me.cbo_Asset.Requery แล้วเช่นกันครับเลยสงสัยว่าทำอะไรผิดรึเปล่าหรือต้องไปเขียน SQL เป็น Subquery ใน Row Source Property ของ Combobox อีกรึเปล่าครับ

 

04 ก.ค. 62 , 10:42:27
ตอบกลับ #15

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

Me.Asset_ID.RowSource = "SELECT Asset_ID, FROM    <---- มี , เกินมาครับ เอาออกด้วย

CSrt(Me.Asset_ID)  ผิดนะครับ ต้องเป็น CStr(Me.Asset_ID)

Me.Asset_ID.RowSource เปลี่ยนเป็น Me.cboAsset_ID.RowSource

ทำไมชื่อ procedure เป็น Form_frm_Loan_Current ปกติมันจะเป็น Form_Current เท่านั้น ???
« แก้ไขครั้งสุดท้าย: 04 ก.ค. 62 , 10:47:48 โดย สันติสุข »
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp


บอร์ดเรียนรู้ Access สำหรับคนไทย