среда, 1 мая 2013 г.

Подключение к MySQL Базе Данных из vba-приложения. Экспорт данных из Excel в MySQL

Для того что бы получить доступ к MySQL из VBA нам понадобится не так уж много:
  • В References... vba-проекта добавить библиотеку Microsoft ActiveX Data Objects 6.1 Library 
  • Скачать и установить подходящей для вашей версии операционной системы ODBC драйвер. Скорее всего подойдет MySQL ODBC 3.51 Driver. Скачать этот драйвер можно с сайта MySQL: http://dev.mysql.com/downloads/connector/odbc/3.51.html#downloads
  • Собственно, попробовать подключиться к БД:
          Dim oConn As Object
    Set oConn = New ADODB.Connection
    
    oConn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
        "SERVER=localhost;" & _
        "DATABASE=testdb;" & _
        "UID=root;" & _
        "PASSWORD=;" & _
        "PORT:3306;" & _
        "charset=cp1251;" & _
        "Option=3;"
    
    If oConn.State = adStateOpen Then
        MsgBox "Connected! =)"
    Else
        MsgBox "Сan not connect... =("
    End If

Первый парметр указывает на резмещение сервер. Там может быть IP-адрес, или домен,
дальше — конкретная база данных,
имя пользователя,
пароль,
порт (по умолчанию 3306),
указание кодировки excel, для того, что бы при попытки записать в utf-8 базу данных кириллицу не получились кракозябры,
последний параметр — без понятия о чем %)

Ниже пару примеров работы с базой данных.

Получение данных из базы данных:

      Dim cmd As ADODB.Command  'переменная в которой будет запрос
    Set cmd = New ADODB.Command
    
    Dim rec As ADODB.Recordset 'переменная в которой будет результат запроса
    Set rec = New ADODB.Recordset
    
    Set cmd.ActiveConnection = oConn 'указываем соединение из примера выше
    cmd.CommandText = "select * from user" 'собственно, запрос
    cmd.CommandType = adCmdText
    cmd.Execute
    
    Set rec.ActiveConnection = oConn
    rec.Open cmd
    
    Debug.Print (rec.Fields("login").Value)


Отправка данных в базу данных:

    Dim lg As String
    Dim ps As String
    Dim fn As String
    
    lg = "pupkin"
    ps = "qwerty"
    fn = "Вася Пупкин"
    
    cmd.CommandText = "INSERT INTO user (login, password, full_name) VALUES ('" & lg & "', '" & ps & "', '" & fn & "')"
    cmd.Execute





понедельник, 18 марта 2013 г.

Бывает, Excel страшно лагает

И часто случается, что виной тому огромное количество скрытых шелов на странице.
Благо, есть простой макрос, который поможет решить эту проблему:


Sub DeleteAllTextBox()
Dim oSh As Shape
For Each oSh In ActiveSheet.Shapes
oSh.Delete
Next oSh
End Sub
Нашелся здесь: http://baguzin.ru/wp/?p=743