2016-03-24 1 views
1

私はNewUserTableで更新しようとしているMainUserTableを持っています。新しいユーザーと既存のユーザーのために変更されたデータが含まれています。ODBCテーブルで実行しているがローカルテーブルで作業しているときに、このクエリが失敗するのはなぜですか?

ODBC接続のAccess Web AppテーブルであるMainUserTableを更新するアクセス2013データベースでSQLクエリを実行しています。存在しない場合は新規ユーザーを追加し、既にテーブルに存在するユーザーの場合は変更されたデータを更新する必要があります。

UPDATE NewUserTable 
     LEFT JOIN MainUserTable ON NewUserTable.Username = MainUserTable.Username 
     SET MainUserTable.[First Name] = [NewUserTable].[First Name] 

予想通り、私はローカルテーブルでこれを実行するとこれは私が次のエラーを取得することがODBCテーブルに対して実行されたときただし、新規ユーザーのための新しいレコードを作成し、既存のユーザーを更新し、作品:

ODBC--call failed.
[Microsoft][ODBC Driver Manager] - Invalid argument value (#0)

このエラーは、NewUserTableに新しいユーザーがいる場合にのみ発生します。 MainUserTable.Usernameと一致しないNewUserTable.Usernameのレコードです。新しいレコードを挿入していない場合は、レコードを更新するだけで正常に動作します。

+0

Wait ... NewUserTable(ローカル)に新しいエントリがある場合、MainUserTableで新規エントリを作成していますか?ローカルのDBとmdbかaccdbですか? – BIBD

+0

はい。ローカルデータベースはaccdbです。 – Leisurist

答えて

1

あなたがここでやっていることは、実際には「更新」コマンドが動作すると予想される方法に反します。必要に応じてレコードを挿入しようとするのであれば、ANSIが "updateorinsert"や "addupdate"のようなものを呼び出すと思っていたでしょう。

私は2つのステップとしてそれを行います。あなたのコードは、ローカルで動作しますなぜMSはupdateを実装する方法のアーティファクトかもしれ

  1. NewUserTable
  2. ストレートインナーとMainUserTableの更新から欠落しているエントリの挿入がMainUserTableNewUserTable

の参加。 2つのテーブルの結合であるフォームにバインドされたクエリを更新または追加できるようなものです。私はそれが嫌いです。なぜなら、私には、それがいつ働くかどうかのルールはわかりにくいからです。そして、あなたが別のデータベースに移動するとパターンはもはや機能しなくなり、コードを書き直すか、人を保持しなければなりません。

関連する問題