访问-存储在文本框中的GUID值,不能在SELECT语句中使用

时间:2018-06-26 23:56:17

标签: ms-access access-vba

我有一个可以在许多地方调用的表格。所以我正在使用openargs将值拉到我需要的值之上。该值是一个GUID。发出open form命令时,我使用stringfromguid(parameter)来传递GUID。我没有使用stringfromguid()进行尝试,但这对任何事情都不起作用。该值存储在窗体上的隐藏控件中。它最终具有一个像{guid {753DA23E-D9B5-4570-BFD8-30F7B9B4F450}}这样的值,它是正确的GUID。

但是,当我尝试在任何其他select语句中使用该值(在这种情况下,在子窗体上设置记录源)时,它将不起作用。我知道select语句有效,我可以手动将其复制并粘贴到其中,但可以使用'xxx'的{​​{1}}部分(在值的xxx部分中),它可以工作。所以,我知道:

753...F450

拉我想要的东西。但是不管我做什么,各种stringfromguid()或guidfromstring()尝试都行不通。最终尝试使用

SELECT ... FROM ... WHERE IDcol = '753DA23E-D9B5-4570-BFD8-30F7B9B4F450'

没有什么评价。

数据托管在SQL 2012服务器上。访问只是前端。

1 个答案:

答案 0 :(得分:0)

这对我有用-使用Access表:

SELECT 
    GuidField As GuidKey, 
    GuidField As GuidText, 
    [Code]
FROM 
    tblGuid
WHERE
    GuidField = {guid {D8A01BE9-2387-452A-9CF4-30A970E0F078}} 
    AND 
    GuidField = GUIDFromString("{D8A01BE9-2387-452A-9CF4-30A970E0F078}")

所以任何一种过滤方法都应该起作用。不管您使用哪种ODBC驱动程序,因为自版本95起Access都能够处理GUID。

enter image description here

要剥离文本Guid:

' Private constants.
'
' Length of GUID string per definition.
Private Const GuidLength    As Integer = 38
' Converted Access Guid header.
Private Const GuidHeader    As String = "{guid "
' Lenght of Access Guid header.
Private Const HeaderLength  As Integer = 6

Public Sub StripTextGuidHeader(ByRef TextGuid As String)

    Const Start As Integer = 1 + HeaderLength

    If InStr(TextGuid, GuidHeader) = 1 Then
        ' This is a converted byte Guid:
        ' "{guid {00000000-0000-0000-0000-000000000000}}"
        ' Strip the header and the trailing curly bracket.
        TextGuid = Mid(TextGuid, Start, GuidLength)
    End If

End Sub