วันเสาร์ที่ 4 มิถุนายน พ.ศ. 2554

CONNECT ORACLE ด้วย VBA SCRIPT ใน ACCESS

หากทำการ LINK TABLE จาก ODBC มายัง ACCESS   แล้วมีการเรียกใช้ LINK TABLE ดังกล่าว  ครั้งแรก ACCESS จะทำการถาม LOGIN, PASSWORD ที่จะไป CONNECT กับ DATABASE ที่เราทำ LINK ไว้  นอกจากจะถาม LOGIN PASSWORD เราแล้ว ยังให้เปลี่ยน DSN ของ ODBC ที่ตั้งไว้ได้ด้วย    อาการแบบนี้ จะไปสร้าง ความเสี่ยง ให้ USER ไปเลือก DSN ตัวอื่นที่เราไม่ต้องการได้



วิธีที่ดีที่สุด คือการทำหน้าตา LOGIN ของเราขึ้นมา แล้วทำการ ต่อ CONNECTION ไปยัง ODBC รอไว้ก่อน   ให้ใช้ CODE  sysTestLogin  ตามนี้ได้เลยครับ,  ส่วน Sub testLogin ผมทำมาทดสอบ การ LOGIN นำไปปะที่ formLogin ได้เลย

ตย Code ที่แสดง เป็นการ Login ไป Oracle นะครับ  ถ้าเป็นการ Connect ไปยัง SQL SERVER หรือ ODBC อื่นๆ   การทำ ConnStr อาจแตกต่างกันไปครับ


Option Compare Database
Option Explicit
Sub testLogin()
   
    If sysTestLogin("MYDB", "mydblogin", "xg1234") Then
       '--- GOTO LOGIN PASS PROCESS
       '
       '
   
   
       MsgBox "OK, LOGIN PASS"
    Else
       '--- GOTO LOGIN ERROR PROCESS
       '
       '
      
    End If

End Sub
Function sysTestLogin(sysDSNName, sysLogin, sysPassword)
   
    On Error GoTo log_error
    Dim dbx As Database
    Dim wkODBCDirect  As Workspace
    Dim x, ConnStr
   
    ConnStr = "ODBC;DSN=" & sysDSNName & ";DBQ=" & sysDSNName & ";"
    ConnStr = ConnStr & "UID=" & sysLogin & ";"
    ConnStr = ConnStr & "PWD=" & sysPassword & ";"
   
   
    Set wkODBCDirect = CreateWorkspace("", "", "", dbUseODBC)
    Set dbx = wkODBCDirect.OpenDatabase("", dbDriverNoPrompt, True, ConnStr)
    Set dbx = DBEngine(0).OpenDatabase("", dbDriverNoPrompt, False, ConnStr)
   
    x = SysCmd(acSysCmdSetStatus, "LOGIN PASS !")


    Set dbx = Nothing      ' Close database but keep connection.
    sysTestLogin = True
    Exit Function
log_resume:


    sysTestLogin = False
    Exit Function
   
log_error:
    MsgBox "ODBC Error: Initial connection error" & vbCrLf & vbCrLf & DBEngine.Errors(0) & vbCrLf & vbCrLf, vbExclamation
    Resume log_resume
   
End Function