在 Access 和 SQL 服务器数据库中使用 GUID - 将 GUID 值插入 UNIQUEIDENTIFIER 列

Working with GUIDs in Acces and SQL Server database - insert GUID value into UNIQUEIDENTIFIER column

我有一个 SQL 服务器数据库链接到 MS Access 前端。

我正在尝试将 GUID 值存储在名为 FileSorceIDUNIQUEIDENTIFIER 字段中。我想存储在那里的 GUID 来自我当前记录集 (Me!GUID) 的 GUID,它也是一个 UNIQUEIDENTIFIER 并直接在 SQL 服务器中创建。此 GUID 应存储在我的 table.

但是我在尝试这样做时总是遇到错误 -2147217887 (80040e21)

所以我已经有了一个 GUID,我只想将其存储在 UNIQUEIDENTIFIER 字段中的另一个 table 中。我发现的所有解决方案都在讨论如何在 SQL 服务器中创建一个新的 GUID,但我已经有了一个只需要存储的 GUID。

strCnxn = "Provider=sqloledb;" & _
"Data Source=MYSERVER;" & _
"Initial Catalog=MYDATABASE;" & _
"Integrated Security=SSPI;" 'Windows-Authentication

Set cn = CreateObject("ADODB.Connection")
cn.Open strCnxn

'Recordset
sql = "AttachmentsFileStream" 'Table to add file
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, strCnxn, 1, 3  '1 - adOpenKeyset, 3 - adLockOptimistic"
 
Dim GUID As Variant
GUID = Me!GUID.Value 
GUID = StringFromGUID(Me.GUID.Value)
GUID = Replace(GUID, "{guid {", "")
GUID = Replace(GUID, "}}", "")
'GUID will now hold the string "39A0483A-AE4C-44B5-94C3-00267185B81E"
'Insert into database
rs.AddNew 'FileId (also a GUID) will be automatically handled by SQL
rs!FileName = FileName
rs!FileSourceID = GUID
rs!HideFile = False

'Clean up
rs.Update
rs = Nothing         

我也试过省略字符串转换,结果相同。

它总是停在这行代码:

rs!FileSourceID = GUID

我找到了解决方案,当您想通过 MS Access 插入时,您需要在 GUID 周围包含 {}

工作代码:

strCnxn = "Provider=sqloledb;" & _
"Data Source=MYSERVER;" & _
"Initial Catalog=MYDATABASE;" & _
"Integrated Security=SSPI;" 'Windows-Authentication

Set cn = CreateObject("ADODB.Connection")
cn.Open strCnxn

'Recordset
sql = "AttachmentsFileStream" 'Table to add file
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, strCnxn, 1, 3  '1 - adOpenKeyset, 3 - adLockOptimistic"
 
Dim GUID As Variant
GUID = Me.GUID.Value 'needs to be a field in the form
GUID = StringFromGUID(GUID)
GUID = Replace(GUID, "{guid {", "{")
GUID = Replace(GUID, "}}", "}")
'GUID will now hold the string like "{39A0483A-AE4C-44B5-94C3-00267185B81E}"
'Insert into database
rs.AddNew 'FileId (also a GUID) will be automatically handled by SQL
rs!FileName = FileName
rs!FileSourceID = GUID
rs!HideFile = False

'Update recordset in SQL
rs.Update