通过非默认身份验证机制连接时,需要指定身份验证机制。您可以使用 Authentication 设置在 ODBC 连接字符串中执行此操作。
在你的情况下:
conn.Open "Driver={Teradata};" & _
"DBCName=" & TDServer & ";" & _
"Database=" & TDDb & ";" & _
"Uid=" & TDUname & ";" & _
"Pwd=" & TDPword & ";" & _
"Authentication=LDAP"
在您的连接字符串中要考虑的其他一些非常有用的设置:
SessionMode。这应该默认为“Teradata”,但我想指定以防万一,因为如果您发现自己处于ANSI 模式,则必须更明确地说明您的 SQL。
"SessionMode=Teradata"
CharSet 默认为 ASCII,这可能适合您的需要,但如果您有任何 Unicode 数据,则需要在连接字符串中指定 Unicode 字符集以避免 Unicode 字符简化为 ASCII(问号和空框是常见的替代品)
"CharSet=UTF8"
例如,这是我多年来一直使用的连接函数来处理 LDAP 连接:
Public adoConn as ADODB.Connection
Private username as string
Private password as string
<other supporting functions here like getUsername and getPassword>
Function openConnection() As Boolean
Dim ServerName As String, DatabaseName As String
Set adoConn = New ADODB.Connection
On Error GoTo ErrorHandler
startOver:
If m_db.username = "" Or m_db.password = "" Then
getUsername
getPassword
End If
'ldap
adoConn.Open "SessionMode=Teradata;Driver=Teradata;Authentication=LDAP;DBCName=mydb.somewhere.com;Database=mydb;CharSet=UTF8;Uid=" & username & ";Pwd=" & password
Exit Function
ErrorHandler:
If Err.Number = -2147217843 Then
yesno = MsgBox("Your username or password was incorrect." & vbCrLf & vbCrLf & "Try Again?", vbYesNo)
If yesno = vbYes Then
m_db.password = ""
GoTo startOver
End If
End If
Debug.Print Err.Description, Err.Number
End Function
使用可以使用参数切换 ldap 功能的版本进行更新:
Public adoConn as ADODB.Connection
Private username as string
Private password as string
<other supporting functions here like getUsername and getPassword>
Function openConnection(ldap as boolean) As Boolean
Dim ServerName As String
Dim DatabaseName As String
Dim strConnection as string
Set adoConn = New ADODB.Connection
On Error GoTo ErrorHandler
startOver:
If m_db.username = "" Or m_db.password = "" Then
getUsername
getPassword
End If
'ldap
If ldap Then
strConnection = "SessionMode=Teradata;Driver=Teradata;Authentication=LDAP;DBCName=mydb.somewhere.com;Database=mydb;CharSet=UTF8;Uid=" & username & ";Pwd=" & password
Else 'not ldap
strConnection = "SessionMode=Teradata;Driver=Teradata;DBCName=mydb.somewhere.com;Database=mydb;CharSet=UTF8;Uid=" & username & ";Pwd=" & password
End If
'open the connection
adoConn.Open strConnection
Exit Function
ErrorHandler:
If Err.Number = -2147217843 Then
yesno = MsgBox("Your username or password was incorrect." & vbCrLf & vbCrLf & "Try Again?", vbYesNo)
If yesno = vbYes Then
m_db.password = ""
GoTo startOver
End If
End If
Debug.Print Err.Description, Err.Number
End Function
你现在可以这样称呼:
Set connTeradataProd = openConnection(True) 'for ldap
Set connTeradataStage = openConnection(False) 'for default auth