หากทำการ 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