String、LongText 和 ShortText 的长度是多少?将长文本设置为 SQL 参数导致错误 3001
What are the String, LongText and ShortText lengths? Setting Long Text as SQL Parameter results in Error 3001
当我在 ms-access 2013 中创建带有参数的追加查询并且其中任何参数的类型设置为 LongText
时,查询失败,错误代码为 3001 Invalid Argument
。但是,将类型更改为 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
我插入参数的 table 的字段类型为 LongText
,因此我希望它能正常工作 - 此处问题的根本原因是什么?如果我无法指定 LongText
作为参数,我该如何传递长文本?
我认为这可能与访问中字符串的长度限制有关。这些限制到底是什么? Google 将您重定向到 concatenation and max length of string in VBA, access 关于字符串长度的问题,但我找不到长度问题的明确答案:
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;
只要我正确阅读你的问题,我几乎可以肯定你不能使用 longtext/memo 字段作为参数。根据此处找到的信息:Any way to have long text (memo) parameters in DAO and MS Access?
ShortText
(在 Access 2013 之前只是 Text
)的长度最多为 255 个字符。
LongText
(Access 2013 之前的Memo
)最长可达 1 GB,但大多数 Access 控件只能显示 64000 个字符。 (如果表单中的文本框包含的字符数远少于这 64000 个字符,则在编辑文本时会开始表现得很奇怪。)
有关详细信息,请参阅 Access 2013 Documentation。
- 一个VBA可变长度
String
最多可以有2^31个字符
有关详细信息,请参阅 Visual Basic for Applications Language Reference。
现在回答您关于 QueryDef 对象中的 LongText 参数的问题。不幸的是,DAO 不支持将 LongText 作为查询的参数类型,即使它允许您在查询设计中创建参数。
您有以下选项作为解决方法:
- 打开记录集并add/update那里的记录
- 为该查询使用 ADO 命令对象
- 将函数
inhalte("DefaultInhalt")
硬编码到查询的 SQL 中
- 或者连接您自己的 SQL 字符串,包括值(总 SQL 长度限制为 64000 个字符!)
当我在 ms-access 2013 中创建带有参数的追加查询并且其中任何参数的类型设置为 LongText
时,查询失败,错误代码为 3001 Invalid Argument
。但是,将类型更改为 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
我插入参数的 table 的字段类型为 LongText
,因此我希望它能正常工作 - 此处问题的根本原因是什么?如果我无法指定 LongText
作为参数,我该如何传递长文本?
我认为这可能与访问中字符串的长度限制有关。这些限制到底是什么? Google 将您重定向到 concatenation and max length of string in VBA, access 关于字符串长度的问题,但我找不到长度问题的明确答案:
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;
只要我正确阅读你的问题,我几乎可以肯定你不能使用 longtext/memo 字段作为参数。根据此处找到的信息:Any way to have long text (memo) parameters in DAO and MS Access?
ShortText
(在 Access 2013 之前只是Text
)的长度最多为 255 个字符。LongText
(Access 2013 之前的Memo
)最长可达 1 GB,但大多数 Access 控件只能显示 64000 个字符。 (如果表单中的文本框包含的字符数远少于这 64000 个字符,则在编辑文本时会开始表现得很奇怪。)
有关详细信息,请参阅 Access 2013 Documentation。
- 一个VBA可变长度
String
最多可以有2^31个字符
有关详细信息,请参阅 Visual Basic for Applications Language Reference。
现在回答您关于 QueryDef 对象中的 LongText 参数的问题。不幸的是,DAO 不支持将 LongText 作为查询的参数类型,即使它允许您在查询设计中创建参数。
您有以下选项作为解决方法:
- 打开记录集并add/update那里的记录
- 为该查询使用 ADO 命令对象
- 将函数
inhalte("DefaultInhalt")
硬编码到查询的 SQL 中 - 或者连接您自己的 SQL 字符串,包括值(总 SQL 长度限制为 64000 个字符!)