Страница 1 из 1

Как подключиться к БД используя VBA Excel 2003

Добавлено: 06 апр 2009, 14:21
MasterV
Здравствуйте! Такой вопрос. Из Галактики 7.11 конвертировал в Excel отчет, но с БД необходимо вытащить некоторые значения. Как написать запрос к БД используя макрос?

Добавлено: 06 апр 2009, 14:22
PViP
через драйвер odbc, я так понимаю подобие ADO компонентов в VBA есть.

Добавлено: 06 апр 2009, 14:27
MasterV
PViP, а поконкретнее можно? Где, что найти. Я просто первый раз с этим столкнулся.

Добавлено: 06 апр 2009, 14:31
ilshat
вам пример что ли выслать?

Добавлено: 06 апр 2009, 14:32
MasterV
если есть возможность, то вышлите

Добавлено: 06 апр 2009, 15:44
PViP
Конкретный галактический пример не подскажу, а вот примеров в стандартном help-е от Excel.VBA полно ищите в нем объект Connection или функцию SQLOpen/SQLExecQuery/SQLClose

вьюшку может в отчете сделать, конвертировали в Excel, это что значит?

Добавлено: 06 апр 2009, 17:49
ilshat

Код: Выделить всё

Sub GetData()
'
' GetData Макрос
' Выгрузка из Галактики (*)
'
' Сочетание клавиш: Ctrl+g
'
Dim strSQLstmt As String


strSQLstmt = "select " & _
"from " & _
"     build.dbo.[t$katsopr] katsopr " & _
"where " & _
" katsopr.[f$DSOPR] >= dbo.ToAtlDate(convert(datetime,'" & Range("E3").Value & "',104)) and katsopr.[f$DSOPR] <= dbo.ToAtlDate(convert(datetime,'" & Range("F3").Value & "',104)) " & _
" and katsopr.f$tipsopr = 2 " & _

Range("B6:Y65000").Clear

    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=Build;APP=Microsoft Office;WSID=PROGSECT;DATABASE=Build;Trusted_Connection=Yes" _
        , Destination:=Range("B6"))
        .CommandText = strSQLstmt
        .Name = "Build"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
ну что-то типа этого

Добавлено: 07 апр 2009, 05:54
Алексей
А не проще сразу при формировании отчета в эксель необохдимыми данными отчет добить?

Добавлено: 07 апр 2009, 11:01
MasterV
ilshat, спасибо! Попробуем

Добавлено: 02 июл 2009, 11:28
Helysq
Тоже простой пример:

Код: Выделить всё

Private Sub btnExec_Click()
  Const brow = 6
  Const bcol = 1
  
  Dim cngal As New ADODB.Connection
  Dim cdgal As New ADODB.Command
  Dim rsgal As New ADODB.Recordset

  Dim constr As String
  Dim sqlstr As String
  
  constr = "server=GalServ;Database=GalBase;trusted_connection=yes"
      
  ' Получение данных с помощью перекрестного запроса
  sqlstr = "текст запроса или вызов хранимой процедуры"

  ' Подключение к серверу
  cngal.Provider = "sqloledb"
  cngal.CommandTimeout = 0
  cngal.ConnectionTimeout = 0
  cngal.Open constr

  ' Получение данных из Галактики
  Set cdgal.ActiveConnection = cngal
  cdgal.CommandText = sqlstr
  cdgal.CommandTimeout = 0
  rsgal.MaxRecords = 0
  rsgal.CursorType = adOpenStatic
  rsgal.LockType = adLockReadOnly
  Set rsgal = cdgal.Execute
    
  ' Вывод данных основного запроса
  Cells(brow, bcol).CopyFromRecordset rsgal
  
  ' Завершаем соединение
  rsgal.Close
  cngal.Close
  Set rsgal = Nothing
  Set cngal = Nothing
    
  Application.ActiveWorkbook.Save
End Sub