среда, 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

понедельник, 24 сентября 2012 г.

Почему ускорение свободного падения не зависит от массы?



— Пап, а почему ускорение свободного падения не зависит от массы?
— Все очень просто, сынок

Согласно Закону всемирного тяготения, сила гравитации между двумя телами рассчитывается из выведенной Ньютоном в 1666 году формулы:

F = G \cdot {m_1 \cdot m_2\over R^2}
где G — гравитационная постоянная, m — масса тела, а R — расстояние между телами.

В конкретном случае с Землей, эта формула принимает вид:

F=G\frac{mM}{R^2}

где M — масса Земли, m — масса падающего на Землю тела, а R — радиус земли. Из этого закона следует, что чем больше масса падающего тела m, тем больше сила F. Очевидно, чем большей массой обладает тело, тем большую силу гравитации оно порождает.  

— Как же так, пап, ведь масса не должна иметь значение?
— Верно, сынок. Мы просто забыли о существовании Второго закона Ньютона:

\vec{a} = \frac{\vec{F}}{m}

Согласно этому закону, ускорение тела зависит от его массы m и от силы F, которая была к нему приложена. Их этого следует, что чем больше масса тела, тем большую силу нужно приложить, что бы ускорить оное. Очевидно, что для того, что бы сдвинуть с места более массивный свинцовый шар, нужно приложить бо́льную силу.

Действительно, если приравнять две этих формулы, мы получим, что массы m сократятся, и останется:

 g=G\frac{M}{R^2}

Из этого и получается, что следствия Закона тяготения и Второго закона Ньютона компенсируют друг друга. Поэтому ускорение свободного падения не зависит от массы, сынок.
— Здо́рово!