[英]Access Not allowing INSERT or UPDATE of null values in SQL-Server column (Access Run-time Error 3162)
你好,stackoverflow 的广阔世界,
问题:
我目前正在开发一个使用访问表单来获取和插入数据的 sql-server 数据库。 在昨天之前一切正常。 现在的问题是我在尝试运行插入查询时收到以下错误。
Access Runtime Error '3162': You tried to assign the Null value to a variable that is not a Variant data type.
问题详情:
这似乎是 Access 不允许我在允许空值的 SQL 表列中插入或更新空值的结果。
如果我在 Microsoft SQL Server Management Studio 中运行相同的查询,则进一步支持这一点,我能够插入和更新 Null 值。
您可以在 OLD ISSUE DETAILS 下看到我当前使用的 INSERT 查询。
解决方案 2019/4/24 太平洋标准时间下午 1:35:
似乎访问表链接没有使用最新版本的 SQL 表。 刷新链接后,一切正常
旧问题详情:
更新:19 年 4 月 24 日,太平洋标准时间上午 10:33:意识到我忘记提供错误发生的位置。 在该InsertProject功能出现错误QDF.Execute
就我所见,我没有这样做。 所有可以为空的表列都设置为这样,并且从我所看到的,vba 中的变量似乎设置正确。
我已经提供了与此问题相关的代码、查询和其他信息。
这是我正在使用的查询:
INSERT INTO ci_project
(project_id,
project_group,
project_projecttype,
project_hasmilestones,
project_hasgantt,
project_category,
project_difficulty,
project_notes,
project_completiondetails,
project_statuscode,
project_inprogressdate,
project_completeddate,
project_datecreated,
project_lastupdated,
project_canceleddate,
project_isActive)
VALUES (@projectID
,@projectGroup
,@projectType
,@projectHasMilestones
,@projectHasGantt
,@projectCategory
,@projectDifficulty
,@projectNotes
,@projectCompletionDetails
,@projectStatus
,@projectDateInProgress
,@projectDateComplete
,@projectDateCreated
,@projectDateUpdated
,@projectCanceledDate
,@projectIsActive);
这是我制作的函数,可以更轻松地多次调用它:
'This is located in another Module called OtherFunctions
Dim dbs as DAO.Database
Public Function InsertProject(projectID As String, _
projectGroup As Integer, _
projectType As Integer, _
projectHasMilestones As Boolean, _
projectHasGantt As Boolean, _
projectCategory As Integer, _
projectDifficulty As Integer, _
projectNotes As Variant, _
projectCompletionDetails As Variant, _
projectStatus As Integer, _
projectDateInProgress As Variant, _
projectDateComplete As Variant, _
projectCanceledDate As Variant, _
projectIsActive As Integer)
OtherFunctions.Initialize
Dim QDF As DAO.QueryDef
If FindQuery("InsertProject") = True Then OtherFunctions.dbs.QueryDefs.Delete "InsertProject"
Set QDF = OtherFunctions.dbs.CreateQueryDef("InsertProject", SQLInsertProject)
QDF.Parameters("@projectID").Value = projectID
QDF.Parameters("@projectGroup").Value = projectGroup
QDF.Parameters("@projectType").Value = projectType
QDF.Parameters("@projectHasMilestones").Value = projectHasMilestones
QDF.Parameters("@projectHasGantt").Value = projectHasGantt
QDF.Parameters("@projectCategory").Value = projectCategory
QDF.Parameters("@projectDifficulty").Value = projectDifficulty
QDF.Parameters("@projectNotes").Value = projectNotes
QDF.Parameters("@projectCompletionDetails").Value = projectCompletionDetails
QDF.Parameters("@projectStatus").Value = projectStatus
QDF.Parameters("@projectDateInProgress").Value = ConvertDateToUnix(projectDateInProgress)
QDF.Parameters("@projectDateComplete").Value = ConvertDateToUnix(projectDateComplete)
QDF.Parameters("@projectDateCreated").Value = ConvertDateToUnix(Now())
QDF.Parameters("@projectDateUpdated").Value = ConvertDateToUnix(Now())
QDF.Parameters("@projectIsActive").Value = projectIsActive
QDF.Parameters("@projectCanceledDate").Value = ConvertDateToUnix(projectCanceledDate)
QDF.Execute
If FindQuery("InsertProject") = True Then OtherFunctions.dbs.QueryDefs.Delete "InsertProject"
Set QDF = Nothing
End Function
这是我调用函数的地方:
'These are set in the same sub as the insert project call
Dim projectID As String
Dim CancelDate As Variant
Dim canceledStatus As Integer
'These are located in a different module called OtherFunctions
Public IDEASUGGESTION_HASGANT As Boolean
Public IDEASUGGESTION_HASMILESTONES As Boolean
Public IDEASUGGESTION_PROJECTTYPE As Integer
' /\/\/\ THERE IS CODE ABOVE THIS /\/\/\
canceledStatus = 12
If Me.IdeaStatus = canceledStatus And DatabaseQueries.CheckIdeaSuggestion(Me.IdeaID) = True Then
CancelDate = Now()
If MsgBox("Are you sure you want to do this? Canceling a idea will make it un-editable.", vbYesNo) = vbYes Then
GoTo IdeaCancel
Else
GoTo GotoEnd
End If
ElseIf Me.IdeaStatus = canceledStatus And DatabaseQueries.CheckIdeaSuggestion(Me.IdeaID) = False Then
MsgBox "You cannot cancel an idea that does not exist.", vbExclamation
CancelDate = Null
GoTo GotoEnd
Else
'other code run here not pertaining to the insert
End If
Call DatabaseQueries.InsertProject(
projectID, _
Me.IdeaGroup, _
OtherFunctions.IDEASUGGESTION_PROJECTTYPE, _
OtherFunctions.IDEASUGGESTION_HASMILESTONES, _
OtherFunctions.IDEASUGGESTION_HASGANT, _
Me.IdeaCategory, _
Me.IdeaDifficulty, _
Null, _
Null, _
Me.IdeaStatus, _
Me.IdeaInprogressDate, _
Me.IdeaCompleteDate, _
CancelDate, _
1)
' \/\/\/ THERE IS CODE BELOW THIS \/\/\/
当我运行它时,这些是表单值:
Me.ideaID = Null
Me.IdeaGroup = 1
Me.IdeaCategory = 2
Me.IdeaDifficulty = 1
Me.IdeaStatus = 1
Me.IdeaInprogressDate = Null
Me.IdeaCompleteDate = Null
OtherFunctions.IDEASUGGESTION_PROJECTTYPE = 1
OtherFunctions.IDEASUGGESTION_HASMILESTONES = False
OtherFunctions.IDEASUGGESTION_HASGANT = False
表结构为:
Column Name Data Type Can be Null
project_id varchar(45) No
project_group int No
project_projecttype int No
project_hasmilestones bit No
project_hasgantt bit No
project_category int No
project_difficulty int No
project_notes text Yes
project_completiondetails text Yes
project_statuscode int No
project_inprogressdate bigint Yes
project_completeddate bigint Yes
project_datecreated bigint No
project_lastupdated bigint No
project_canceleddate bigint Yes
project_isActive int No
我为代码块墙道歉。
如果有人知道为什么或可以弄清楚为什么会发生此错误,我将不胜感激。
更新 4/24/19 太平洋标准时间上午 11:10:根据 HansUp 的推荐,我创建了一个使用 RST.AddNew 方法的替代插入方法更多详细信息可以在这里找到。 这样做后,我发现导致悲伤的变量是 InsertProject 函数中的 projectCanceledDate。 唯一的问题是我不知道为什么,该变量被定义为 Variant。
太平洋标准时间 4/24/19 上午 11:43 更新:在进行更多测试之后。 我发现我可以在 Microsoft SQL Server Management Studio 中插入和更新 project_cancleddate 的 NULL 值。
在做了一些更多的实验后,我发现了问题。 似乎 SQL 服务器中的更改尚未反映在访问数据库中(即使project_canceleddate
接受空值)。 刷新ci_project
表上的链接后,一切正常。
在调用 InsertProject 中,字段 projectID 和 CancelDate 未指定任何值。 他们有什么用?
添加此简单代码以查看参数中的内容。
Dim parm As DAO.Parameter
For Each parm In QDF.Parameters
Debug.Print parm.Name, parm.Value
Next parm
这是我得到的
@projectID MyProjId
@projectGroup 1
@projectType 1
@projectHasMilestones 0
@projectHasGantt 0
@projectCategory 2
@projectDifficulty 1
@projectNotes Null
@projectCompletionDetails Null
@projectStatus 1
@projectDateInProgress Null
@projectDateComplete Null
@projectDateCreated 1556103601
@projectDateUpdated 1556103601
@projectCanceledDate Null
@projectIsActive 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.