กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
645 7
URL.หัวข้อ /
URL
ทำไมผมถึงไม่สามารถ insert หรือ update ตารางที่เชื่อมมาจาก sql7 ได้ครับ
คือผมกำลังหัดเล่น sql7 + access โดยผมมีคอมพิวเตอร์ 3 ตัว ต่อ lan ดังนี้ครับ
คอมตัวแรกผมทำ server ลง winNT4 + sql7
คอมตัวที่ 2 เป็น client ลง access97
คอมตัวที่ 3 เป็น client ลง access2k
ที่ server ผมลอง import ตารางจาก access เข้าไปใน db ก็ไม่มีปัญหาอะไรครับ
สามารถเปิดดูตาราง แม้ว่าจะแสดงผลภาษาไทยไม่ได้ ก็ไม่ซีเรียส
ทั้งนี้ผมได้สร้าง file dsn ไว้ในเครื่องลูกทั้งสองเครื่องแล้วผมลองใช้ access97 ลิงค์ตารางจาก server
ผ่าน odbc มาไว้ใน access ได้แล้ว ผมลองเปิดตาราง
ดู กลับไม่สามารถเพิ่ม หรือแก้ไขเรคคอร์ดในตารางได้ครับ ไม่รู้ว่าเป็นเพราะอะไร (ดูและทำตาม
หนังสือของอาจารย์บัณฑิต จามรภูติ หน้าปกสีขาว ในหนังสือเขาทำได้)
ทั้งนี้ ผมได้ลองใช้ adp ใน access2k ลองลิงค์ตารางจาก server โดยไม่ผ่าน odbc บ้าง ปรากฏว่า
ลิงค์ตารางได้เหมือนกันครับ แต่ก็แก้ไขเพิ่มข้อมูลไม่ได้เหมือนกันครับ
ไม่รู้ว่าผมตั้งค่า อะไรใน sql7 ไม่ถูกต้อง หรือเปล่าครับ หรือมีวิธีการที่ง่ายกว่านี้ อย่างไรผมขอคำแนะนำด้วยครับ
เพราะยังมือใหม่ ไม่ค่อยเข้าใจเรื่อง database server นัก
คอมตัวแรกผมทำ server ลง winNT4 + sql7
คอมตัวที่ 2 เป็น client ลง access97
คอมตัวที่ 3 เป็น client ลง access2k
ที่ server ผมลอง import ตารางจาก access เข้าไปใน db ก็ไม่มีปัญหาอะไรครับ
สามารถเปิดดูตาราง แม้ว่าจะแสดงผลภาษาไทยไม่ได้ ก็ไม่ซีเรียส
ทั้งนี้ผมได้สร้าง file dsn ไว้ในเครื่องลูกทั้งสองเครื่องแล้วผมลองใช้ access97 ลิงค์ตารางจาก server
ผ่าน odbc มาไว้ใน access ได้แล้ว ผมลองเปิดตาราง
ดู กลับไม่สามารถเพิ่ม หรือแก้ไขเรคคอร์ดในตารางได้ครับ ไม่รู้ว่าเป็นเพราะอะไร (ดูและทำตาม
หนังสือของอาจารย์บัณฑิต จามรภูติ หน้าปกสีขาว ในหนังสือเขาทำได้)
ทั้งนี้ ผมได้ลองใช้ adp ใน access2k ลองลิงค์ตารางจาก server โดยไม่ผ่าน odbc บ้าง ปรากฏว่า
ลิงค์ตารางได้เหมือนกันครับ แต่ก็แก้ไขเพิ่มข้อมูลไม่ได้เหมือนกันครับ
ไม่รู้ว่าผมตั้งค่า อะไรใน sql7 ไม่ถูกต้อง หรือเปล่าครับ หรือมีวิธีการที่ง่ายกว่านี้ อย่างไรผมขอคำแนะนำด้วยครับ
เพราะยังมือใหม่ ไม่ค่อยเข้าใจเรื่อง database server นัก
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04824
แล้วถ้าตารางที่เป็น transaction จะทำอย่างไรล่ะครับ ในเมื่อไม่สามารถลบ แก้ไข หรือเพิ่มข้อมูลได้
3 @R04826
อีกคำถามต่อเนื่องครับ
แล้วทำไม sqlserver มันมีข้อจำกัดอะไรหรือครับ ถึงต้องกำหนด pk ให้กับทุกตารางด้วย (ไม่เข้าใจจริงๆ)
แล้วทำไม sqlserver มันมีข้อจำกัดอะไรหรือครับ ถึงต้องกำหนด pk ให้กับทุกตารางด้วย (ไม่เข้าใจจริงๆ)
4 @R04839
ยังมีอีกหลายอย่างที่ต้องทำความเข้าใจในความแตกต่างระหว่าง SQL Server ลองอ่านกระทู้นี้เพิ่มเติมครับ
http://www.sqlservercentral.com/forum/topic.asp?TOPIC_ID=14723&FORUM_ID=20&CAT_ID=2&Topic_Title=Can%27t+edit+SQL+data+through+access+after+save&Forum_Title=Connecting
ซึ่งจะเป็นกับ PostgreSQL ด้วย ซึ่งมันจะถามตอนที่ Link ผ่าน ODBC ด้วย จึงต้องกำหนด Primary ด้วย
ส่วนการ Connect โดยใช้ ADO กับ Oracle จะต้องใส่ 2 บรรทัดสีเขียวด้วย จึงจะสามารถแก้ไขข้อมูลของ Oracle ใน Access ได้
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "MSDAORA"
.Properties("Data Source").Value = "basiceng"
.Properties("User ID").Value = "scott"
.Properties("Password").Value = "tiger"
.Open
End With
ส่วนการใช้ CDbl() ใน Access กับ ใน SQL Server ก็จะให้ผลต่างกันด้วย เช่น
CDbl(Date) จะไม่เท่ากับ select convert(float, getdate())
http://www.sqlservercentral.com/forum/topic.asp?TOPIC_ID=14723&FORUM_ID=20&CAT_ID=2&Topic_Title=Can%27t+edit+SQL+data+through+access+after+save&Forum_Title=Connecting
ซึ่งจะเป็นกับ PostgreSQL ด้วย ซึ่งมันจะถามตอนที่ Link ผ่าน ODBC ด้วย จึงต้องกำหนด Primary ด้วย
ส่วนการ Connect โดยใช้ ADO กับ Oracle จะต้องใส่ 2 บรรทัดสีเขียวด้วย จึงจะสามารถแก้ไขข้อมูลของ Oracle ใน Access ได้
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "MSDAORA"
.Properties("Data Source").Value = "basiceng"
.Properties("User ID").Value = "scott"
.Properties("Password").Value = "tiger"
.Open
End With
ส่วนการใช้ CDbl() ใน Access กับ ใน SQL Server ก็จะให้ผลต่างกันด้วย เช่น
CDbl(Date) จะไม่เท่ากับ select convert(float, getdate())
5 @R04842
ขอบคุณอาจารย์สุภาพมากครับ
ผมลองสร้าง pk ดูแล้ว ใช้ได้ตามที่อาจารย์บอกเลย
ลองไปอ่านกระทู้ที่แนะนำแล้วครับ ผมไม่ค่อยเชี่ยวภาษาอังกฤษเท่าไหรนัก แต่พอเข้าใจว่าถ้าในเทเบิลมีฟิลด์ประเภท text และกำหนดค่าเป็น nullไ ด้จะทำให้เกิดปัญหาดังกล่าวหรือเปล่า (ไม่รู้ว่าผมแปลถูกหรือเปล่านะครับ ถ้าผิดอย่างไรขอคำแนะนำจากอาจารย์สุภาพด้วยครับ)
สรุปคำถามอีกครั้งครับ คือ ทุกเทเบิลควรจะต้องกำหนด pk เพื่อให้สามารถกระทำการกับตารางผ่าน link table ได้ใช่หรือเปล่าครับ ไม่ว่าจะเป็น sqlserver, postgreSQL, mySql เป็นเหมือนกันหมดใช่หรือไม่ครับ
ถ้าใช่ ผมจะได้ออกแบบฐานข้อมูลใหม่ครับ
อย่างไรขอคำตอบจากประสบการณ์ทุกท่านด้วยครับ ขอบคุณทุกคำตอบครับ
ผมลองสร้าง pk ดูแล้ว ใช้ได้ตามที่อาจารย์บอกเลย
ลองไปอ่านกระทู้ที่แนะนำแล้วครับ ผมไม่ค่อยเชี่ยวภาษาอังกฤษเท่าไหรนัก แต่พอเข้าใจว่าถ้าในเทเบิลมีฟิลด์ประเภท text และกำหนดค่าเป็น nullไ ด้จะทำให้เกิดปัญหาดังกล่าวหรือเปล่า (ไม่รู้ว่าผมแปลถูกหรือเปล่านะครับ ถ้าผิดอย่างไรขอคำแนะนำจากอาจารย์สุภาพด้วยครับ)
สรุปคำถามอีกครั้งครับ คือ ทุกเทเบิลควรจะต้องกำหนด pk เพื่อให้สามารถกระทำการกับตารางผ่าน link table ได้ใช่หรือเปล่าครับ ไม่ว่าจะเป็น sqlserver, postgreSQL, mySql เป็นเหมือนกันหมดใช่หรือไม่ครับ
ถ้าใช่ ผมจะได้ออกแบบฐานข้อมูลใหม่ครับ
อย่างไรขอคำตอบจากประสบการณ์ทุกท่านด้วยครับ ขอบคุณทุกคำตอบครับ
6 @R04843
Integer ใน SQL Server ถ้าเป็น bigint มีค่าตั้งแต่ -9223372036854775807 ถึง 223372036854775807
ส่วนใน Access จะมีค่าสูงสุดแค่ Long -2147483647 ถึง 2147483647 ซึ่งจะเรียกว่า int ใน SQL Server
และถ้าเป็น smallint จะเท่ากัน integer ใน Access ครับ คือระหว่าง -32,768 ถึง 32,767
ถ้าเรากำหนดตารางให้เป็นแบบ bigint จะไม่สามารถแก้ไขหรือใส่ข้อมูลเพิ่มใน Access ได้
ส่วน PostgreSQL ที่ผมเจอคือ จะมีฟีลด์เป็นประเภท point ที่ใช้เป็นแบบ Array ในการบอกตำแหน่งแกน x และ y จะไม่สามารถเปิดได้ใน Access เช่นกัน เพราะ Access ไม่สนับสนุนครับ
แต่ถ้าไม่มีการ Link เข้ามาเป็น Table ใน Access จะไม่มีปัญหาอะไรครับ เหมือนอย่างที่ VB หรือ Java ใช้ในการ View, Add, Edit เพราะทำงานผ่าน Recordset
ส่วนใน Access จะมีค่าสูงสุดแค่ Long -2147483647 ถึง 2147483647 ซึ่งจะเรียกว่า int ใน SQL Server
และถ้าเป็น smallint จะเท่ากัน integer ใน Access ครับ คือระหว่าง -32,768 ถึง 32,767
ถ้าเรากำหนดตารางให้เป็นแบบ bigint จะไม่สามารถแก้ไขหรือใส่ข้อมูลเพิ่มใน Access ได้
ส่วน PostgreSQL ที่ผมเจอคือ จะมีฟีลด์เป็นประเภท point ที่ใช้เป็นแบบ Array ในการบอกตำแหน่งแกน x และ y จะไม่สามารถเปิดได้ใน Access เช่นกัน เพราะ Access ไม่สนับสนุนครับ
แต่ถ้าไม่มีการ Link เข้ามาเป็น Table ใน Access จะไม่มีปัญหาอะไรครับ เหมือนอย่างที่ VB หรือ Java ใช้ในการ View, Add, Edit เพราะทำงานผ่าน Recordset
7 @R04844
และอีกเรื่องที่เขาบอกไว้คือ ถ้าเป็นฟีลด์ที่กำหนดให้เป็น BIT หรือ Yes/No, True/False ถ้ามี Record ใดมีค่า Null ก็จะไม่สามารถแก้ไขอะไรใน Access ได้ถ้าเป็นแบบเป็นตารางครับ
Time: 0.1333s
ถ้ากำหนดให้ฟีลด์ใดๆ เป็น Primary Key แล้ว ก็จะสามารถ Insert หรือ Update ข้อมูลได้ปกติครับ