Ms access 字符串、长文本和短文本的长度是多少?将长文本设置为SQL参数会导致错误3001

Ms access 字符串、长文本和短文本的长度是多少?将长文本设置为SQL参数会导致错误3001,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,当我在ms access 2013中创建带有参数的追加查询,并且这些参数的任何类型都设置为LongText时,查询失败,错误代码3001无效参数。但是,将类型更改为ShortText会导致一个工作查询。两个版本都可以通过双击access本身中的查询来运行,但第一个版本在通过以下代码运行时失败: Dim db As DAO.Database Set db = CurrentDb Dim qdf As QueryDef Set qdf = db.QueryDefs("NeuerFachlicherI

当我在ms access 2013中创建带有参数的追加查询,并且这些参数的任何类型都设置为
LongText
时,查询失败,错误代码
3001无效参数
。但是,将类型更改为
ShortText
会导致一个工作查询。两个版本都可以通过双击access本身中的查询来运行,但第一个版本在通过以下代码运行时失败:

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
我插入参数的表的字段类型为
LongText
,因此我希望它能起作用-这里问题的根本原因是什么?如果我无法指定
LongText
作为参数,那么如何传入长文本

我认为这可能与access中字符串的长度限制有关。这些限制究竟是什么?Google将您转到关于字符串长度的问题,但我无法找到长度问题的确切答案:

  • ShortText
    的文本可以有多长
  • LongText
    的文本可以有多长
  • vba
    字符串的文本可以有多长
我在这两种情况下的查询如下

长文本中的参数,短公式;
插入FachlicherInhalt(Inhalt,公式化)
选择[Inhalt]作为Expr1,选择[Formular]作为Expr2;
ALT Text(255)中的参数,公式简短;
插入FachlicherInhalt(Inhalt,公式化)
选择[Inhalt]作为Expr1,选择[Formular]作为Expr2;

只要我正确地阅读了您的问题,我几乎可以肯定您不能使用longtext/memo字段作为参数。根据此处提供的信息:

  • ShortText
    (在Access 2013之前仅为
    Text
    )最多可包含255个字符
  • LongText
    Memo
    在Access 2013之前)的长度最多可达1 GB,但大多数访问控件只能显示64000个字符。(如果表单中的文本框包含的字符远远少于64000个,则编辑文本时,该文本框将开始表现出奇怪的行为。)
有关更多详细信息,请参阅

  • VBA可变长度
    字符串
    最多可包含2^31个字符
有关更多详细信息,请参阅


现在来回答有关QueryDef对象中LongText参数的问题。不幸的是,DAO不支持LongText作为查询的参数类型,即使它允许您在查询设计中创建参数

您有以下解决方案:

  • 打开记录集并在其中添加/更新记录
  • 对该查询使用ADO命令对象
  • 将函数
    inhalte(“DefaultInhalt”)
    硬编码到查询的SQL中
  • 或者连接您自己的SQL字符串,包括值(SQL总长度限制为64000个字符!)

如果
inhalte
是一个记录集对象,那么请尝试显式指定
.Value
属性,例如
inhalte(“DefaultInhalt”).Value
并查看这是否有任何区别。仍然是同样令人难以置信的有用错误消息。我在vba代码中只使用了普通的sql,没有那么干净,但这是时间最不密集的解决方法,而且工作起来没有任何问题。