0

Access 2002 にフォームがあり、そのフィールドはクエリによって入力されます。レコードデータを行ごとに表示します。最後に Acknowledged というタイトルのチェック ボックスがあります。このフォームの目的は、ユーザーがレコードを見たことを認めることです。チェックボックスの「OnClick」イベントで、ユーザー名フィールドと現在の日付フィールドを自動入力するコードがあります。4 つの異なる記録/通知タイプがあります。これはすべて、この時点まで機能します。通知タイプはタイプ番号 2 の 1 つです。

このタイプのレコードを確認しようとすると、現在のクエリ以外の別のテーブルにユーザー名と日付を入力する必要があります。コードは次のとおりです。

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 を実行してもエラーは発生しませんが、テーブルにはそのレコードのこれら 2 つの値が取り込まれません。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]

4

1 に答える 1

2

AckDateが実際に日付の場合、Access では、次のようにで##はなく、日付を囲む必要があり''ます ...

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

SQLから、 ...および...CREATE TABLEを許可するために必須の値を必要とする 2 つの列があることがわかります。これらをステートメントに含める必要があります。そうしないと、既に発生しているエラーが発生します。INSERTAssetIDAcknowledgedINSERT

于 2015-07-21T13:17:04.923 に答える