2016-08-25 11 views
0

今日アプリケーションで挿入/更新クエリを処理していて、期待していなかった結果が出てきました。Accessパラメータクエリでフィールド名をパラメータとして使用できないのはなぜですか?

クエリ

私のINSERTクエリは次のようになり:彼らは、更新されたテーブルは、これに似た

PARAMETERS id LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [id]; 

PARAMETERS nm TEXT(10), st TEXT(2); 
INSERT INTO park(pname, pstate) 
VALUES([nm],[st]); 

そして、彼らのコンパニオンの更新は、このようなものでした:

park 
ID LONG | pname TEXT(10) | pstate TEXT(2) 

予想外の結果でクエリを記述を通じてワーキング

、私は、データベースに対してそれを実行し、各種パラメータのためのテスト値を提供することにより、それぞれをテストしました。挿入クエリの後、私は新しく挿入されたレコードを更新して更新をテストします。

ほとんどの場合、テーブルは空であったため、アップデートでは単一のレコードが単に更新されます。

しかしとすぐに、私は以前に取り込まれ、テーブルの上にアップデートを実行したとして、私は、クエリがALL記録、そのIDパラメータを介して提供されたものだけではなくを更新しようとしたい。

質問はですか?

答えて

5

問題

IDは確かにパラメータは基本的にWHERE句に次のように述べたようidを使用して、parkテーブルのフィールドでしたが:

WHERE ID = id; 

または

WHERE ID = ID; 

IDであり、常にと同じであり、UPDATEは、提供されたIDで予想されるレコードの代わりにALLレコードを更新しようとしました。この問題を解決するには

ソリューション

、私は単に私がそのIDによって識別されるレコードを更新した各ケースのid前に更新されているテーブルの最初と最後の文字を使用していました。だから、作業コード - レコードのみを識別更新 - です:

PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [pkid]; 
明らか

私は、クエリを書いていた間、私は細心の注意を払っていなかった - 私は他のパラメータに別の名前を使用するのだが、私はdidnの更新クエリのためにIDに来たときにそうする。

ボトムライン

paramaterizedクエリで作業するたびに、あなたのパラメータ名があなたのテーブルのフィールド名と一致していないことを確認してください。

このようにすると、前述の問題と他の関連する問題が回避されます。

テーブル、フィールド、およびパラメータ名に予約語を使用しないようにすることもできます。

これは、レコードを更新するときに誰かが恐ろしい驚きを避けるのに役立ちます。または、パラメータクエリがうまくいかなかった理由を理解しようとします。

関連する問題