กระทู้เก่าบอร์ด อ.Yeadram
2,365 7
URL.หัวข้อ /
URL
เลือก Database เพื่อสร้าง Table โดย SQL Statement
ถ้าผมมี Database ที่อ้างไว้ 2 ตัว
1.ตัวที่เป็น CrrentDB
2.DB ที่อ้างถึงจากภายนอก เช่น
Dim db As Database
Set db = Workspaces(0).OpenDatabase("c:\database\newdon.mdb")
ด้วยคำสั่งนี้
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
DoCmd.RunSQL (Sql)
ผมสามารถสร้าง TABLE ใน CurrentDB ได้
คำถามคือมันเป็นไปได้ไหมครับ ที่ผมจะสั่งให้มันสร้าง TABLE ใน db ด้วยคำสั่งเดียวกันโดยไม่ใช้วิธีของ DAO(วิธีของ DAO ผมว่าคำสั่งมันยาว ใช้ SQL นี่แหละ)
1.ตัวที่เป็น CrrentDB
2.DB ที่อ้างถึงจากภายนอก เช่น
Dim db As Database
Set db = Workspaces(0).OpenDatabase("c:\database\newdon.mdb")
ด้วยคำสั่งนี้
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
DoCmd.RunSQL (Sql)
ผมสามารถสร้าง TABLE ใน CurrentDB ได้
คำถามคือมันเป็นไปได้ไหมครับ ที่ผมจะสั่งให้มันสร้าง TABLE ใน db ด้วยคำสั่งเดียวกันโดยไม่ใช้วิธีของ DAO(วิธีของ DAO ผมว่าคำสั่งมันยาว ใช้ SQL นี่แหละ)
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R06039
อ.ครับ Code นี้ใช้ได้ผลดี กับ DATABASE ที่เป็น ACCESS ด้วยกัน
ผมไปทดลองใช้กับ MySQL
strConnection = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=P3;PORT=3306;DATABASE=pos; USER=sa;PASSWORD=sa;OPTION=3;"
Set db = DBEngine(0).OpenDatabase("", False, False, strConnection)
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
db.Execute Sql
สามารถตรวจนับตารางได้ ,และก็แน่ใจว่าเป็นสิทธิ Admin
แต่ถูกปฎิเสธในการเพิ่ม TABLE สาเหตุมันน่าจะเป็นเรื่องอะไรครับ
Cannot perform this operation. (Error 3032)
ผมไปทดลองใช้กับ MySQL
strConnection = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=P3;PORT=3306;DATABASE=pos; USER=sa;PASSWORD=sa;OPTION=3;"
Set db = DBEngine(0).OpenDatabase("", False, False, strConnection)
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
db.Execute Sql
สามารถตรวจนับตารางได้ ,และก็แน่ใจว่าเป็นสิทธิ Admin
แต่ถูกปฎิเสธในการเพิ่ม TABLE สาเหตุมันน่าจะเป็นเรื่องอะไรครับ
Cannot perform this operation. (Error 3032)
3 @R06046
ยังไม่แน่ใจว่าเกิดจากอะไร ก็ลองว่า
- บรรทัดที่ Dim db As DAO.Database ให้มีคำว่า DAO ด้วยนะครับ
- ถ้าเปลี่ยนจากการ Create Table ไปเป็นอ่านข้อมูลจากเทเบิลแทน จะทำได้หรือไม่ครับ
- บรรทัดที่ Dim db As DAO.Database ให้มีคำว่า DAO ด้วยนะครับ
- ถ้าเปลี่ยนจากการ Create Table ไปเป็นอ่านข้อมูลจากเทเบิลแทน จะทำได้หรือไม่ครับ
4 @R06053
ขออนุญาต แทรกครับ
ไม่ทราบคุณ Krathok-man มีโปรแกรมอื่นๆ ที่จัดการกับ MySQL บ้างหรือเปล่า เช่น phpmyadmin เป็นต้น
ให้ลองนำสายอักขระนี้ไปลองรันกับโปรแกรมนั้นๆ ดูก่อน ว่า มันอ่านได้หรือไม่ คือก็อปปี้ไปรันตรงๆ ดูก่อนครับ CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));
ผมไม่ค่อยแน่ใจกับข้อสันนิษฐานนี้เท่าไหร่ แต่ก็เพราะเจอบ่อยๆ เลยลองเดาเอาว่า
มาตรฐาน SQL ของแต่ละชนิดDatabase มีความต่างกันเล็กน้อย
สายอักขระเดียวกันที่เคยอ่านได้ใน Access อาจจะไม่ถูกอ่านได้ใน MySQL
สายอักขระเดียวกันที่เคยอ่านได้ใน MS SQL อาจจะไม่สามารถอ่านได้ใน Access
โดยเฉพาะผมเคยเจอบ่อย ประมาณว่า ถ้าจะให้ Access อ่านออกคุณต้องใส่วงเล็บคร่อมส่วนนี้ไว้ แต่ถ้าเอาไปอ่านโดย MySQL มันบอกว่า ไม่ต้องใส่วงเล็บมานะ ถ้าใส่มา มันจะไม่อ่านเลย
อิอิ หรือผมเข้าใจผิดไปเอง อิอิ...
แต่จริงๆ นะผมเคยแก้ปัญหาแบบมั่วๆ แบบนี้แล้วได้ผล ก็ยังงงๆ เหมือนกัน "ทำไมพวกมันมองความสำคัญหรือความจำเป็นของวงเล็บไม่เหมือนกัน"
ไม่ทราบคุณ Krathok-man มีโปรแกรมอื่นๆ ที่จัดการกับ MySQL บ้างหรือเปล่า เช่น phpmyadmin เป็นต้น
ให้ลองนำสายอักขระนี้ไปลองรันกับโปรแกรมนั้นๆ ดูก่อน ว่า มันอ่านได้หรือไม่ คือก็อปปี้ไปรันตรงๆ ดูก่อนครับ CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));
ผมไม่ค่อยแน่ใจกับข้อสันนิษฐานนี้เท่าไหร่ แต่ก็เพราะเจอบ่อยๆ เลยลองเดาเอาว่า
มาตรฐาน SQL ของแต่ละชนิดDatabase มีความต่างกันเล็กน้อย
สายอักขระเดียวกันที่เคยอ่านได้ใน Access อาจจะไม่ถูกอ่านได้ใน MySQL
สายอักขระเดียวกันที่เคยอ่านได้ใน MS SQL อาจจะไม่สามารถอ่านได้ใน Access
โดยเฉพาะผมเคยเจอบ่อย ประมาณว่า ถ้าจะให้ Access อ่านออกคุณต้องใส่วงเล็บคร่อมส่วนนี้ไว้ แต่ถ้าเอาไปอ่านโดย MySQL มันบอกว่า ไม่ต้องใส่วงเล็บมานะ ถ้าใส่มา มันจะไม่อ่านเลย
อิอิ หรือผมเข้าใจผิดไปเอง อิอิ...
แต่จริงๆ นะผมเคยแก้ปัญหาแบบมั่วๆ แบบนี้แล้วได้ผล ก็ยังงงๆ เหมือนกัน "ทำไมพวกมันมองความสำคัญหรือความจำเป็นของวงเล็บไม่เหมือนกัน"
5 @R06061
สงสัยเป็นเรื่อง ของไวยากรณ์ ที่ไม่ตรงกัน ลองเอาไป Run ใน Navicat มัน ก็ไม่สามารถสร้าง Table ได้เช่นกัน คงต้องไปดูต่อว่า MySql มันให้เขียนอย่างไร
ขอบคุณครับ
ขอบคุณครับ
6 @R06062
ไม่ใช่แล้ว ครับ ไม่ใช่เรื่องไวยากรณ์ ลองตรวจสอบดูดีๆ และลองใช้วิธีนี้
Dim Wk As Workspace
Dim Con1 As Connection
Set Wk = CreateWorkspace("newodbcworkspace", "sa", "", dbUseODBC)
Set Con1 = Wk.OpenConnection("connection1", , True, "odbc;database=xp_c;dsn=xp_c")
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
Con1.Execute (Sql)
ถ้าใช้ Object ที่เป็น Connection มันผ่าน ฉลุยครับ
ถ้าเป็น Object ที่เป็น Database ก็เจอปํญหาอย่างข้างบน
สรุปว่าทำได้แล้ว แบบ งง ถ้า อ. จะช่วยอธิบายต่อว่า ทำไม???
Connection มันต่างจาก Dao.database อย่างไร แล้วเมื่อไรจะเลือกใช้ตัวไหน
ก็จะเป็นพระคุณครับ
Dim Wk As Workspace
Dim Con1 As Connection
Set Wk = CreateWorkspace("newodbcworkspace", "sa", "", dbUseODBC)
Set Con1 = Wk.OpenConnection("connection1", , True, "odbc;database=xp_c;dsn=xp_c")
Dim Sql As String
Sql = "CREATE TABLE customer1 (First_Name char(50),Last_Name char(50));"
Con1.Execute (Sql)
ถ้าใช้ Object ที่เป็น Connection มันผ่าน ฉลุยครับ
ถ้าเป็น Object ที่เป็น Database ก็เจอปํญหาอย่างข้างบน
สรุปว่าทำได้แล้ว แบบ งง ถ้า อ. จะช่วยอธิบายต่อว่า ทำไม???
Connection มันต่างจาก Dao.database อย่างไร แล้วเมื่อไรจะเลือกใช้ตัวไหน
ก็จะเป็นพระคุณครับ
7 @R06063
ผมมือใหม่ อยากรู้ว่า การจะสร้างกราฟ ให้มีreportในVB2005 ออกมาเป็นกราฟ แล้วพิมพ์ได้เป็นสถิติ ผมต้องเขียนหรือออกแบบcode อย่างไรครับ ขอบคุณครับ
Time: 0.2192s
Set db = ...
db.Execute Sql
db.Close: Set db = Nothing