【问题标题】:INSERT INTO statement in Access is cutting off at 255 charactersAccess 中的 INSERT INTO 语句在 255 个字符处被截断
【发布时间】:2016-11-07 05:09:36
【问题描述】:

我在 Access 中有一个表单,用户可以在该表单中在文本框中键入信息并点击一个可以运行 INSERT INTO 语句的按钮。即使我已将某些数据类型格式化为长文本,我仍然收到运行时错误 3271。我希望用户能够在表单的文本框中输入超过 255 个字符并拥有该数据在我的表中插入新行:

    Dim cdb As DAO.Database
    Set cdb = CurrentDb
    Dim qdf As DAO.QueryDef
    Set qdf = cdb.CreateQueryDef("", _
            "INSERT INTO AllProjects (ProjectNumber, ProjectTitle, Description, Department, Priority, Status, [Create Date], [% Complete], [Update Notes], Leader, [Initial Target Date], [Complete Date], Category, Feedback, [Strategic Initiatives], Subcategory, [Internal/External], [Case #], Alloy, Goals, Customer, [Market Segment], [Result of Corrective Action], [Initiator], [Representative / PM / CSA], [Team Memebers], [FQA Needed], [WON / LOST / DUNNO]) VALUES (@prjnum, @title, @description, @dept, @prior, @status, @createdate, @ctlcomp, @notes, @lead, @targdate, @compdate, @cat, @feedback, @initiatives, @sub, @internal, @case, @alloy, @goals, @customer, @mktseg, @result, @initiat, @rep, @team, @FQA, @wonloss)")
    qdf.Parameters("@prjnum").Value = ProjectNumber
    qdf.Parameters("@title").Value = Me.Title
    qdf.Parameters("@description").Value = Me.Description
    qdf.Parameters("@dept").Value = Me.Department
    qdf.Parameters("@prior").Value = Me.Priority
    qdf.Parameters("@status").Value = Me.Status
    qdf.Parameters("@createdate").Value = Me.Create_Date
    qdf.Parameters("@ctlcomp").Value = Me.Ctl__Complete
    qdf.Parameters("@notes").Value = Me.Update_Notes
    qdf.Parameters("@lead").Value = Me.Leader
    qdf.Parameters("@targdate").Value = Me.Target_Date
    qdf.Parameters("@compdate").Value = Me.Complete_Date
    qdf.Parameters("@cat").Value = Me.Category
    qdf.Parameters("@feedback").Value = Me.Feedback
    qdf.Parameters("@initiatives").Value = Me.Strategic_Initiatives
    qdf.Parameters("@sub").Value = Me.Sub
    qdf.Parameters("@internal").Value = Me.Internal
    qdf.Parameters("@case").Value = Me.Case
    qdf.Parameters("@alloy").Value = Me.Alloy
    qdf.Parameters("@goals").Value = Me.Goals
    qdf.Parameters("@customer").Value = Me.Customer
    qdf.Parameters("@mktseg").Value = Me.Market_Segment
    qdf.Parameters("@result").Value = Me.result
    qdf.Parameters("@initiat").Value = Me.Initiator
    qdf.Parameters("@rep").Value = Me.RepresentativePMCSA
    qdf.Parameters("@team").Value = Me.TeamMembers
    qdf.Parameters("@FQA").Value = Me.FQANeeded
    qdf.Parameters("@wonloss").Value = Me.WonLostDunno
    qdf.Execute

【问题讨论】:

  • 试过使用备注字段吗?
  • @ZevSpitz 我见过这个。但是,我对此并不陌生,您能否将其分解得更多,以便我了解如何在我的代码中实现此解决方案?谢谢。

标签: sql vba ms-access


【解决方案1】:

您可以通过使用 DAO 对象插入记录来解决此问题,而不是执行 SQL 语句。像这样的:

Dim rs As DAO.Recordset
Set rs = cdb.OpenRecordset("AllProjects")
With rs
    .AddNew
    !ProjectNumber = ProjectNumber
    !ProjectTitle = ProjectTitle
    '...
    .Update
End With

DAO Reference on MSDNRecordset object


似乎ADO没有这个问题,即使是在执行SQL语句时。

您需要向 Microsoft ActiveX 数据对象 库添加一个引用(Tools -> References...)(选择最高版本;在我的机器上)现在是 6.1)。

Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.AccessConnection
'query shortened for brevity
cmd.CommandText = _
    "INSERT INTO AllProjects (ProjectNumber, ProjectTitle, Description) " & _
    "VALUES (?, ?, ?)"
cmd.Execute , Array(ProjectNumber, Me.Title, Me.Description)

ADO Reference on MSDN

【讨论】:

  • 完美!感谢您的额外帮助。
  • @MekenzieBuhr 使用 ADO(可用于连接 Access 数据库的备用库)似乎可以与 SQL 一起使用。请参阅我的更新答案。
【解决方案2】:

对于访问中的文本字段,最大限制为 255 个字符。您将不能插入超过 255 个字符。查看max allowed characters 并根据要求使用。尝试使用备注字段(备注字段中的字符数 65,535。)

【讨论】:

  • 文本字段中的字符数:255 备忘录字段中的字符数:通过用户界面输入数据时为 65,535;以编程方式输入数据时为 1 GB 的字符存储空间
  • 我使用的是 Access 2016,所以是的,我将数据类型设置为“长文本”,这与现在的备注字段相同 The-Memo-data-type-is-now-called-Long-Text
  • @GhostDeveloper 这并没有解决我的问题我已经将该字段设置为备忘录/长文本。
  • 能否请您发布错误详细信息(错误文本+代码)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多