Если, например, требуется получить одно единственное значение с помощью запроса к базе данных (сам запрос может иметь заранее заданную конструкцию, меняющуюся в зависимости от определённых условий), то пригодится следующией код.
Для MS SQL
Sub Get_MSSQL_Data()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlStr As String
Set rs = CreateObject("ADODB.Recordset")
Set db = New ADODB.Connection
db.Open _
"DRIVER={SQL Server};SERVER=SName;UID=UserName;PWD=Password;DATABASE=DBName"
sqlStr = "SELECT Count(*) as cnt FROM [DBName].[DB].[Table]"
rs.Open sqlStr, db
While Not rs.EOF
str1 = rs.Fields("cnt").Value
rs.MoveNext
Wend
rs.Close
db.Close
End Sub
Для других баз данных нужно изменить строку подключения:
"DRIVER={SQL Server};SERVER=SName;UID=UserName;PWD=Password;DATABASE=DBName"
Teradata ODBC Driver
на следующий вариант для Teradata:
"Provider=Teradata;DBCName=DbcName;Database=DBName;Uid=UserName;Pwd=Password"
OLE DB Provider for Oracle
на следующий вариант для Oracle:
"Provider=OraOLEDB.Oracle;Data Source=DWH;User ID=UserName;Password=Password;"
User-defined type not defined
Для того, чтобы при выполнении кода не возникало ошибки «Compile error: User-defined type not defined»:
Нужно зайти в Tools->Reference и выбрать следующие пункты: