-1

わかりやすくするために、テーブルに 2 つの列があります。これを行う方法が必要だと思いますが、簡単なクエリを実行せずに実際にこれを行う方法は考えられません。私は VBA を使用して UPDATE ステートメントを実行し、それをマクロに入れることを想定していますが、いくつかの調査を行った後、特に有用なものは思いつきません。DISTINCT を使おうと思ったのですが、UPDATE 文では使えないようです。この問題にどのようにアプローチすればよいですか?

編集:申し訳ありませんが、十分な情報を追加していないようですので、ここに追加します。

これで始めると:

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3 
    B    |    2
    A    |    1
    C    |    3

私はこれで終わろうとしています(行自体の順序は実際には関係ありません):

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3
    B    |    2

なぜクエリでそれをやろうとしないのかと誰かが尋ねました。答えは、テーブルにリンクされているフォームを使用しているためです (複数の中間クエリを通過することによって)。このフォームでは、データを入力してテーブルに追加できる必要があります。クエリを使用して重複を削除すると、クエリとテーブルの関係が 1 対 1 にならなくなり、フォームに情報を入力できなくなります。

これが理にかなっていることを願っていますが、そうでない場合はお知らせください。喜んでさらに詳しく説明します.

4

2 に答える 2

1

レコードセットを使用する必要があります(クエリで指定したテーブル構造から重複を削除することはできません。一致する行を区別するための一意のキーがなく、作成する必要があるものを取得するためです)新しいテーブル):

dim rst as new adodb.recordset
dim c1 as string
dim c2 as string
rst.open "SELECT Column1, Column2 FROM TableName ORDER BY Column1, Column2" _
    , currentproject.connection, adOpenKeyset, adLockOptimistic
restart_:
c1 = rst(0)
c2 = rst(1)
rst.movenext
do while not rst.eof
    if rst.fields(0) = c1 and rst.fields(1) = c2 then  //duplicate
        rst.delete
        rst.requery
        goto restart_
    else
        c1 = rst(0)
        c2 = rst(1)
        rst.movenext
    end if
loop   

削除操作で使用した構文は危険な場合があります (申し訳ありませんが、私は常にクエリを使用して削除を行います)。

于 2012-08-17T02:59:10.413 に答える
0

必要な行を取得して新しいテーブルに挿入するには、distinct を使用します。古いテーブルの名前を変更し、新しいテーブルに置き換えます。

于 2012-08-16T16:53:34.167 に答える