กระทู้เก่าบอร์ด อ.Yeadram
4,005 13
URL.หัวข้อ /
URL
อยากทำทราบวิธีแสดงข้อมูล หลายๆแถว
ผมมี database ประกอบด้วย
id name machine price
1 a p 15
2 b m 10
3 b p 15
4 c s 20
5 c p 15
6 c m 10
แล้วสร้างฟอร์ม ขึ้นมา ชื่อ frm_mc ประกอบด้วย
1.textbox1 ไว้ป้อนชื่อที่ต้องการค้นหา
2.textbox2 ให้แสดงค่า machine
3.textbox3 ให้แสดง price
4.ปุ่มค้นหา
การทำงานก้อคือ ให้ป้อนชื่อที่ textbox1 แล้วกดปุ่ม ค้นหา
ให้แสดง machine และ price ทัง้หมดที่ตรงกับชื่อที่ป้อนน่ะคับ เช่น
textbox1 = b กดปุ่มค้นหาก้อจะแสดง
textbox2 = m textbox3 = 10
และมีการแสดงข้อมูลแถวที่ 2 ด้วย ก้อคือ
(new)textbox4 =p (new)textbox5=15
เพราะ b มี 2 ตัว อยากให้แสดงทั้ง 2 แถวเลยน่ะคับ ที่ชื่อตรงกัน ถ้าป้อน c ก้อให้แสดง ทั้ง 3 แถวเลยน่ะคับ
ประมาณนี้น่ะคับ ช่วยแนะนำหน่อยคับ หาวิธีไม่ได้เลยคับ
id name machine price
1 a p 15
2 b m 10
3 b p 15
4 c s 20
5 c p 15
6 c m 10
แล้วสร้างฟอร์ม ขึ้นมา ชื่อ frm_mc ประกอบด้วย
1.textbox1 ไว้ป้อนชื่อที่ต้องการค้นหา
2.textbox2 ให้แสดงค่า machine
3.textbox3 ให้แสดง price
4.ปุ่มค้นหา
การทำงานก้อคือ ให้ป้อนชื่อที่ textbox1 แล้วกดปุ่ม ค้นหา
ให้แสดง machine และ price ทัง้หมดที่ตรงกับชื่อที่ป้อนน่ะคับ เช่น
textbox1 = b กดปุ่มค้นหาก้อจะแสดง
textbox2 = m textbox3 = 10
และมีการแสดงข้อมูลแถวที่ 2 ด้วย ก้อคือ
(new)textbox4 =p (new)textbox5=15
เพราะ b มี 2 ตัว อยากให้แสดงทั้ง 2 แถวเลยน่ะคับ ที่ชื่อตรงกัน ถ้าป้อน c ก้อให้แสดง ทั้ง 3 แถวเลยน่ะคับ
ประมาณนี้น่ะคับ ช่วยแนะนำหน่อยคับ หาวิธีไม่ได้เลยคับ
13 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R02979
ไม่ค่อยเข้าใจตรง นำคิวรี่ไปสร้างเป็นฟอร์นี่แหละคับ มันต้องทำยังไงบ้าง มองภาพไม่ออกเลยคับ
2 @R02980
เอ..ทั้งสองท่านพูดซะผมงง คือผมต้องการแสดงใน textbox น่ะคับ
โดยที่แถวแรกแสดงในระเบียนแรกคับ แถวที่สองก้อแสดงระเบียนที่ 2 น่ะคับ
พอจะมีวิธีไหมคับ
โดยที่แถวแรกแสดงในระเบียนแรกคับ แถวที่สองก้อแสดงระเบียนที่ 2 น่ะคับ
พอจะมีวิธีไหมคับ
3 @R02981
- กำหนด Default View property ของฟอร์มให้เป็น Continuous Forms
- ใน form header section ให้สร้าง textbox ชื่อ txtSearchName เพื่อรับค่า name ที่ต้องการค้นหา และสร้าง command button ชื่อ btnSearch เพื่อให้กดแล้วเริ่มต้นการค้นหา
- ใน form detail section ให้สร้าง textbox ชื่อ txtMachine มี Control Source property เป็นคำว่า machine (คือชื่อของฟิลด์ machine นั่นเอง) เพื่อแสดง machine และสร้าง textbox ชื่ิอ txtPrice มี Control Source property เป็นคำ่ว่า price เพื่อแสดง Price เช่นกัน
- ใน On Load event ของ Form ให้สร้าง Event Procedure แล้วใส่โค้ดดังนี้
Private Sub Form_Load()
Me.RecordSource = ""
End Sub
- ใน On Click event ของ btnSearch command button ให้สร้าง Event Procedure แล้วใส่โค้ดในลักษณะนี้ลงไป
Private Sub btnSearch_Click()
Dim txtSQL As String
txtSQL = "select * from ชื่อเทเบิล where name = '" & Me.TxtSearchName & "' "
Me.RecordSource = txtSQL
End Sub
ตย.และโค้ดที่ให้นี้ยังไม่ได้มีการตรวจสอบความถูกต้องใดๆ เพียงแต่ให้เป็นแนวทางเท่านั้น
- ใน form header section ให้สร้าง textbox ชื่อ txtSearchName เพื่อรับค่า name ที่ต้องการค้นหา และสร้าง command button ชื่อ btnSearch เพื่อให้กดแล้วเริ่มต้นการค้นหา
- ใน form detail section ให้สร้าง textbox ชื่อ txtMachine มี Control Source property เป็นคำว่า machine (คือชื่อของฟิลด์ machine นั่นเอง) เพื่อแสดง machine และสร้าง textbox ชื่ิอ txtPrice มี Control Source property เป็นคำ่ว่า price เพื่อแสดง Price เช่นกัน
- ใน On Load event ของ Form ให้สร้าง Event Procedure แล้วใส่โค้ดดังนี้
Private Sub Form_Load()
Me.RecordSource = ""
End Sub
- ใน On Click event ของ btnSearch command button ให้สร้าง Event Procedure แล้วใส่โค้ดในลักษณะนี้ลงไป
Private Sub btnSearch_Click()
Dim txtSQL As String
txtSQL = "select * from ชื่อเทเบิล where name = '" & Me.TxtSearchName & "' "
Me.RecordSource = txtSQL
End Sub
ตย.และโค้ดที่ให้นี้ยังไม่ได้มีการตรวจสอบความถูกต้องใดๆ เพียงแต่ให้เป็นแนวทางเท่านั้น
4 @R02982
ขอบคุณมากคับ คุณสันติสุข แต่จากที่ดูมันน่าจะออกแถวเดียวป่าวคับ หรือว่าออกทุกแถวเลยคับ
5 @R02983
ลองทำตามที่ผมบอกแล้วหรือยัง
6 @R02991
ผมลองทำดูแล้วคับ คือมันออกได้ทั้งสองแถวเลยคับ ดีใจมาก โอวววว แต่...
มันจะเพิ่มระเบียนใหม่มาให้ตลอดเลยคับ มันไม่ได้หยุดที 2 แถวน่ะคับ คือ มันจะแสดง แถวแรก
textbox2 = m textbox3 = 10
(new)textbox4 =p (new)textbox5=15
*(new)textbox4 = ค่าว่าง (new)textbox5= ค่าว่าง //แถวนี้จะเพิ่มมาตลอดเลยคับ
จะกำหนดยังไงดีคับ คือ อยากใ้ห้มันออกแค่แถวที่มี โค๊ด b น่ะคับ โดยไม่มีแถวใหม่ที่มีค่าว่างน่ะคับ ชี้แนะด้วยคับ ขอบคุณมากเลยคับ ช่วยได้เยอะเลยคับ
มันจะเพิ่มระเบียนใหม่มาให้ตลอดเลยคับ มันไม่ได้หยุดที 2 แถวน่ะคับ คือ มันจะแสดง แถวแรก
textbox2 = m textbox3 = 10
(new)textbox4 =p (new)textbox5=15
*(new)textbox4 = ค่าว่าง (new)textbox5= ค่าว่าง //แถวนี้จะเพิ่มมาตลอดเลยคับ
จะกำหนดยังไงดีคับ คือ อยากใ้ห้มันออกแค่แถวที่มี โค๊ด b น่ะคับ โดยไม่มีแถวใหม่ที่มีค่าว่างน่ะคับ ชี้แนะด้วยคับ ขอบคุณมากเลยคับ ช่วยได้เยอะเลยคับ
7 @R02995
ไปกำหนด Allow Addition property ของฟอร์มให้เป็น False ครับ
8 @R02996
โอวววว ได้แล้วคับ ขอยคุณมากคับ แต่เราจะกำหนดค่าใน textbox ทุกตัวให้เปนค่าว่างก่อนทำไงคับ เปิดฟอร์มขึ้นมาก้อเปนค่าว่างก่อน ป้อนโค๊ดแล้วค่อยแสดงน่ะคับ
เพราะจากที่ทำมามันจะขึ้นค่าอะไรก้อไม่รู้น่ะคับ
รบกวน อาจารย์อีกทีคับ..
เพราะจากที่ทำมามันจะขึ้นค่าอะไรก้อไม่รู้น่ะคับ
รบกวน อาจารย์อีกทีคับ..
9 @R02999
ปัญหาเกิดจากเพราะว่าตอนเริ่มต้นเรายังไม่มี RecordSource แต่ใน textbox ต่างๆเราอ้าง ControlSource property ไปยังฟิลด์ที่คาดว่าจะมีเมื่อมี RecordSource เกิดขึ้นแล้ว มันจึงเกิด error #Name? นั่นคือฟอร์มเราเป็นประเภท bound form คือ textbox นั้นผูกติดกับฟิลด์ในฐานข้อมูลโดยตรง
ดังนั้นจึงแก้โดยการ ซ่อน ส่วนที่เป็น detail เอาไ้ว้ก่อน โดยไปกำหนด Visible property ของ Detail section ของฟอร์ม ให้เป็น False แล้วแก้ไขโค้ดเป็นดังนี้
Private Sub btnSearch_Click()
Dim txtSQL As String
txtSQL = "select * from ชื่อเทเบิล where name = '" & Me.TxtSearchName & "' "
Me.RecordSource = txtSQL
Me.Section("detail").Visible = True
End Sub
จริงๆแล้วเรายังมีอีกวิธีคือ เราค่อยไป ผูก textbox เข้ากับฟิลด์ตอน runtime แทน โดยการกำหนด .ControlSource property ของ textbox เหล่านั้นให้เป็นชื่อฟิลด์ เช่น Me.txtMachine = "machine" ก็ได้
ปล. ผมว่าคุณควรหาหนังสือมาอ่านประกอบด้วย หรืออ่านจาก Help File ที่ติดมากับ Microsoft Office ด้วย เวลา install ให้เลือก VBA Help File ด้วย (หรืออะไรประมาณนี้แหล่ะ ผมจำคำไม่ได้)
ดังนั้นจึงแก้โดยการ ซ่อน ส่วนที่เป็น detail เอาไ้ว้ก่อน โดยไปกำหนด Visible property ของ Detail section ของฟอร์ม ให้เป็น False แล้วแก้ไขโค้ดเป็นดังนี้
Private Sub btnSearch_Click()
Dim txtSQL As String
txtSQL = "select * from ชื่อเทเบิล where name = '" & Me.TxtSearchName & "' "
Me.RecordSource = txtSQL
Me.Section("detail").Visible = True
End Sub
จริงๆแล้วเรายังมีอีกวิธีคือ เราค่อยไป ผูก textbox เข้ากับฟิลด์ตอน runtime แทน โดยการกำหนด .ControlSource property ของ textbox เหล่านั้นให้เป็นชื่อฟิลด์ เช่น Me.txtMachine = "machine" ก็ได้
ปล. ผมว่าคุณควรหาหนังสือมาอ่านประกอบด้วย หรืออ่านจาก Help File ที่ติดมากับ Microsoft Office ด้วย เวลา install ให้เลือก VBA Help File ด้วย (หรืออะไรประมาณนี้แหล่ะ ผมจำคำไม่ได้)
10 @R03000
แก้เขียนผิด จาก Me.txtMachine = "machine" ต้องเป็น Me.txtMachine.ControlSource = "machine"
11 @R03002
วิธีที่สองน่าจดีกว่าคับ แต่ผมไม่เข้าใจว่า ให้กำหนดตรงไหน
Me.txtMachine.ControlSource = "machine" น่ะคับ ใส่ตรง textbox หรือ btnSearch งงคับ
หน้ามืดอีกแล้วคับ เอิ๊กๆ รบกวนด้วยคับ T_T
Me.txtMachine.ControlSource = "machine" น่ะคับ ใส่ตรง textbox หรือ btnSearch งงคับ
หน้ามืดอีกแล้วคับ เอิ๊กๆ รบกวนด้วยคับ T_T
12 @R03003
อย่าต้องให้ถึงกับบอกหมดเลย ลองใช้ตรรกะคิดดูนะครับว่าควรใส่ที่ไหน
13 @R03004
T-T อาจารช่งดุยิ่งนัก โอเคแล้วคับ ได้แล้ว ผมว่าวิธีที่สองสุดยอดเลยคับ
ขอบคุณมากคับอาจารย์ ยอดเยี่ยมกระเทียมดองไปเลย....เฮ่อกว่าจะได้
ไว้วันหลังรบกวนอีกทีนะคับ ขอบคุณมากมายคับ
ขอบคุณมากคับอาจารย์ ยอดเยี่ยมกระเทียมดองไปเลย....เฮ่อกว่าจะได้
ไว้วันหลังรบกวนอีกทีนะคับ ขอบคุณมากมายคับ
Time: 0.3902s