รบกวนช่วยดู code สำหรับสร้าง link table ให้หน่อยครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

01 ก.พ. 65 , 09:35:24
อ่าน 517 ครั้ง

chai

ลองสร้าง code link table จาก ODBC ดังนี้
Private Sub Command0_Click()
   
    DoCmd.DeleteObject acTable, "table_chai_leave_main"
   
    DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DATABASE=ps_hospital_management;DNS=hos_management_mysql_sever243;OPTION=0;PORT=3306;SERVER=192.168.0.243;LANGUAGE=Thai;", acTable, "table_chai_leave_main", "table_chai_leave_main"
End Sub
แต่เมื่อกดปุ่มคำสั่ง ก็ปรากฏ หน้าจอถาม Data Source ODBC อีก ทั้งที่ใน code ก็ใส่ DNS แล้ว ไม่ทราบว่าต้องแก้ไขอย่างไรครับ อยากให้กดปุ่มแล้วให้สร้าง link table ให้เลย


 

01 ก.พ. 65 , 10:37:07
ตอบกลับ #1

OddyWriter

วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 
โพสต์นี้ได้รับคำขอบคุณจาก: chai

02 ก.พ. 65 , 09:22:51
ตอบกลับ #2

chai

ลอง code แล้ว ไม่มีอะไรเกิดขึ้นเลย ไม่สร้าง link table ให้ ผิดพลาดตรงไหนครับ

Option Compare Database

Private Sub Command0_Click()
Dim strConnect As String

strConnect = "ODBC;DRIVER={MySQL ODBC 3.51 Driver};Server=192.168.0.243;Database=dental_stock;Uid=admin;Pwd=12345;Option=3"
Call relink_mysql_tables(strConnect)

End Sub
Public Sub relink_mysql_tables(mysql_connection As String)

Dim db As DAO.Database
Dim tblDef As DAO.TableDef
Dim sLocalTableName As String
Dim sRemoteTableName As String

' new collection '
Dim newTableDefs As New Collection

' current database '
Set db = CurrentDb()

' create new table defs '
For Each tblDef In db.TableDefs
    If (tblDef.Attributes And TableDefAttributeEnum.dbAttachedODBC) Then
        sLocalTableName = tblDef.Name
        sRemoteTableName = tblDef.SourceTableName

        ' create new linked table def '
        Set tblDef = db.CreateTableDef(sLocalTableName, dbAttachSavePWD, sRemoteTableName, mysql_connection)
        newTableDefs.Add tblDef

    End If
Next

' delete old table defs '
For Each tblDef In newTableDefs
    db.TableDefs.Delete tblDef.Name
Next

' add new table defs to current database '
For Each tblDef In newTableDefs
    db.TableDefs.Append tblDef
Next
End Sub

 

02 ก.พ. 65 , 09:40:13
ตอบกลับ #3

sjs

ผมใช้แบบนี้

 
โพสต์นี้ได้รับคำขอบคุณจาก: chai

02 ก.พ. 65 , 09:46:59
ตอบกลับ #4

chai

@SJS code นี้ต้องอาศัย DNS ใช่มั้ยครับ
เดี๋ยวลองดู ขอบคุณครับ

 

02 ก.พ. 65 , 10:10:15
ตอบกลับ #5

chai

@SJS ลอง code แล้ว ปัญหาเหมือนเดิม คือ จะต้องเลือก DNS เสมอ จึงจะสร้าง link ให้ครับ



 

02 ก.พ. 65 , 13:27:59
ตอบกลับ #6

sjs

Windows อะไรครับ Office Version ไหน
ของผมเทสกับ Windows 10 , Office 2016 ก็ได้นะ ของผมสร้างไว้ที่นี่ครับ


 

02 ก.พ. 65 , 14:20:55
ตอบกลับ #7

TTT

ตัวอย่างที่ผมเคยทำและเก็บไว้นะครับ แต่ผมใช้กับ SQL SERVER ไม่เคยลองกับ MySQL นะครับ

- ต้องการลิ้งค์ตารางชื่อ Table1 จาก SQL Server เข้ามายัง MS Access 
- ข้อมูล SQL SERVER
--------------------------
Server Name  : ASPIRE-ONE
Database Name: Demo
Login        : sa
Password     : Abc!23
--------------------------
 
<DAO>
'----------------Code Start----------------
Sub LinkSQL_DAO()
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Set db = CurrentDb
    Set tdf = db.CreateTableDef("dbo_Table1") 'ชื่อตารางที่ลิ้งค์เข้ามาใหม่
    tdf.Connect = "ODBC;Driver=SQL SERVER;SERVER=ASPIRE-ONE;UID=sa;PWD=Abc!23;Database=Demo;"
    tdf.SourceTableName = "Table1" 'ชื่อตารางเป้าหมายที่เครื่อง SQL Server
    db.TableDefs.Append tdf
