【问题标题】:field with memo datatype in a recordset记录集中具有备注数据类型的字段
【发布时间】:2017-09-27 04:20:20
【问题描述】:

在 where 子句中使用时,字符串中是否有特定数量的字符?

SQL2 = "SELECT DISTINCT " & a & " AS MyString," & b & " FROM tempExtractedtbl"
Set rsGenerate = CurrentDb().OpenRecordset(SQL2)
Do While Not rsGenerate.EOF
    SQL3 = "Select intId from IPDMst where TXTliteral='" & 
    rsGenerate.Fields("MyString").Value & "'"

    Set temprsGenerate = CurrentDb().OpenRecordset(SQL3)

这里 tempExtractedtbl 中 MyString 的值为:

PO_EDGE_00503|Device Charge_1|Device 
Type~Smartphone~Manufacturer~Apple~Model~iPhone 6~Capacity~32 
GB~Colour~Space Grey~Blue Tick~FALSE~4GX~TRUE~Splash Proof~FALSE~Removable 
Battery~FALSE~Expandable Memory~FALSE~HD Video 
Recording~TRUE~NFC~TRUE~Featured~FALSE~Bonus Gift~FALSE~Operating 
System~ios~Hot Buy~FALSE~Root Offering~Mobility Offer~

但是当它存储在记录集中时,MyString 的值被修剪为 255 个字符。当我执行

?rsGenerate.Fields("MyString").Value

在即时窗口中,我将 MyString 作为

PO_EDGE_00503|Device Charge_1|Device 
Type~Smartphone~Manufacturer~Apple~Model~iPhone 6~Capacity~32 
GB~Colour~Space Grey~Blue Tick~FALSE~4GX~TRUE~Splash Proof~FALSE~Removable 
Battery~FALSE~Expandable Memory~FALSE~HD Video 
Recording~TRUE~NFC~TRUE~Featured~F

当我执行 SQL3 时,由于 MyString 被修剪,我收到以下错误。

备注字段的记录集是否有任何限制,因为 MyString 是具有备注数据类型的字段。有没有办法在记录集中存储长度超过 255 个字符的字符串并使用它?

【问题讨论】:

  • ...错误会是什么? (将它们添加到问题的底部)
  • 我无法复制这个。当您将 where 语句存储在查询 SQL 中时,它受到 SQL 语句中允许的字符总数(65536 个字符)的限制。如果您指的是一个表,我认为您可以达到 1GB 的字符串,但我没有尝试过这些是否适用于 WHERE 语句。

标签: ms-access vba


【解决方案1】:

DISTINCT 和备注字段不能放在一起。

http://allenbrowne.com/ser-63.html

如果您要求 Access 根据备忘录处理数据,Access 会截断备忘录:聚合、重复数据删除、格式化等。

唯一性:由于您要求查询仅返回不同的值,Access 必须将备注字段与所有其他记录进行比较。比较会导致截断。

从 SELECT SQL 中删除 DISTINCT。
您可能需要创建另一个查询来选择不带备忘录的不同值,然后将其用作另一个查询的源,以检索备忘录而不进行重复数据删除。

【讨论】:

  • 您好安德烈,感谢您的回答。我已经从 SQL2 中删除了不同的内容,但我得到了同样的错误。
  • 请在打开记录集之前显示SQL2的最终内容。 (编辑您的问题并将其添加到那里)@YashR。
  • 嗨 Andre,当我从 SQL2 中删除 Distinct 时,我得到了 MyString 的确切值。但是当我尝试执行 Set temprsGenerate = CurrentDb().OpenRecordset(SQL3) 时会出错。当表的字段是/是备忘录时,记录集有什么限制吗?
  • SQL3 的值为:Select intID from IPDMst where TXTliteral='PO_EDGE_00503|Device Charge_1|Device Type~Smartphone~Manufacturer~Apple~Model~iPhone 6~Capacity~32 GB~Colour~Space Gray ~Blue Tick~FALSE~4GX~TRUE~防溅~FALSE~可拆卸电池~FALSE~可扩展内存~FALSE~高清视频录制~TRUE~NFC~TRUE~精选~FALSE~赠品~FALSE~操作系统~ios~热Buy~FALSE~Root Offering~Mobility Offer~'
  • 当我复制 SQL3 并在查询设计中的 MS Access 中运行它时,它给出了错误。当我将 where 子句中的字符串大小减少到 255 个字符时,它可以工作。我不知道我在这里错过了什么。
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
相关资源
最近更新 更多