![](/img/trans.png)
[英]SQL Server How can we write a sql function which returns the records where getdate() is between FromDate and Todate
[英]How to write an Excel function which returns a value from an SQL database?
我想编写以下功能,该功能应在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。
您可以编写一个自定义函数来做到这一点
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
现在,您可以从单元格中调用该函数:
= GetItem(“ fieldname”; 2)
需要模块是因为不能从扩展架内部调用非模块函数。
为什么不在单独的工作表(“数据”菜单,“导入外部数据”,“新数据库查询”)上使用Excel的内置数据库查询功能,然后使用VLOOKUP
从该工作表中提取值?
我通过在一张工作表中保存数据库连接并在另一张工作表中使用对所需单元格的引用来解决了Excel版本1808(?)中的类似问题。
=connection_name[[#All,][Column1]]
。 当然,这似乎是间接的,因为如果没有将其显示在某处的工作表中,我将找不到引用该连接的方法。 但这对我有用,而且我在其他地方找不到类似的说明,因此我认为它可能会提供很多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.