สมัครสมาชิก
 

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



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

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

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
  • *
  • กระทู้: 279
  • พลังขอบคุณ: 249

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

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

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

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

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

ส่วนคิวรี่ ผมเขียนเอาไว้เพื่ออธิบายถึงประโยชน์ของการสร้าง Lookup ในฟิลด์ต่างๆ เพื่อที่เราจะได้ไม่ต้องดึงเอาเทเบิล Employees, Customers และ Asset เข้ามาในคิวรี่ด้วย ทำให้ดูสะอาดตา ไม่รกรุงรัง  ยกเว้นว่าเราต้องการฟิลด์อื่นๆที่นอกเหนือไปจาก  _Name และ _Description จาก 3 เทเบิลที่ว่านี้ ซึ่งแน่นอนว่าเราต้องดึงเอาเทเบิลนั้นๆมาใส่ในคิวรี่ด้วยครับ
ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บ
 
โพสต์นี้ได้รับคำขอบคุณจาก: 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
  • *
  • กระทู้: 279
  • พลังขอบคุณ: 249

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

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

แต่ไม่ว่าจะวิธีไหน เราต้องสั่ง ชื่อคอมโบบ็อกส์.Requery เพื่อให้ SQL ที่เขียนไว้นั้นทำงานอ่านสถานะตอนนั้นมาใหม่ ถ้าชัวร์สุดก็สั่งใน On Enter event ของคอมโบบ็อกส์ครับ
ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บ
 
โพสต์นี้ได้รับคำขอบคุณจาก: 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
  • *
  • กระทู้: 279
  • พลังขอบคุณ: 249

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

1. หน้าฟอร์มที่บันทักการยืมนั้น ตกลงมี sub form หรือไม่
2. โค้ดที่มีใน OnClick ของปุ่ม Save ตอนนี้มีอะไรอยู่บ้าง แล้วออกแบบไว้ว่าจะให้มันทำอะไรบ้าง
3. ปุ่ม Save อยู่บน main form หรือ sub form
4. ถ้าไม่กดปุ่ม Save  แล้วรายการที่ป้อนไปจะเป็นยังไง ?  บันทึกไม่ได้ หรือบันทึกได้แต่ถือว่าไม่เอาไปใช้อ้างอิงในระบบ
ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บ
 
โพสต์นี้ได้รับคำขอบคุณจาก: 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
  • *
  • กระทู้: 279
  • พลังขอบคุณ: 249

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

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

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

- 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

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

  • รถของเล่นสังกะสีปี 1950 : 2xxK บาทเอง

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

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


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