1

こんにちは、この質問に対する回答を検索しましたが、ここには見つかりませんでした。Access 2010 を使用しています。基本的に、レポートを含むテーブルがあり、レポートにはリビジョン番号があります。フィールドをコピーしてそのうちの 1 つだけを更新する方法についての回答を見つけましたが、次のようになります。

INSERT INTO reports (fieldA, fieldB, fieldC, revision, fieldD, fieldE)
SELECT  fieldA, fieldB, fieldC, 2, fieldD, fieldE
FROM reports
WHERE <somecondition to select which report to copy>

私はたくさんのフィールドを持っているので、次のようなものが欲しいです:

INSERT INTO reports 
SELECT  *, revision=2
FROM reports
WHERE <somecondition to select which report to copy>

コードが正しくないことはわかっています。私が望むものを説明するだけです。のように、すべてのフィールドをリストする巨大な SQL 行を持たず、変更したい 1 つだけにする方法です。(以前のリビジョンのコピーを同じテーブルに保持したい)

助けてくれる人に前もって感謝します:)

4

2 に答える 2

0

この質問で興味深い代替手段を見つけました 。一意のインデックスを持つ一時テーブル SQL クローン レコードを使用します。

DROP TABLE #tmp_MyTable

SELECT * INTO #tmp_MyTable
FROM MyTable
WHERE MyIndentID = 165

ALTER TABLE #tmp_MyTable
DROP Column MyIndentID

INSERT INTO MyTable
SELECT * 
FROM #tmp_MyTable

主キーを削除してリビジョンを更新し、それをテーブルにコピーして、同じことを行うことができます。

私が探している解決策ではありませんが、当面の別の方法です。

編集:

このソリューションを試しても成功しませんでした: VBA は、「複数の値を持つフィールドは、SELECT INTO 命令では許可されていません (実行時エラー 3838)」という行に沿って何かを教えてくれます。

OLE フィールドと添付ファイル フィールドの両方があり、これがエラーの原因であると思われます。しかし、私はそれらを保持する必要があります... :/

于 2011-01-03T12:38:25.753 に答える
0

これは、MS Access や他の種類の SQL では実行できないと確信しています。おそらく既にご存じのとおり、リビジョン番号とコピーするレポートの ID (またはその他の WHERE 条件) を引数として受け取るストアド プロシージャ (Access ではストアド クエリと呼ばれる) を使用することができます。この方法でも、すべてのフィールドを指定する必要がありますが、コードではなくデータベースで 1 回だけ指定します。例を次に示します。

http://www.stardeveloper.com/articles/display.html?article=2001050101&page=1

チッ!

于 2011-01-03T12:40:43.023 に答える