2012-02-07 10 views
3

私は既存のテーブルT1からテーブルT2を作成しています。これは、MAKE TABLEクエリタイプを使用しており、新しいテーブルT2に主キーとして自動インクリメントフィールドを追加する必要があります。MS Access 2007:MAKE TABLEクエリからAUTOINCREMENTフィールドを追加します。

私は必要なSQLが不思議です。たとえば、次のように

SELECT AUTOINCREMENT(1, 1) AS ID, T1.*, INTO T2 FROM T1 

もちろんのAUTOINCREMENT(1, 1) AS IDコメントは動作しませんが、それは私が働くかもしれない疑いがあるとだけ私がやろうとしていますかを示すために、例示の目的のために使用していますものです。

テーブルがALTER TABLEステートメントを使用して作成された後で変更できないことに注意してください.T1からT2が作成されたときに、AUTOINCREMENTフィールドを作成して作成する必要があります。

+0

なぜあなたは、alter tableを使用することはできませんか? – Fionnuala

+0

ユーザー入力用にフォームが開かれているときにDBを開くと、クエリが実行されます。私はMAKE TABLEクエリを実行するためのマクロを構築してから、別のALTER TABLEクエリを実行する必要があると思います。 –

+0

私はあなたがする必要があると思う。さまざまなイベントのコードを実行することもできます。 – Fionnuala

答えて

3

コメントの中で、 "DBが開いているときにクエリが実行され、ユーザー入力用に開いたときにマクロを作成してMAKE TABLEクエリを実行し、別のALTER TABLEクエリを実行する必要があると思います。

毎回T2を作成するのではなく、T1を1回作成してから、T1から追加する前に毎回その内容を空にする方が簡単です。 T2から行を破棄するには:

Dim strSql as String 
strSql = "DELETE FROM T2;" 
CurrentProject.Connection.Execute strSql 

を使用すると、ID列の1にオートナンバーをリセットしたい場合は、ALTER TABLE文を使用することができます。

strSql = "ALTER TABLE T2 ALTER COLUMN ID COUNTER(1, 1);" 
CurrentProject.Connection.Execute strSql 

次に、T1の内容をT2に追加します。

strSql = "INSERT INTO T2 (field1, field2)" & vbCrLf & _ 
    "SELECT field1, field2 FROM T1;" 
CurrentProject.Connection.Execute strSql 

IDリストをフィールドリストから除外し、自動番号付けを処理するだけです。必要に応じて、その文のSELECT部分​​にORDER BYを付けてT1行を追加する順序を制御することができます。

ADO(CurrentProject.Connection)を使用して、これら3つのステートメントをすべて実行しました。しかし、最初と3番目のステートメントはDAOの下でうまく動作するはずです。しかし、ALTER TABLEステートメントはADOから実行する必要があります。

+0

+1偉大な答え:) –

+0

合意、ありがとう。 –

0

それは単にそのようなものです....

Select Name, 
    (SELECT COUNT(*) 
    FROM Person pp 
    WHERE pp.ID<=Person.ID) AS serialNo 
FROM Person 
関連する問題