Linked Table
กระทู้เก่าบอร์ด อ.Yeadram

 1,535   4
URL.หัวข้อ / URL
Linked Table

สวัสดีครับ อาจารย์

           ผมรบกวนเรื่องการทำ Linked table หน่อยครับ
ซึ่งปกติผมก็จะใช้การ Linked ปกติ แต่ปัญหาก็คือ มีหลาย table
เวลาเปลี่ยน path Lnked ใหม่เหนื่อยมาก เพราะต้องทำทีละ
table
            เราสามารถทำวิธีอื่นที่เร็วกว่านี้ ได้หรือเปล่าครับ
อย่างเช่น เขียน vb ครับ

             รบกวนด้วยครับ อาจารย์

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R06204
ตย.ข้างล่างนี้เฉพาะการลิงค์ไปยัง .mdb หรือ .mda ไฟล์เท่านั้น

Public Sub ChangeLinkedMDB()
    Dim DB As DAO.Database
    Dim TD As DAO.TableDef

    Set DB = CurrentDb
    For Each TD In DB.TableDefs
        If (TD.Attributes And dbAttachedTable) = dbAttachedTable Then
            TD.Connect = ";c:\...\file.mdb"   ' ต้องมี semicolon อยู่ข้างหน้า
            TD.RefreshLink
        End If
    Next TD
    DB.Close : Set DB = Nothing
End Sub
2 @R06205
สวัสดีครับ
    ผมรบกวนอธิบาย และวิธีใช้ด้วยครับผม
3 @R06209
ก็ไม่มีอะไรมาก

- For each TD .... ก็เป็นการวนลูป โดยกำหนด object variable TD ให้เป็นทีละเทเบิลในฐานข้อมูล

- TD.Attributes จะให้ค่าเท่ากับ dbAttachedTable เมื่อเทเบิลนั้นเป็น Linked Table ที่ลิงค์มาจากฐานข้อมูลประเภท Access ด้วยกันเอง (พวก .mdb, .mda) แต่ถ้าลิงค์มาจาก ODBC จะให้เป็นค่า dbAttachedODBC โดยปกติผมคิดว่า 99.99% เราสามารถทดสอบด้วยคำสั่ง If TD.Attributes = dbAttachedTable then ได้โดยตรง แต่เนื่องจาก .Attributes อาจมีค่าเกิดจากการรวมหลายๆ option เข้าด้วยกัน ด้วย logical OR (แต่ผมก็ไม่ทราบเหมือนกันว่ามันจะรวมกับ option อื่นอย่างไรได้บ้าง) ดังนั้นเพื่อให้แน่ใจเต็ม 100% เวลาจะทดสอบกรองเอาเพื่อดูว่ามีค่าของ dbAttachedTable อยู่ในส่วนผสมนั้นหรือไม่ ก็ต้องทดสอบด้วย logical AND (ตรงนี้คิดว่าหลายๆท่านก็คงจะทราบดีอยู่แล้ว) คำสั่ง If ที่เขียนให้ดูเลยออกมาเป็นอย่างนั้น

- TD.Connect ก็เป็นการกำหนดชื่อพาธและไฟล์ที่จะลิงค์เข้ามา เนื่องจากเราลิงค์มาจากเทเบิลต้นทางที่ชื่อเดิมเสมอ (ชื่อเดียวกันกับที่เราลิงค์มาครั้งแรก) ดังนั้นจึงไม่ต้องบอกมันอีกว่ามาจากเทเบิลชื่ออะไร

- TD.RefreshLink เพื่อให้ Access มันดึงเอาข้อมูลจำเป็นอื่นๆของเทเบิลนั้นๆจากฐานข้อมูลใหม่ แม้ว่าจะเป็นฐานข้อมูลเดิม แต่เมื่อมีการเปลี่ยนแปลงอะไรไปในโครงสร้างเทเบิลต้นทาง แม้จะเพียงเล็กน้อยก็ตาม ก็ควรจะสั่ง RefreshLink มาใหม่เสมอ
4 @R06210
อ่อ ... ส่วนวิธีการใช้ก็เอาโค้ดนี้ไปใส่ไว้ใน Module ใหม่ หรือจะ Module เดิมที่มีแล้วก็ได้ แล้วก็กด Ctrl-G เพื่อเปิด Immediate Windows แล้วคีย์คำว่า ChangeLinkedMDB กด Enter เท่านั้นเอง

อย่างไรก็ตามก๊อปปี้ฐานข้อมูลเดิมก่อนทำลิงค์ใหม่ก็จะดี เผื่อมีอะไรผิดพลาดจะได้ไม่เสียเวลามาลิงค์กลับไป
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2605s