首页 > 解决方案 > 在访问查询中使用 VBA 函数

问题描述

我想使用 MS 访问编写一个 SQL 查询,它使用 VBA 函数计算序列号。

我有一个很大的“samplebasicinformation”表,它有很多外键,我想使用外表中的文本字段来创建一个基于文本的序列号。

我希望查询的第一个字段缩写其他表中的几个文本字段,然后将它们连接起来并创建这个序列号。

为了缩写文本字段,我有以下功能:

Function GetFirstLetters(rng As String)
Dim arr
Dim I As Long
arr = VBA.Split(rng, " ")
If IsArray(arr) Then
    For I = LBound(arr) To UBound(arr)
        GetFirstLetters = GetFirstLetters & Left(arr(I), 1)
    Next I
Else
    GetFirstLetters = Left(arr, 1)
End If
End Function

我尝试了下面的 SQL 来实现这一点,但由于语法错误而失败。

SELECT 
(getfirstletters(select sl.locationname from samplebasicinformation as sbi join samplelocation as sl 
on sbi.samplelocationid = sl.samplelocationid)), 
samplebasicinformationid 
from samplebasicinformation as sbi1

有人可以提供一些建议吗?

标签: sqlvbams-access

解决方案


您需要为您的函数提供一列。

您的查询相当混乱,我认为它就像这样简单:

SELECT 
  getfirstletters(sl.locationname),
  sbi.samplebasicinformationid 
FROM samplebasicinformation as sbi 
  INNER JOIN samplelocation as sl 
  on sbi.samplelocationid = sl.samplelocationid

请注意,您需要INNER JOIN在 Access Sql 中。


推荐阅读