1

SQL2005バックボーンを備えたAccess2007でVBコードを使用しています。私のSQLサーバーは別のマシンにあり、以下のコードはクライアントで実行されます。問題は、以下のUPDATEコマンドを実行すると、「操作には更新可能なクエリを使用する必要があります」というエラーが表示されることです。私はこれが一般的であることを知っていますが、インターネットでの私のすべての調査は私の状況に似たものを生み出しませんでした。

Dim MyDB as DAO.Database
Dim sSQL as String
sSQL = "UPDATE tblBMS_Batch SET Status = 70 WHERE Batch_ID = 108582"
MyDB.Execute sSQL

設定されたテーブルは以下のとおりです

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblBMS_Batch](
[Batch_Id] [int] IDENTITY(1,1) NOT NULL,
[SDetail_Id] [int] NULL,
[Destination_Id] [int] NULL,
[Batch_Number] [smallint] NULL,
[Line_Number] [smallint] NULL,
[Packing_Number] [smallint] NULL,
[Start_Time] [datetime] NULL,
[End_Time] [datetime] NULL,
[Status] [smallint] NULL,
[Batch_Note] [varchar](1000) NULL,
[Employee_Number] [smallint] NULL,
[PLC_BatchNumber] [smallint] NULL,
[Packing_BatchLetter] [varchar](3) NULL,
[Number_Bags] [smallint] NULL,
[Abort_Status] [bit] NULL,
[Return_Bags] [smallint] NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

実行時にエラーが発生します。混乱を招くために、まったく同じUPDATEがSQLで直接機能します。また、同じマシン上の別のアプリケーションで他のVBコードのそのテーブルを更新することもできます(ただし、ADODB接続を使用します)。

何か案は?私はここでかなり困惑しています。前もって感謝します。

ジェイソン

4

2 に答える 2

0

このSQLを試すことができますか:

UPDATE tblBMS_Batch SET Status = '70' WHERE Batch_ID = '108582'

フィールドは数値またはテキストとして保存されますか? テキストの場合、Accessはその構文に厳密であるため、上記は機能する可能性がありますが、値が一致する限り、MS SQLはSQLのテキスト/数値フィールドを補正できます(常にいい感じだと思いました)

または、この SQL を Access 経由で実行する必要がある場合は、SQL サーバーへのパススルー クエリとして実行でき、サーバー上で実行する場合と同じ方法で実行する必要があります。

于 2012-05-16T11:01:10.230 に答える
0

問題は、Identity フィールドを含む SQL Server テーブルを更新するときに dbSeeChanges オプションを使用する必要があることだと思います。また、あなたの見落としだったかもしれませんが、MyDBをどこに設定しているのかわかりません。

Dim MyDB As DAO.Database
Set MyDB = CurrentDb
Dim sSQL As String
sSQL = "UPDATE tblBMS_Batch SET [Status] = 70 WHERE Batch_ID = 108582"
MyDB.Execute sSQL, dbFailOnError + dbSeeChanges
Set MyDB = Nothing

私はオンラインでいくつかの場所を見てきましたが、驚いたことに、Statusという単語は実際にはSQL ServerまたはMS Accessの予約語ではないようですが、念のため、とにかく括弧で囲みました。

于 2012-05-16T14:59:50.567 に答える