หากทำการ 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
แสดงบทความที่มีป้ายกำกับ MS ACCESS TIP แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ MS ACCESS TIP แสดงบทความทั้งหมด
วันเสาร์ที่ 4 มิถุนายน พ.ศ. 2554
วันเสาร์ที่ 12 กุมภาพันธ์ พ.ศ. 2554
FUNCTION NTZ NVL แบบ ORACLE
หลายๆ ครั้ง เรามักพบปัญหา การนำค่าใน FIELD มาคำนวณ แล้วพบ ว่า ค่าที่ได้เป็น ว่างๆ ปัญหาหลักส่วนหนึ่วคือ ค่าใน FIELD เป็น ว่างๆ หรือ NULL ตย เช่น เราตั้งค่า AMOUNT + VAT ไว้ ในรายงาน หรือ QUERY ถ้า RECORD ใด ที่ VAT เป็น ช่องว่าง จะทำให้ AMOUNT+VAT = NULL ไปด้วย
วิธีแก้ พื้นๆ ก็ไปไล่ UPDATE ค่าให้เป็น 0 , ผมแนะนำการทำ FUNCTION มาช่วย โดยให้เก็บ FUNCTION นี้ไว้ใน MODULE ผมเรียกมันว่า ntz
FUNCTION NTZ(vain)
if isnull(varin) then
ntz=0
else
ntz =varin
end if
END FUNCTION
การนำ ไปใช้ ก็เพียงแต่ ใส่ FUNCTION ครอบ ตยเช่น =AMOUNT+VAT ก็ใส่เป็น =ntz(AMOUNT) + ntz(VAT) เรานำไปใช้ได้ ทั้งใน QUERY REPORT และ FORM
เรานำ FUNCTION ดังกล่าว ไป ดัดแปลง เพื่อให้เทียบเคียงกับ FUNCTION NVL แบบ ORACLE ได้ เช่นกัน โดยการปรับเป็น FUNCTION ดังนี้
FUNCTION NVL(vain, varnull)
if isnull(varin) then
ntz=varnull
else
ntz =varin
end if
END FUNCTION
แต่ผมนิยมใช้ NTZ เพราะมี PARAMETER เดียวโดดๆ นำไปครอบสูตรแล้วได้ผลเลย ส่วน NTZ ต้องพิมพ์เพิ่ม อีก 2 3 ตัวครับ
วิธีแก้ พื้นๆ ก็ไปไล่ UPDATE ค่าให้เป็น 0 , ผมแนะนำการทำ FUNCTION มาช่วย โดยให้เก็บ FUNCTION นี้ไว้ใน MODULE ผมเรียกมันว่า ntz
FUNCTION NTZ(vain)
if isnull(varin) then
ntz=0
else
ntz =varin
end if
END FUNCTION
การนำ ไปใช้ ก็เพียงแต่ ใส่ FUNCTION ครอบ ตยเช่น =AMOUNT+VAT ก็ใส่เป็น =ntz(AMOUNT) + ntz(VAT) เรานำไปใช้ได้ ทั้งใน QUERY REPORT และ FORM
เรานำ FUNCTION ดังกล่าว ไป ดัดแปลง เพื่อให้เทียบเคียงกับ FUNCTION NVL แบบ ORACLE ได้ เช่นกัน โดยการปรับเป็น FUNCTION ดังนี้
FUNCTION NVL(vain, varnull)
if isnull(varin) then
ntz=varnull
else
ntz =varin
end if
END FUNCTION
แต่ผมนิยมใช้ NTZ เพราะมี PARAMETER เดียวโดดๆ นำไปครอบสูตรแล้วได้ผลเลย ส่วน NTZ ต้องพิมพ์เพิ่ม อีก 2 3 ตัวครับ
สมัครสมาชิก:
บทความ (Atom)

