String,LongText和ShortText的长度是多少?将长文本设置为SQL参数会导致错误3001

luk*_*302 3 ms-access vba access-vba ms-access-2013

当我在ms-access 2013中使用参数创建追加查询时,任何这些参数的类型都设置为LongText查询失败并显示错误代码3001 Invalid Argument.ShortText但是,更改类型会导致工作查询.两个版本都可以通过双击访问本身中的查询来运行,但是第一个版本在通过以下代码运行时失败:

Dim db As DAO.Database
Set db = CurrentDb
Dim qdf As QueryDef
Set qdf = db.QueryDefs("NeuerFachlicherInhalt")
    qdf!Inhalt = inhalte("DefaultInhalt")
    qdf!Formular = inhalte("Formular")
qdf.Execute
Run Code Online (Sandbox Code Playgroud)

我插入参数的表有一个字段类型,LongText因此我希望这可以工作 - 这里问题的根本原因是什么?如果我无法指定LongTextas参数,如何传入长文本?

我认为它可能与访问中字符串的长度限制有关.究竟是什么限制?Google会将您重定向到VBA中串联和字符串的最大长度,访问有关字符串长度的问题,但我无法找到长度问题的明确答案:

  • 文字可以多长时间ShortText
  • 文字可以多长时间LongText
  • vba的文本可以有多长时间String

我在两种情况下的查询看起来像

PARAMETERS Inhalt LongText, Formular Short;
INSERT INTO FachlicherInhalt ( Inhalt, Formular )
SELECT [Inhalt] AS Expr1, [Formular] AS Expr2;

PARAMETERS Inhalt Text ( 255 ), Formular Short;
INSERT INTO FachlicherInhalt ( Inhalt, Formular )
SELECT [Inhalt] AS Expr1, [Formular] AS Expr2;
Run Code Online (Sandbox Code Playgroud)

Phi*_*ilS 5

  • ShortText(简单地Text在Access 2013之前)最多可以包含255个字符.
  • LongText(Memo在Access 2013之前)最长可达1 GB,但大多数Access控件只能显示64000个字符.(编辑文本时,表单中的文本框会开始表现得很奇怪,如果它包含的内容少于64000个字符.)

有关更多详细信息,请参阅Access 2013文档.

  • VBA可变长度String最多可包含2 ^ 31个字符

有关更多详细信息,请参见Visual Basic for Applications语言参考.


现在,您有关于QueryDef-Object中LongText参数的问题.遗憾的是,DAO不支持将LongText作为查询的参数类型,即使它允许您在查询设计中创建参数.

您有以下选项作为解决方法:

  • 打开记录集并在那里添加/更新记录
  • 对该查询使用ADO-Command-Object
  • 将函数硬编码inhalte("DefaultInhalt")到查询的SQL中
  • 或者连接自己的SQL字符串,包括值(Total SQL lenght限制为64000个字符!)