填充记录源后,下一个操作是单击一个填充的字段,以“激活”记录。单击此命令时,目标是将SEC_ID (A GUID,Number数据类型)存储为tempvar,并在未来的查询中使用。此GUID还被放置在文本框中,仅用于可视化调试。但是它不放GUID,它放的是随机汉字。我试着把它放到一个MsgBox中,只是为了看,它喷出了“?”。
填充行源的代码:
Dim componentListSQL As String
If FCSUtilities.AssessmentUoM = "Metric" Then
componentListSQL = "SELECT DISTINCT [100b_Working].SEC_SYS_COMP_ID, [100b_Working].SEC_ID, [110b_RO_Material_Category].MAT_CAT_DESC, [110b_RO_Component_Type].COMP_TYPE_DESC, [110b_RO_Material_Category].MAT_CAT_ID, [110b_RO_Component_Type].COMP_TYPE_ID, [100b_Working].ID_Number, [100b_Working].Model, [100b_Working].Serial_Number, [100b_Working].Capacity, [100b_Working].Manufacturer, [100b_Working].SEC_YEAR_BUILT, ROUND([100b_Working].SEC_QTY, 0) AS SEC_QTY, [100b_Working].UOM_MET_UNIT_ABBR, [100b_Working].UOM_ENG_UNIT_ABBR, [100b_Working].Equipment_Make, [100b_Working].UOM_CONV " _
& "FROM (110b_RO_Units_Conversion INNER JOIN (110b_RO_Component_Type INNER JOIN (110b_RO_Material_Category INNER JOIN 110b_RO_CMC ON [110b_RO_Material_Category].MAT_CAT_ID = [110b_RO_CMC].CMC_MCAT_LINK) ON [110b_RO_Component_Type].COMP_TYPE_ID = [110b_RO_CMC].CMC_CTYPE_LINK) ON [110b_RO_Units_Conversion].UOM_ID = [110b_RO_CMC].CMC_UoM) INNER JOIN 100b_Working ON [110b_RO_CMC].CMC_ID = [100b_Working].SEC_CMC_LINK " _
& "WHERE ((([100b_Working].SEC_SYS_COMP_ID) = [Forms]![200a_MainWindow]![txtDebugCompSysID]) And (([100b_Working].SEC_ID) Is Not Null)) " _
& "ORDER BY [110b_RO_Component_Type].COMP_TYPE_DESC;"
Me![210_ComponentList].Form.RecordSource = componentListSQL
End IfOnClick事件:
Private Sub txtMaterialCategory_Click()
Me.txtActiveSecID.Value = Me.txtSecID.Value
End SubtxtSecID看起来像它应该的那样是一个GUID,但是在txtActiveSecID中它变成了汉字,即使我试图把它作为一个tempvar,然后将它设置为txtActiveSecID。
我不太清楚到底是怎么回事。查看不同的堆栈,它指出这是由于long/memo字段,但正如我前面所说的,SEC_ID字段数据类型是Number。
发布于 2021-08-19 16:05:55
每个MS文档https://learn.microsoft.com/en-us/office/vba/api/Access.Application.StringFromGUID
Microsoft数据库引擎将GUID存储为Byte类型的数组。但是,Access不能从窗体或报表上的控件返回Byte数据。若要从控件返回GUID的值,必须将其转换为字符串。若要将GUID转换为字符串,请使用StringFromGUID函数。若要将字符串转换回GUID,请使用GUIDFromString函数。
StringFromGUID(Me.txtSecID.Value)
但是,这将导致输出,如:{guid {2786C27B-CB7C-4DEA-8340-1338532742DE}}
这仍然可以作为筛选标准,但是可以做进一步的处理,从该字符串中提取GUID。使用字符串操作函数移除{guid头和尾随}。回顾Access - GUID value stored in textbox, can't be used in SELECT statements
https://stackoverflow.com/questions/68848371
复制相似问题