2

現在、Oracle テーブルの 1 つの列を更新する更新クエリに問題があります。基本的に、CSV ファイルを Access にインポートし、それを「NewULN」と呼び、このファイルの条件を使用してテーブルを更新します。

個人コードを手動で入力している場合、このスクリプトは正常に機能します。それに応じてテーブルが更新され、正しい結果が得られます。このコードは以下のとおりです。

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=[Enter Person Code]);

現在、すべてのレコードを一度に更新したいと考えていますが、これを行うのは常に困難でした。以下のこのコードは大丈夫だと思います:

元のコード:

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=NewULN.MISIdentifier);

最新バージョン (提案に基づく):

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null);

しかし、あらゆる種類のエラーが発生しました。アクセス クエリを実行しようとすると、Access がクラッシュすることがあります。

時々、ロック違反が発生します (興味深いことに、最初のレコードを更新し、残りをすべて失敗させます)。「FES_PEOPLE - 'invalid number'」というエラーが表示されることもあれば、「長い列に挿入するためだけに長い値をバインドできます」というエラーが表示されることもあります。

フィールド ULN は常に Text であり、以前は常に機能していました。MISIdentifier も常に Text でしたが (Windows XP で実行中のバージョンがあったとき)、Long Int に変更しました。

これは私が最初に書いたものではなく、マシンを Windows 7 にアップグレードした後に機能しなくなったため、Access の知識がほとんどない状態で書き直さなければなりません。

事前に返信していただきありがとうございます

4

3 に答える 3

0

Oracle への接続に使用している ODBC ドライバーは何ですか? Microsoft for Oracle ドライバーを使用している場合は、代わりに Oracle ドライバーを使用してみてください。MS ドライバーはバージョン 7 以降更新されていないため、使用しないでください。

于 2013-07-09T14:40:46.887 に答える
0

新しい Access データベースを作成し、すべてのテーブルを再度リンクすると、このクエリが機能することがわかりました。構文に問題はありませんでした:-)

于 2013-08-14T09:44:01.680 に答える