Access 2002 VBA - 尝试在表中输入值时获取追加查询错误

时间:2015-07-21 13:14:11

标签: vba sql-server-2008 ms-access-2002

我在Access 2002中有一个表单,其字段由查询提供。它逐行显示记录数据。标题为Acknowledged的结尾处有一个复选框。此表单的目标是让用户确认已经看过该记录。在复选框的“OnClick”事件中,我有自动填充用户名字段和当前日期字段的代码。有四种不同的记录/通知类型。所有这些都适用于这一点。有一种通知类型,类型编号为2。

当尝试确认此类记录时,除了当前查询之外,还必须将用户名和日期输入到另一个表中。这是代码:

If NotType = 2 Then
        strSQL = "INSERT INTO Maintenance (AckBy, AckDate) VALUES('" & AckName & "', '" & AckDate & "');"
        'DoCmd.SetWarnings False
        'CurrentDb.Execute strSQL, dbSeeChanges
        DoCmd.RunSQL strSQL
        DoCmd.SetWarnings True
    End If

我同时拥有DoCmd.RunSQL和CurrentDb.Execute的原因是出于测试目的。运行CurrentDb.Execute时,我没有得到任何错误,但该表不会填充该记录的这两个值。当我使用DoCmd.RunSQL时,我得到一个确认窗口,询问我是否要追加该行。当我说是的时,有一个错误声明我无法在追加查询中追加记录。我只是想把这些值放到这个表中。

更新:在MS SQL 2008中创建表SQL,在Access 2002中创建链接表:CREATE TABLE [dbo].[Maintenance]( [MaintenanceID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, [AssetID] [int] NOT NULL, [MaintenanceDate] [datetime] NULL, [MaintenanceDescription] [nvarchar](255) NULL, [MaintenancePerformedBy] [nvarchar](100) NULL, [MaintenanceCost] [float] NULL, [NextMaintenanceDate] [datetime] NULL, [Acknowledged] [bit] NOT NULL, [AckTimeStamp] [timestamp] NULL, [AckBy] [varchar](50) NULL, [AckDate] [datetime2](7) NULL, CONSTRAINT [PK_Maintenance] PRIMARY KEY CLUSTERED ( [MaintenanceID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

1 个答案:

答案 0 :(得分:2)

如果AckDate确实是一个日期,那么在Access中,您应该将日期括在##而不是''中,如下所示......

strSQL = "INSERT INTO Maintenance (AckBy, AckDate) VALUES('" & AckName & "', #" & AckDate & "#);"

CREATE TABLE SQL中可以看出,您有两列需要强制值才能允许INSERT ... AssetIDAcknowledged ...您需要在INSERT语句中包含这些内容,否则您将收到错误!