当前位置: 首页 > 面试题库 >

如何编写一个从SQL数据库返回值的Excel函数?

许振海
2023-03-14
问题内容

我想编写以下功能,该功能应在Excel工作表中使用:

=GetRecField("Foo Record Key", "FooField1")

…这将通过ODBC在内部连接到SQL数据库,然后在其中执行

SELECT FooField1 FROM MyTable WHERE KEY_FIELD='Foo Record Key';

并将返回结果值作为函数GetRecField的结果。上面的SQL被授权仅返回一个记录(IOW KEY_FIELD具有唯一约束)。

当然,上面的函数可以在工作表中多次调用,所以请尽量避免盲目 QueryTables.Add

TIA。


问题答案:

您可以编写一个自定义函数来做到这一点

  1. 打开VBA编辑器(ALT-F11)
  2. 打开工具->引用,并确保选择了“ Microsoft ActiveX数据对象2.8库”和“ Microsoft ActiveX数据对象Recordset 2.8库”
  3. 右键单击VBAProject,然后选择“插入”->“模块”
  4. 打开模块。现在,您可以创建一个自定义函数,例如:
    Public Function GetItem(field As String, id As Integer) As String
        Set oConnection = New ADODB.Connection
        Dim oRecordset As ADOR.Recordset
        oConnection.Open "provider=sqloledb;data source=yourserver;" & _
            "Trusted_Connection=yes;initial catalog=yourdatabase;"
        Set oRecordset = oConnection.Execute( & _
            "select " & field & " from table where id = " & id)
        If oRecordset.EOF Then
            GetItem = "n/a"
        Else
            GetItem = oRecordset(field)
        End If
    End Function
  1. 现在,您可以从单元格中调用该函数:

= GetItem(“ fieldname”; 2)

需要模块是因为不能从扩展架内部调用非模块函数。



 类似资料:
  • 问题内容: 在Python中,我想编写一个返回另一个函数的函数。返回的函数应该可以通过参数调用,并返回高度和半径为圆柱的体积。 我知道如何从Python中的函数返回 值 ,但是如何返回 另一个函数 ? 问题答案: 使用Python尝试一下: 这样使用它,例如与和: 注意,返回一个函数很简单,只需在函数内部定义一个新函数,然后在最后返回它- 小心地为每个函数传递适当的参数。仅供参考,从另一个函数返回

  • 问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识

  • 问题内容: 例如,我要创建一个可以返回任何数字(负数,零或正数)的函数。 但是,基于某些异常,我希望函数返回 有没有一种方法可以编写可以返回 或 的函数? 好的,因此收到了很多答复。我知道我只是在错误地解决问题,因此我应该在方法中使用某种异常。为了获得更好的答案,我将提供一些示例代码。请别取笑:) 问题答案: 不,您不能在Java中做到这一点。 您可以返回一个。通过返回一个对象,您可以从技术上返回

  • 本文向大家介绍PHP 如何从函数返回两个值,包括了PHP 如何从函数返回两个值的使用技巧和注意事项,需要的朋友参考一下 无法明确返回两个变量,可以将它们放入列表/数组数据结构中并返回。 示例 输出结果 这将产生以下输出-

  • 问题内容: 我想在两个单独的变量中从函数返回两个值。例如: 我希望能够分别使用这些值。当我尝试使用时,它返回,这不是我想要的。 问题答案: 你不能返回两个值,但可以返回并在调用后解压缩它: 在线意味着创建一个元组。你也可以使用括号,例如,但是元组是用逗号创建的,因此括号不是必需的。但是,你可以使用parens来提高代码的可读性或将元组分成多行。这同样适用于。 如果要返回两个以上的值,请考虑使用命名

  • 我的Go函数预计会返回一个值,但在调用库函数时可能会出现恐慌。我可以使用在延迟调用中捕获它,但是在这种情况下如何返回值呢?