กระทู้เก่าบอร์ด อ.Yeadram
3,889 6
URL.หัวข้อ /
URL
สอบถามเรื่องการแก้ไขข้อมูลใน form ครับ
จากไฟล์ตัวอย่างที่ส่งไปยัง accboard @ gmail.com น่ะครับ
คือผมมีฟอร์มชื่อ frmSearch ครับ เป็นฟอร์มที่ไว้ค้นหาข้อมูลจาก textbox ข้างบน
เมื่อผมทำการค้นหาได้หนึ่งคนตามที่ต้องการแล้ว ผมต้องการแก้ไขข้อมูลบาง field คราวนี้ปัญหาก็คือ ผมไม่สามารถทำการพิมพ์อะไรลงไปได้ในฟอร์มเลยครับ คราวนี้ต้องทำยังไงครับ ผมลองสร้าง button ดูตามโปรแกรมตัวอย่างจากบางเว็บแล้วก็ยังไม่ได้อ่ะครับ อับจนปัญญาแล้วครับ ขอความช่วยเหลือหน่อยครับ ขอบคุณครับ
คือผมมีฟอร์มชื่อ frmSearch ครับ เป็นฟอร์มที่ไว้ค้นหาข้อมูลจาก textbox ข้างบน
เมื่อผมทำการค้นหาได้หนึ่งคนตามที่ต้องการแล้ว ผมต้องการแก้ไขข้อมูลบาง field คราวนี้ปัญหาก็คือ ผมไม่สามารถทำการพิมพ์อะไรลงไปได้ในฟอร์มเลยครับ คราวนี้ต้องทำยังไงครับ ผมลองสร้าง button ดูตามโปรแกรมตัวอย่างจากบางเว็บแล้วก็ยังไม่ได้อ่ะครับ อับจนปัญญาแล้วครับ ขอความช่วยเหลือหน่อยครับ ขอบคุณครับ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R01663
ทางแก้สำหรับปัญหาดังกล่าว
อีกวิธีก็คือ การออกแบบฟอร์ม แบบฟอร์มแม่-ฟอร์มลูก
แต่ละฟอร์ม ใช้แหล่งข้อมูล คนละตารางไปเลยครับ ความสัมพันธ์ที่ต้องการก็มาใช้ระบบ child แทนการ join ผ่านคิวรี่ ครับ
ฟอร์มแม่ ใช้ข้อมูลโดยตรงจาก ตาราง employee ไปเลยครับ
ฟอร์มลูก ที่สร้างขึ้นค่อยเอามาวาง แล้วให้ ฟิลด์ id ของแต่ละฟอร์มมาเชื่อมกันโดย linkchildfield
ระบบค้นหา เอาไปวางบนส่วนหัวของฟอร์มแม่ ก็ได้ โค้ดที่เขียนก็จะประมาณนี้ (ไม่ต้องไปใช้ผ่าน คิวรี่แล้วครับ)
Private Sub Command22_Click()
Me.Filter = ""
Me.FilterOn = False
txtfind = ""
End Sub
Private Sub txtfind_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Me.Filter = "[Name] LIKE '*" & txtfind.Text & "*'"
Me.FilterOn = True
Me.Refresh
MsgBox Me.Filter
End If
End Sub
อีกวิธีก็คือ การออกแบบฟอร์ม แบบฟอร์มแม่-ฟอร์มลูก
แต่ละฟอร์ม ใช้แหล่งข้อมูล คนละตารางไปเลยครับ ความสัมพันธ์ที่ต้องการก็มาใช้ระบบ child แทนการ join ผ่านคิวรี่ ครับ
ฟอร์มแม่ ใช้ข้อมูลโดยตรงจาก ตาราง employee ไปเลยครับ
ฟอร์มลูก ที่สร้างขึ้นค่อยเอามาวาง แล้วให้ ฟิลด์ id ของแต่ละฟอร์มมาเชื่อมกันโดย linkchildfield
ระบบค้นหา เอาไปวางบนส่วนหัวของฟอร์มแม่ ก็ได้ โค้ดที่เขียนก็จะประมาณนี้ (ไม่ต้องไปใช้ผ่าน คิวรี่แล้วครับ)
Private Sub Command22_Click()
Me.Filter = ""
Me.FilterOn = False
txtfind = ""
End Sub
Private Sub txtfind_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Me.Filter = "[Name] LIKE '*" & txtfind.Text & "*'"
Me.FilterOn = True
Me.Refresh
MsgBox Me.Filter
End If
End Sub
3 @R01668
ขอบคุณครับ
แล้วอีกอย่างครับ ถ้าผมต้องการเพิ่มฟอร์มสำหรับเพิ่มข้อมูลใหม่เข้าไป สามารถอ้างอิงจากตารางโดยตรงได้เหมือนกันใช่หรือเปล่าครับ
แล้วอีกอย่างครับ ถ้าผมต้องการเพิ่มฟอร์มสำหรับเพิ่มข้อมูลใหม่เข้าไป สามารถอ้างอิงจากตารางโดยตรงได้เหมือนกันใช่หรือเปล่าครับ
4 @R01669
ฟอร์ม แม่-ลูก ที่ทำขึ้นหลังสุดเนี่ย
ใช้เพิ่มข้อมูล ใช้ลบข้อมูล ใช้แก้ไข ใช้ค้นหาข้อมูลได้ทุกอย่างครับ
ลองดูดีๆ
ใช้เพิ่มข้อมูล ใช้ลบข้อมูล ใช้แก้ไข ใช้ค้นหาข้อมูลได้ทุกอย่างครับ
ลองดูดีๆ
5 @R01709
พี่ครับ
อีกอย่างครับ ตอนนี้ผมได้ requirement เพิ่มเติม
requirement ที่ต้องการก็คือ ทำการ ปริ้นรายงานตามวันหมดอายุของ License ต่างๆ อ่ะครับ อย่างในไฟล์นั้นจะมี 2552,2553,2554 ผมได้ทำการสร้างแบบฟอร์มแล้วให้เลือกจาก Option Group โดยดูตัวอย่างจาก ฐานข้อมูล NorthWind ครับ
และคราวนี้ ปัญหาก็คือ ฐานข้อมูลของผมมันจะมีการเคลื่อนไหวตลอดเวลา ถ้าสมมติว่า มีการเพิ่มวันหมดอายุเข้าไป จะมีวิธีในการให้มันเพิ่มใน Option Group อัตโนมัติหรือเปล่าครับ
อีกอย่างครับ ถ้าผมต้องการให้ลิงค์จากฟอร์มไปสร้างรายงานโดยเป็นเงื่อนไขอัตโนมัติจากฟอร์มเลย โดยไม่ต้องสร้าง คิวรี่ ขึ้นมาเพื่อรองรับอ่ะครับ จะทำได้หรือไม่ครับ
ขอบคุณครับ
อีกอย่างครับ ตอนนี้ผมได้ requirement เพิ่มเติม
requirement ที่ต้องการก็คือ ทำการ ปริ้นรายงานตามวันหมดอายุของ License ต่างๆ อ่ะครับ อย่างในไฟล์นั้นจะมี 2552,2553,2554 ผมได้ทำการสร้างแบบฟอร์มแล้วให้เลือกจาก Option Group โดยดูตัวอย่างจาก ฐานข้อมูล NorthWind ครับ
และคราวนี้ ปัญหาก็คือ ฐานข้อมูลของผมมันจะมีการเคลื่อนไหวตลอดเวลา ถ้าสมมติว่า มีการเพิ่มวันหมดอายุเข้าไป จะมีวิธีในการให้มันเพิ่มใน Option Group อัตโนมัติหรือเปล่าครับ
อีกอย่างครับ ถ้าผมต้องการให้ลิงค์จากฟอร์มไปสร้างรายงานโดยเป็นเงื่อนไขอัตโนมัติจากฟอร์มเลย โดยไม่ต้องสร้าง คิวรี่ ขึ้นมาเพื่อรองรับอ่ะครับ จะทำได้หรือไม่ครับ
ขอบคุณครับ
6 @R01770
ประเด็นแรก
การออกรายงาน ตามเงื่อนไข ก็คล้ายๆ กับ http://thai-access.com/yeadram_view.php?topic_id=413&page=1
ประเด็นที่สอง
การที่มีตัวเลือกแบบ ไดนามิก ถ้าต้องการให้มันเพิ่ม option บนฟอร์มแบบอัตโนมัติ มันก็คือการสร้าง คอนโทรลเพิ่มขึ้น ในขณะ Runtime
มันก็ทำได้ครับ แต่ไม่แนะนำ เพราะมันเปลืองทรัพยากร และเสียเวลา
แนะนำให้เอาตัวเลือกเหล่านั้น ไปทำเป็นลิสต์บ็อกซ์ แทนครับ
กำหนดให้ลิสต์บ็อกซ์
- สามารถเลือกได้เพียงค่าเดียว
- ชนิดแหล่งข้อมูล เป็น Table/query
- แหล่งข้อมูล ก็เขียนเป็น Sql แบบ select ธรรมดานี่แหละครับ โดยเอามาแค่ฟิลด์เดียวก็ได้ คือ เหล่าตัวเลือกที่ต้องการนั่นแหละครับ
แบบนี้ จะประหยัดเวลากว่า และเสถียรกว่าด้วยครับ
การออกรายงาน ตามเงื่อนไข ก็คล้ายๆ กับ http://thai-access.com/yeadram_view.php?topic_id=413&page=1
ประเด็นที่สอง
การที่มีตัวเลือกแบบ ไดนามิก ถ้าต้องการให้มันเพิ่ม option บนฟอร์มแบบอัตโนมัติ มันก็คือการสร้าง คอนโทรลเพิ่มขึ้น ในขณะ Runtime
มันก็ทำได้ครับ แต่ไม่แนะนำ เพราะมันเปลืองทรัพยากร และเสียเวลา
แนะนำให้เอาตัวเลือกเหล่านั้น ไปทำเป็นลิสต์บ็อกซ์ แทนครับ
กำหนดให้ลิสต์บ็อกซ์
- สามารถเลือกได้เพียงค่าเดียว
- ชนิดแหล่งข้อมูล เป็น Table/query
- แหล่งข้อมูล ก็เขียนเป็น Sql แบบ select ธรรมดานี่แหละครับ โดยเอามาแค่ฟิลด์เดียวก็ได้ คือ เหล่าตัวเลือกที่ต้องการนั่นแหละครับ
แบบนี้ จะประหยัดเวลากว่า และเสถียรกว่าด้วยครับ
Time: 0.3139s
เรื่องของเรื่องคือ ผมรู้คร่าวๆ ว่าทำไม ถึงไม่ได้ แต่ผมไม่รู้ว่าศัพท์ทางเทคนิค มันเรียกว่าอะไร คำจำกัดความที่แท้จริงคืออะไร แต่ถ้าให้อธิบายแบบภาษา ชาวบ้านๆ ก็พอได้ดังนี้ครับ
สาเหตุมันมาจาก คิวรี่ อันเป็นแหล่งข้อมูลของฟอร์ม มันไม่อนุญาติให้แก้ไข หรือเพิ่มเติมข้อมูลได้
ถามต่อว่าทำไม คิวรี่ตัวนี้ถึงไม่อนุญาตงานดังกล่าว ก็เพราะ .... ตรงนี้แหละต้องศัพท์เทคนิคล่ะ .... ในคิวรี่ของคุณ ใช้ตาราง 4 ตัว แบบ 3 รุม 1
คือ 3 ตารางมีความสัมพันธ์แบบ ONE to MANY กับตาราง employee หมดเลย โดยตาราง employee เป็นฝั่ง ONE
แล้วคุณก็ลากเอาทุกฟิลด์จากการ join กัน มาทั้งหมดโดยไม่สนว่ามันอยู่ฝั่ง one หรือฝั่ง many
การสร้างคิวรี่แบบนี้ ระบบจะไม่ยอมให้แก้ไข ข้อมูลครับ เพราะมันไม่รู้ว่าคุณต้องการ กระทำ กับข้อมูลในตารางใดกันแน่ๆ และ/หรือ การที่คุณ กระทำนั้น ถูกต้องตาม ลำดับหรือไม่ ลองอ่านความเห็นหมายเลข R01550 จากกระทู้นี้ http://www.thai-access.com/yeadram_view.php?topic_id=350
อาจจะช่วยให้เข้าใจ คำว่า ลำดับ ตามความหมายของผมได้ครับ
เอาเป็นว่านั่นคือสาเหตุ ที่ทำให้มันไม่สามารถแก้ไขข้อมูลได้ครับ