Как создать пользовательскую функцию в Excel, чтобы получить данные MySQL? - PullRequest
1 голос
/ 22 ноября 2011

Нам нужно создать пользовательскую формулу для пользователей, чтобы получать данные из нашей базы данных MySQL. После того, как пользователь проходит аутентификацию, он вводит формулу в Excel (что-то вроде '= retrievemybirthday ("Frank Dodge") ". Как нам это сделать? Мы не новички в программировании, просто новички в программировании с Excel. Есть ли учебники по этому вопросу? Мы посмотрели, но можем найти что-нибудь.

спасибо!

1 Ответ

3 голосов
/ 23 ноября 2011

1) вам нужен драйвер ODBC, настроенный для вашей базы данных MySQL.

2) выясните код SQL, необходимый для этой функции, что-то вроде

select birthdate
from YourTable
Where membername=?

.код в вашей функции

3) В вашей функции вам понадобится правильная строка подключения.Проверьте сайт как http://www.connectionstrings.com/

4) Вот пример функции, использующей объекты данных ActiveX (вам нужен набор ссылок в Инструменты> Ссылки в Редакторе VB)

Function GetNomen(sPN As String) As String
'SkipVought/2006 Mar 7
'--------------------------------------------------
' Access: DWPROD.FRH_MRP.READ
'--------------------------------------------------
':this function returns nomenclature for a given part number
'--------------------------------------------------
'2011-9-26 Converted to Parameter Query
'--------------------------------------------------

    Dim sConn As String, sSQL As String, sServer As String
    Dim rst As ADODB.Recordset, cnn As ADODB.Connection, cmd As ADODB.Command

    Set rst = New ADODB.Recordset
    Set cnn = New ADODB.Connection
    Set cmd = New ADODB.Command

    sServer = "dwprod"
    cnn.Open "Driver={Microsoft ODBC for Oracle};" & _
               "Server=" & sServer & ";" & _
               "Uid=/;" & _
               "Pwd="

    sSQL = "SELECT PM.Nomen_201 "
    sSQL = sSQL & "FROM FRH_MRP.PSK02101 PM "
    sSQL = sSQL & "WHERE PM.PARTNO_201 =?"


    Debug.Print sSQL

   With cmd
        .CommandText = sSQL
        .CommandType = adCmdText
        .Prepared = True

        .Parameters.Append .CreateParameter( _
            Name:="PARTNO_201", _
            Type:=adChar, _
            Direction:=adParamInput, _
            Size:=16, _
            Value:=sPN)

        .ActiveConnection = cnn

        Set rst = .Execute
    End With

    rst.MoveFirst

    If Err.Number = 0 Then
        GetNomen = rst("NOMEN_201")
    Else
        GetNomen = ""
    End If

    rst.Close
    cnn.Close

    Set cmd = Nothing
    Set rst = Nothing
    Set cnn = Nothing
End Function

Вы можете запустить эту функцию на листе по запросу.

...