1

Access でデータベースを作成しています。このデータベースには、同一の類似したテーブルが多数あり、それらの名前はすべて、table_0、table_1... のように順番に付けられます。

VBAでループを作成して最初にテーブルを作成し、フィールドを簡単に追加するなど、テーブルを変更する方法があるかどうかを知りたかったのです。

テーブルを作るとしたらこんな流れになりますが、VBAでは

while(i=0, i<20,i++){
CREATE TABLE  table_i(
field_1 int PRIMARY KEY,
field_2 CHAR(255));
}
4

1 に答える 1

2

VBA では、次のように番号付きのテーブル名をループできます...

Dim strTable As String
Dim i As Long
For i = 0 To 20
    strTable = "table_" & CStr(i)
    Debug.Print strTable
Next i

ただし、印刷する以外に、各テーブル名で何かをしたいと考えています。だから、あなたはすでにあなたのCREATE TABLE声明を考え出したとしましょう。こんな感じかも・・・

CREATE TABLE table_name (
field_1 INTEGER PRIMARY KEY,
field_2 TEXT(255));

Forそのため、その DDL ステートメントを文字列変数にロードし、ループのたびtable_nameに の現在の値に置き換えて、strTableその DDL ステートメントを実行することができます。

Dim strTable As String
Dim i As Long
Dim strSql As String
strSql = "CREATE TABLE table_name (" & vbCrLf & _
    "field_1 INTEGER PRIMARY KEY," & vbCrLf & _
    "field_2 TEXT(255));"
For i = 0 To 20
    strTable = "table_" & CStr(i)
    CurrentProject.Connection.Execute Replace(strSql, _
        "table_name", strTable)
Next i

このReplace()関数は、Access 2000 で初めて利用可能になりました。以前のバージョンの Access を使用している場合は、SQL 文字列を処理する別の方法が必要になります。

ALTER TABLEステートメントを実行したい場合は、代わりに実行できます。

なので、やりたいことはVBAで簡単にできると思います。しかし、私はあなたがそれをするべきかどうか確信が持てません。同一の構造を持つ複数のテーブルは、通常、設計エラーを示す危険信号です。あなたの場合、それが設計エラーであると結論付ける証拠はありません。OTOH、それが設計ミスではないと結論付ける証拠はありません。;-)

于 2012-07-12T00:58:19.790 に答える