im使用UNION声明来组合两个表的记录.问题是,当我使用这个UNION时,长度超过255个字符的长字段在第255个字符中被省略. 当我使用单一 Select 时,那么根本没有问题.我发现问题出在UNION声明上.如果我使用union所有问题就得到了解决,但我不想使用UNION所有. 知道为什么会发生这种情况吗?我try 过铸造场,但没有任何效果

推荐答案

对,255个字符是限制.

如果需要,您可以使用第二个查询来查找完整的备忘录.

然而,即使您可以直接将备忘录字段填写为64 K,查询也只能检索到32 K.

更糟糕的是,如果您用(例如)Rich Text Box控件填充备忘录字段,则可以达到兆字节字段内容大小,而仍然只能检索到前32 K.

为了避免此问题,您可以使用DLookup来获取完整内容.现在,当内容小于32 K时,调用DSYS是浪费时间;因此DSYS只应在必要时使用.

以下是实现这一目标的一种旧方法:

Public Function LookupMemo( _
  ByVal strSource As String, _
  ByVal strFieldID As String, _
  ByVal strFieldMemo As String, _
  ByRef lngID As Long, _
  ByRef varMemo As Variant) _
  As String

' Extracts without truncation to 32768 characters the ' content of a memo field in a query.
'
' Assumes proper wrapping of table/field names containing spaces 
' like "[My field name]" and a single field unique numeric key.
'
' Typical usage (SQL):
'
'   SELECT
'     ID,
'     LookupMemo("Table1", "ID", "MemoField", [ID], [MemoField]) AS FullMemo
'   FROM
'     Table1;
'
' 2003-12-29. Cactus Data ApS, CPH.

  ' Maximum length of string from memo field when retrieved in a query.
  Const clngStrLen  As Long = &H8000&

  Dim strExpr       As String
  Dim strDomain     As String
  Dim strCriteria   As String
  Dim strMemo       As String
  Dim lngLen        As Long
  
  On Error GoTo Exit_LookupMemo

  If Not IsNull(varMemo) Then
    lngLen = Len(varMemo)
    If lngLen < clngStrLen Then
      ' The memo field is not truncated.
      strMemo = varMemo
    ElseIf Len(strSource) > 0 And Len(strFieldID) > 0 And Len(strFieldMemo) > 0 Then
      ' The memo is probably truncated by the query.
      ' Lookup the full memo in strSource.
      strExpr = strFieldMemo
      strDomain = strSource
      strCriteria = strFieldID & " = " & lngID & ""
      strMemo = vbNullString & DLookup(strExpr, strDomain, strCriteria)
    End If
  Else
    ' Return empty string.
  End If
  
  LookupMemo = strMemo

Exit_LookupMemo:
  Exit Function
  
Err_LookupMemo:
  ' Return empty string.
  Resume Exit_LookupMemo
  
End Function

Sql相关问答推荐

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

如何从多行数据中获取一行合并数据?

仅在特定字符串之后提取两个圆括号之间的计量单位文本

在Oracle SQL中将列值转换为行

了解放置时的连接

我可以在SQL的IN子句中使用比子查询包含的值更少的值吗?

冲突查询的UPDATE时违反非空约束

按分类标准检索记录

在SELECT中将日期格式转换为双周时段

在同一列上迭代时计算持续时间

日期逻辑(查找过go 90 天内的第一个匹配行)

统计重复记录的总数

如何在 SQL Server 中解决这个复杂的窗口查询?

如何根据创建日期查找两个表中最接近的记录?

用户定义的标量值函数是否仍然会阻止并行性?

查询中获取审批者不起作用

根据行号将列转置为没有任何id或键列的行

如何将 CONCATENATED 值与临时表中的值匹配

T-SQL 查询计算日期在其他列中定义的日期之间绑定的行数

如何在 Oracle 中获取此变量的值?