กระทู้เก่าบอร์ด อ.Yeadram
3,663 18
URL.หัวข้อ /
URL
ไม่สามารถใช้ Recordset ได้
ปัญาคือ
ข้อมูลส่วนอื่น ๆ อยู่ในตัวแม่ข่าว
แต่ตัว data ที่้ต้องการเปิดใช้ recordset อยู่ในตัวลูกข่าย
เมื่อใช้ rcdcat.findfirst ("[sid] =" & me![code])
แจ้งขัดข้องดังนี้
Run-time error 3251
Operatin is ont supported for this type of object.
แต่ถ้าโอนถ่ายข้อมูล data ที่้ต้องการเปิดใช้ recordset
ไปอยู่ที่ตัวแม่ข่ายด้วย แล้วใช้เชื่อมต่อกัน
สามารถใช้งานได้ดี
ขอบคุณครับ
ข้อมูลส่วนอื่น ๆ อยู่ในตัวแม่ข่าว
แต่ตัว data ที่้ต้องการเปิดใช้ recordset อยู่ในตัวลูกข่าย
เมื่อใช้ rcdcat.findfirst ("[sid] =" & me![code])
แจ้งขัดข้องดังนี้
Run-time error 3251
Operatin is ont supported for this type of object.
แต่ถ้าโอนถ่ายข้อมูล data ที่้ต้องการเปิดใช้ recordset
ไปอยู่ที่ตัวแม่ข่ายด้วย แล้วใช้เชื่อมต่อกัน
สามารถใช้งานได้ดี
ขอบคุณครับ
18 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R04603
rcdcat ได้มาจากแหล่งข้อมูลไหน (เช่น เทเบิลหรือจาก SQL SELECT Statement) แล้วแหล่งข้อมูลนั้นได้มาจาก Database ที่เชื่อมโยงไปยังไฟล์ในเครื่องไหน ... ที่บอกมานี้ก็เพื่อจะโยงให้เห็นว่า คุณก็เพียงแก้ไขการเรียกใช้ Database ให้ถูกต้องเท่านั้นเองครับ
2 @R04604
rcdcat มาจากเทเบิลเครื่องลูกข่าย
ส่วนตัว code เป็นข้อมูลที่มาจากเครื่องแม่ข่าย
แต่หากเอาตัวเทเบิลที่มาจากลูกข่าย
ไปไว้ที่เครื่องแม่ข่ายด้วย
แล้วใช้เชื่อมต่อข้อมูลผ่านเครื่องแม่ข่าย
สามารถใช้งานได้
ส่วนตัว code เป็นข้อมูลที่มาจากเครื่องแม่ข่าย
แต่หากเอาตัวเทเบิลที่มาจากลูกข่าย
ไปไว้ที่เครื่องแม่ข่ายด้วย
แล้วใช้เชื่อมต่อข้อมูลผ่านเครื่องแม่ข่าย
สามารถใช้งานได้
3 @R04611
มีสอง เทเบิล
custom อยู่ที่เครื่อง แม่ข่าย ฟิลด์ code
score อยู่ที่เครื่องลูกข่าย ฟิลด์ sid
รันที่เคลื่องลูกข่าย
ทำรายงานผลของคะแนน เพื่อหาลำดับ
และในรายละเอียด
เขียนคำสั่งเพื่อรัน reccordset
เื่พื่อให้บันทึกรายการลำดับที่ของลูกค้าในการทำคะแนน
ในเทเบิล score
แต่ถ้าเอาเทเบิล score ไปใว้ที่เครื่องแม่ข่ายด้วย
สามารถรันคำสั่ง และ ใช้ reccordset บันทึกข้อมูลได้
ต้องแก้ใขอย่างไร
custom อยู่ที่เครื่อง แม่ข่าย ฟิลด์ code
score อยู่ที่เครื่องลูกข่าย ฟิลด์ sid
รันที่เคลื่องลูกข่าย
ทำรายงานผลของคะแนน เพื่อหาลำดับ
และในรายละเอียด
เขียนคำสั่งเพื่อรัน reccordset
เื่พื่อให้บันทึกรายการลำดับที่ของลูกค้าในการทำคะแนน
ในเทเบิล score
แต่ถ้าเอาเทเบิล score ไปใว้ที่เครื่องแม่ข่ายด้วย
สามารถรันคำสั่ง และ ใช้ reccordset บันทึกข้อมูลได้
ต้องแก้ใขอย่างไร
4 @R04616
การเชื่อมต่อของคุณ ต้องการ การปรับแต่ง คุณสมบัติเพิ่มเติมอีกนิดหน่อยครับ
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ไขข้อมูล
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ เพิ่มข้อมูล
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ ค้นหาข้อมูล
อย่าง Error ที่เกิดดังกล่าว หมายความตามนั้นครับ การเชื่อมต่อของคุณ ไม่สนับสนุน Method findfirst ครับ ให้ลองใช้วิธีเชื่อมต่อแบบอื่นดูครับ
ลองดูเรื่อง Lock record กับเรื่อง Cursor ครับ
ผมไม่แน่ใจรายละเอียดว่าจะต้องเป็นอย่างไรถึงจะใช้ได้กับงานของคุณ แต่ที่บอกคือบอกจุดให้คุณไปลองหาลองปรับแก้ครับ
เช่น Rs.Open "Table1 In \\com1\d\test.mdb", Conn, 1, 3
ถ้า Conn คือ ออปเจคของการเชื่อมต่อ หรือสายอักขระการเชื่อมต่อ (Connection string) เลข 1 กับ เลข 3 นั่นแหละครับ คือตัวที่คุณต้องปรับแต่ง
แต่ในงานของคุณอาจจะไม่ได้ใช้ สายอักขระ ในการเชื่อมต่อแบบ Runtime คุณอาจจะใช้ วิธีสร้าง odbc ก็เป็นได้ ก็ไม่ต้องงง ครับ ให้ไปปรับแต่งคุณสมบัติของ ODBC ตัวนั้นได้เลยคับ มีจุดให้ปรับอยู่แล้วครับ
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ไขข้อมูล
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ เพิ่มข้อมูล
การเชื่อมต่อบางวิธี ไม่สนับสนุน การแก้ ค้นหาข้อมูล
อย่าง Error ที่เกิดดังกล่าว หมายความตามนั้นครับ การเชื่อมต่อของคุณ ไม่สนับสนุน Method findfirst ครับ ให้ลองใช้วิธีเชื่อมต่อแบบอื่นดูครับ
ลองดูเรื่อง Lock record กับเรื่อง Cursor ครับ
ผมไม่แน่ใจรายละเอียดว่าจะต้องเป็นอย่างไรถึงจะใช้ได้กับงานของคุณ แต่ที่บอกคือบอกจุดให้คุณไปลองหาลองปรับแก้ครับ
เช่น Rs.Open "Table1 In \\com1\d\test.mdb", Conn, 1, 3
ถ้า Conn คือ ออปเจคของการเชื่อมต่อ หรือสายอักขระการเชื่อมต่อ (Connection string) เลข 1 กับ เลข 3 นั่นแหละครับ คือตัวที่คุณต้องปรับแต่ง
แต่ในงานของคุณอาจจะไม่ได้ใช้ สายอักขระ ในการเชื่อมต่อแบบ Runtime คุณอาจจะใช้ วิธีสร้าง odbc ก็เป็นได้ ก็ไม่ต้องงง ครับ ให้ไปปรับแต่งคุณสมบัติของ ODBC ตัวนั้นได้เลยคับ มีจุดให้ปรับอยู่แล้วครับ
5 @R04617
เอาโค้ดตั้งแต่เริ่ม procedure จนถึงบรรทัดการทำ FindFirst มาแสดงให้ดูหน่อยครับ
6 @R04618
Private Sub ÊèǹÃÒÂÅÐàÍÕ´_Format(Cancel As Integer, FormatCount As Integer)
Dim dbprompt As Database
Dim rcdcust As Recordset
Set dbprompt = DBEngine.Workspaces(0).Databases(0)
Set rcdcust = dbprompt.OpenRecordset("score")
rcdcust.FindFirst ("[sid] =" & Me![code])
rcdcust.Edit
rcdcust![posi] = [Reports]![posi]![posi]
rcdcust.Update
End Sub
Dim dbprompt As Database
Dim rcdcust As Recordset
Set dbprompt = DBEngine.Workspaces(0).Databases(0)
Set rcdcust = dbprompt.OpenRecordset("score")
rcdcust.FindFirst ("[sid] =" & Me![code])
rcdcust.Edit
rcdcust![posi] = [Reports]![posi]![posi]
rcdcust.Update
End Sub
7 @R04619
ดูแล้วก็ไม่น่าจะมีอะไรผิด ลองคอมพ์ดูหรือยัง ถ้ายังก็ลองทำดูก่อน
8 @R04620
อีกอย่างที่เพิ่งสังเกตุเห็นคือ โค้ดนี้เป็นการอัพเดตข้อมูลระหว่างการสร้างรายงาน โอเคว่าผมไม่รู้จุดประสงค์หรอกนะครับว่ากำลังทำอะไร แต่ค่อน?้างแปลกทีเดียว
9 @R04621
ใน R04619 ผมเขียนผิดนะ ที่ถูกคือ ...ลองคอมไพล์ดูหรือยัง...
10 @R04624
ปัญหาอยู่ที่การแยก เทเบิล
อันหนึ่งเป็นการเชื่อมต่อข้อมูลกับทางแม่ข่าย
คือ เทเบิล custom
ส่วนตัวลูกข่าย ใช้เทเิบิล score
ซึ่งไม่สามารถใช้ recordset ได้
แต่หาก เอาเทเบิล score
ไปไว้ในเครื่องแม่ข่ายด้วย แ้ล้วใช้เชื่อมต่อทั้งหมด
สามารถทำได้
จะแก้ปัญหาี้นี้ไ้ด้หรือไม่
เพราะไม่ยากไปเพิ่มเทเบิลที่แม่ข่าย
อันหนึ่งเป็นการเชื่อมต่อข้อมูลกับทางแม่ข่าย
คือ เทเบิล custom
ส่วนตัวลูกข่าย ใช้เทเิบิล score
ซึ่งไม่สามารถใช้ recordset ได้
แต่หาก เอาเทเบิล score
ไปไว้ในเครื่องแม่ข่ายด้วย แ้ล้วใช้เชื่อมต่อทั้งหมด
สามารถทำได้
จะแก้ปัญหาี้นี้ไ้ด้หรือไม่
เพราะไม่ยากไปเพิ่มเทเบิลที่แม่ข่าย
11 @R04625
คือผมไม่เชื่อว่าปัญหาอยู่ที่การแยกแหล่งที่มาของเทเบิลนะครับ และ error message ก็ไม่ได้หมายถึงเช่นนั้นด้วย
ถ้าคอมไพล์แล้วไม่มีอะไรผิดปกติ ไม่มี error อะไรแสดงออกมา ก็ลองค้นด้วยคำว่า Decompile ในบอร์ดนี้ดูครับ การทำ Decompile และ Compact and Repair Database อาจช่วยได้
ถ้าไม่ได้อีก ผมก็จนปัญญาแล้วครับ
ถ้าคอมไพล์แล้วไม่มีอะไรผิดปกติ ไม่มี error อะไรแสดงออกมา ก็ลองค้นด้วยคำว่า Decompile ในบอร์ดนี้ดูครับ การทำ Decompile และ Compact and Repair Database อาจช่วยได้
ถ้าไม่ได้อีก ผมก็จนปัญญาแล้วครับ
12 @R04630
Dim dbprompt As Database
Dim rcdcust As Recordset
=======================
=======================
Dim dbprompt As DAO.Database
Dim rcdcust As DAO.Recordset
ลองมั่วดู
Dim rcdcust As Recordset
=======================
=======================
Dim dbprompt As DAO.Database
Dim rcdcust As DAO.Recordset
ลองมั่วดู
13 @R04642
ลองดูว่าไฟล์บนเครื่องลูกข่ายนั้นมีกำหนด Windows Security Permission เป็น Read Only หรือไม่
14 @R04643
ปัญหาไม่ได้เกินจากบรรทัด
rcdcust.FindFirst ("[sid] =" & Me![code])
แต่เกิดที่บรรทัด
rcdcust.Edit
rcdcust.FindFirst ("[sid] =" & Me![code])
แต่เกิดที่บรรทัด
rcdcust.Edit
15 @R04644
ทดสอบคร่าว ๆ ดูแล้ว
หลังจากทำเสร็จแล้ว คอมไฟล์เป็น mde ไม่ได้
คาดว่าเกิดจากการทำ sql ที่ตัวรายงาน
มันเืชื่อมต่อกันมากเกินไป
และต้องทำ rank ลำดับที่ของลูกค้าด้วย
ลองเอา rank ออก มันก็ทำงานได้
ต้องไปหาดดู ที่ sql ตอนจัดลำดับที่ มันซ้อนกันอยู่
แต่คำสั่ง sql เดียวกันนี้กลับไม่มีปัญหา
หากเอาเทเบิลทั้งหมดไปอยู่ที่ตัวแม่ข่าย
ปัญหาคือ มันไม่ยอมให้ใช้ rcdcust.findfirst ครับ
มันจะขึ้นสีเหลือที่โค๊ตนี้เลย
rcdcust.FindFirst ("[sid] =" & Me![code])
ขอบคุณทุก ๆ ท่าน และคุณ สันติสุขที่่ช่วยครับ
หลังจากทำเสร็จแล้ว คอมไฟล์เป็น mde ไม่ได้
คาดว่าเกิดจากการทำ sql ที่ตัวรายงาน
มันเืชื่อมต่อกันมากเกินไป
และต้องทำ rank ลำดับที่ของลูกค้าด้วย
ลองเอา rank ออก มันก็ทำงานได้
ต้องไปหาดดู ที่ sql ตอนจัดลำดับที่ มันซ้อนกันอยู่
แต่คำสั่ง sql เดียวกันนี้กลับไม่มีปัญหา
หากเอาเทเบิลทั้งหมดไปอยู่ที่ตัวแม่ข่าย
ปัญหาคือ มันไม่ยอมให้ใช้ rcdcust.findfirst ครับ
มันจะขึ้นสีเหลือที่โค๊ตนี้เลย
rcdcust.FindFirst ("[sid] =" & Me![code])
ขอบคุณทุก ๆ ท่าน และคุณ สันติสุขที่่ช่วยครับ
16 @R04648
ที่ให้ลองทำ คือการคอมไพล์ ซึงไม่ใช่การสร้าง .mde คนละเรื่องกันครับ การคอมไพล์คือการเข้าไปที่ VBEditor แล้วสั่งที่เมนู Debug - Compile xxx สาเหตุที่ให้ลองคอมไพล์เพราะเราอาจเขียน?ะไรที่มันผิด syntax ที่ไหนสักที่ ซึ่งบางที จุดที่ผิดอาจไม่ใช่บรรทัดที่ขึ้นสีเหลืองเลยก็ได้ แต่พอเวลาทำงานมันกลับบอกเราว่าที่ผิดคือตำแหน่งที่บรรทัดสีเหลืองแสดงอยู่ ซึ่งไม่เป็นความจริง มันทำให้เราเข้าใจผิดได้ การแก้ปัญหาก็จะไม่ถูกต้อง แต่เมื่อเราคอมไพล์แล้วมันฟ้องว่าคอมไพล์ไม่ผ่านเพราะติดปัญหาที่บรรทัดไหน แล้วเราแก้ไขบรรทัดนั้นแล้ว การทำงานมันก็จะถูกต้องแล้วครับ หรือถ้ามันทำงานผิด เราก็จะได้บรรทัดสีเหลืองที่ตรงกับความเป็นจริง ก็จะได้แก้ไขได้อย่างถูกต้อง
ต่อมาที่ให้ทำ Decompile ก็เพราะในบางครั้งโค้ดที่ผ่านการคอมไพล์ไปแล้ว (ซึ่งจะถูกเก็บฝังไว้ในไฟล์ .mdb นั่นเอง) ไม่ใช่เป็นโค้ดที่ตรงกับ source code ที่เราเขียนอยู่ ข้างในระบบมันเกิดความผิดพลาดขึ้น คำสั่งที่มันทำงาน มันอาจไม่ใช่บรรทัดที่เราเห็นใน soure code ก็เป็นไปได้ ส่วนใหญ่จะเกิดปัญหาแบบนี้เมื่อรันโปรแกรมไป แก้ source code ไป แต่เมื่อทำการ Decompile แล้ว โค้ดที่ผ่านการคอมไพล์ที่ฝังอยู่ในไฟล์ .mdb จะถูกเคลียร์ทิ้งทั้งหมด ดังนั้นเมื่อรันใหม่หรือคอมไพล์ใหม่ การทำงานก็จะตรงกับ source code แล้วครับ
คือจะมานั่งเล่าสาเหตุว่าทำไมถึงให้ทำอย่างนั้นอย่างนี้ บางทีมันก้เสียเวลามากๆครับ ถ้าบอกอย่างแล้วทำอย่าง หรือไม่ได้ทำ ก็จะแก้ไขปัญหาไม่ได้ครับ
ต่อมาที่ให้ทำ Decompile ก็เพราะในบางครั้งโค้ดที่ผ่านการคอมไพล์ไปแล้ว (ซึ่งจะถูกเก็บฝังไว้ในไฟล์ .mdb นั่นเอง) ไม่ใช่เป็นโค้ดที่ตรงกับ source code ที่เราเขียนอยู่ ข้างในระบบมันเกิดความผิดพลาดขึ้น คำสั่งที่มันทำงาน มันอาจไม่ใช่บรรทัดที่เราเห็นใน soure code ก็เป็นไปได้ ส่วนใหญ่จะเกิดปัญหาแบบนี้เมื่อรันโปรแกรมไป แก้ source code ไป แต่เมื่อทำการ Decompile แล้ว โค้ดที่ผ่านการคอมไพล์ที่ฝังอยู่ในไฟล์ .mdb จะถูกเคลียร์ทิ้งทั้งหมด ดังนั้นเมื่อรันใหม่หรือคอมไพล์ใหม่ การทำงานก็จะตรงกับ source code แล้วครับ
คือจะมานั่งเล่าสาเหตุว่าทำไมถึงให้ทำอย่างนั้นอย่างนี้ บางทีมันก้เสียเวลามากๆครับ ถ้าบอกอย่างแล้วทำอย่าง หรือไม่ได้ทำ ก็จะแก้ไขปัญหาไม่ได้ครับ
17 @R04658
ขอโทษด้วยครั
คือผมไม่เ้ข้าใจเรื่องการ คอมไฟล์
เลยเข้าใจว่า ต้องทำ mde. เื่พื่อหาที่ผิดพลาด
แล้วการทำ debug-compile
ก็ไม่รู้เหมือนกันว่าทำอย่างไร
แต่จะทดลองดูครับ
ขอบคุณครับที่ช่วยหาวิธีให้
ผมจะลองดูอีกทีครับ
เรื่องการเขียนโค๊ค ก็มั่ว ๆ เอาครับ ไม่ได้เรียนมาทางนี้
อ่านหนังสือเอา เลยอธิบายไม่ค่อยถูก
อาจทำให้ผู้ที่ช่วยไม่เข้าใจปัญหา
ต้องขอโทษอีกทีครับ
คือผมไม่เ้ข้าใจเรื่องการ คอมไฟล์
เลยเข้าใจว่า ต้องทำ mde. เื่พื่อหาที่ผิดพลาด
แล้วการทำ debug-compile
ก็ไม่รู้เหมือนกันว่าทำอย่างไร
แต่จะทดลองดูครับ
ขอบคุณครับที่ช่วยหาวิธีให้
ผมจะลองดูอีกทีครับ
เรื่องการเขียนโค๊ค ก็มั่ว ๆ เอาครับ ไม่ได้เรียนมาทางนี้
อ่านหนังสือเอา เลยอธิบายไม่ค่อยถูก
อาจทำให้ผู้ที่ช่วยไม่เข้าใจปัญหา
ต้องขอโทษอีกทีครับ
18 @R04661
เรียกว่าทำ Decompile (ดีคอมไพล์) ครับ ไม่ใช่ debug-compile วิธีการไปดูได้ในนี้ http://www.thai-access.com/yeadram_view.php?topic_id=128
Time: 0.3095s