'-------- หากต้องการลิ้งค์เพิ่มอีกตาราง  -------------------- 
'    Set tdf = db.CreateTableDef("dbo_Table2")
'    tdf.Connect = "ODBC;Driver=SQL SERVER;SERVER=ASPIRE-ONE;UID=sa;PWD=Abc!23;Database=Demo;"
'    tdf.SourceTableName = "Table_2"
'    db.TableDefs.Append tdf
'--------------------------------------------------
'-------- หากต้องการลบลิ้งค์ตาราง  --------------------
'    db.TableDefs.Delete "dbo_Table1"
'--------------------------------------------------
    db.Close: Set db = Nothing
End Sub
'-----------------Code End-----------------
 
* หมายเหตุ: คำสั่งนี้จะไม่สามารถเซฟรหัสผ่านได้ ทุกครั้งที่เปิดไฟล์ฐานข้อมูล MS Access ใหม่แล้วเรียกลิ้งค์ตารางที่สร้างจะต้องใส่รหัสผ่านใหม่ในครั้งแรกเสมอ จึงเหมาะกับการใช้งานชั่วคราว หรืออาจต้องใช้คำสั่งลบลิ้งค์ตารางแล้วสร้างใหม่ทุกครั้งเมื่อเปิดไฟล์แทน
ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator
 
โพสต์นี้ได้รับคำขอบคุณจาก: chai, sjs, Max

02 ก.พ. 65 , 15:02:17
ตอบกลับ #8

chai

@SJS Windows 10 64 bit,Office 2010 32 bit,Mysql ครับ
มันสร้าง link ให้นะครับ แต่จะเปิดหน้าต่างให้เลือก DNS ทุกครั้งต่อทุกๆ link table สิ่งที่ต้องการคือ ให้สร้าง link table ทันที ตาม server ที่ set ใน vba ครับ

 

02 ก.พ. 65 , 15:30:14
ตอบกลับ #9

chai

code คุณ TTT ใช้ได้เลยครับ

Private Sub Command1_Click()
Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Set db = CurrentDb
    Set tdf = db.CreateTableDef("department")
   
    tdf.Connect = "ODBC;DRIVER={MySQL ODBC 3.51 Driver};Server=192.168.0.243;Database=dental_stock;UID=sa;PWD=sa1234;Option=3"
    tdf.SourceTableName = "department"
    db.TableDefs.Delete "department"
    db.TableDefs.Append tdf

    Set tdf = db.CreateTableDef("vendor")
   
    tdf.Connect = "ODBC;DRIVER={MySQL ODBC 3.51 Driver};Server=192.168.0.243;Database=dental_stock;UID=sa;PWD=sa1234;Option=3"
    tdf.SourceTableName = "vendor"
    db.TableDefs.Delete "vendor"
    db.TableDefs.Append tdf

    db.Close: Set db = Nothing
End Sub
« แก้ไขครั้งสุดท้าย: 02 ก.พ. 65 , 16:23:24 โดย chai »

 
โพสต์นี้ได้รับคำขอบคุณจาก: Max, Naruemon Krunpuek

12 ก.พ. 65 , 05:30:57
ตอบกลับ #10

แดนชัย

ขอรบกวนช่วยแนะนำวิธีการทำหน่อยครับ หรือมีตัวอย่างที่ใช้งานด้วยก็ดีครับ
             %%%ตอนนี้ผมใช้ลิงค์ตารางโดยตรง%%%

 

12 ก.พ. 65 , 12:05:02
ตอบกลับ #11

แดนชัย

ผมมีตาราง 3 ตาราง Tb_Login,Tb_Recuit,Sdgorat_reservist

 

12 ก.พ. 65 , 16:26:24
ตอบกลับ #12

chai

code ที่เห็น ใช้กับ mysql database ครับ จะ link ตารางใหม่
หลักการคือ สร้างตารางเก็บ config server connection ได้แก่ server ip,database name,user,password,driver
ที่เหลือแล้วแต่จะประยุกต์ใช้ทำอะไร ผมใช้กับ Form Login Event On_Form_load ให้ link ตารางให้ใหม่ ตาม config หรือ set config ใหม่เมื่อมีการเลี่ยนแปลง เช่น เปลี่ยน server ,database ง่ายดีครับ สามารถ connect ได้ทันที หรือ ให้ลบ link เมือ Login ไม่ผ่านก็ได้นะครับ เพิ่มความปลอดภัยของโปรแกรมได้ระดับนึง ต้องขอบคุณผู้รู้ที่ให้คำตอบผมในกระทู้ทุกท่านด้วยนะครับ

https://www.thai-access.com/index.php?topic=1961.msg8198#new

 


บอร์ดเรียนรู้ Access สำหรับคนไทย