MS Access 2003 - 「SELECT * INTO tblTemp FROM tblMain」ステートメントの後にテーブルを変更するための VBA
-
20-09-2019 - |
質問
次のような関数を使用して、クロス集計クエリから一時テーブルを作成します。
Function SQL_Tester()
Dim sql As String
If DCount("*", "MSysObjects", "[Name]='tblTemp'") Then
DoCmd.DeleteObject acTable, "tblTemp"
End If
sql = "SELECT * INTO tblTemp from TblMain;"
Debug.Print (sql)
Set db = CurrentDb
db.Execute (sql)
End Function
これを行うのは、さらに VBA を使用して一時テーブルを Excel に取り込み、Excel の機能の一部 (数式など) を使用して、値を元のテーブル (tblMain) に返すことができるようにするためです。私がつまずいている単純な点は、Select INTO ステートメントの後に、その一時テーブルにまったく新しい追加の列を追加する必要があるのですが、これを行う方法がわかりません。
sql = "Create Table..."
これは私がこれを行う方法を知っている唯一の方法のようなものですが、もちろん、これは上記のアプローチではうまく機能しません。なぜなら、すでに作成されているテーブルを事後に作成することはできず、事前に作成することもできないからです。 SELECT INTO ステートメントのアプローチでは、「テーブルはすでに存在します」というメッセージが返されます。
何か助けはありますか?みんなありがとう!
解決
これを達成するには次の方法が考えられます
1.作成して挿入する
できることは、 CREATE TABLE tblTemp
必要な列がすべて揃っています。もちろん、TblMain に含まれる列よりも多くの列があるため、挿入には列定義が含まれます。
INSERT INTO tblTemp (Col1, Col2, Col3) SELECT Col1, Col2, Col3 from TblMain
2.「挿入」してから列を追加します
複数の方法を使用して列を挿入し、列を追加できます。
- VBA では、
TableDef
tblTemp を指すオブジェクトを作成し、それに列を追加します - 実行する
DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn
(オットーム)
他のヒント
そこは、ネコを肌にする、常に複数の方法。あなたは、DAOを使用することができますか?これは、Access内のユーザインタフェースを介して新しいフィールドを作成する際に取得し、新しく作成されたフィールドのさまざまなプロパティを設定することができるという利点があります。ジャストアイデア: - )
このサブAccess 2007で、作成され、テストリットルかかわらず任意のバージョンとcompatableする必要があります。
Public Sub AddField()
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim strTable As String
Set dbs = CurrentDb
strTable = "tblTemp"
'create the TableDef object that
'wish to change
Set tdf = dbs.TableDefs(strTable)
'create new field
Set fld = tdf.CreateField("Name", dbText)
'set property of new created field
fld.AllowZeroLength = True
'append the new field to the tabledef
tdf.Fields.Append fld
End Sub