0

次のような関数を使用して、クロス集計クエリから一時テーブルを作成します。

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ステートメントのアプローチは、「テーブルはすでに存在します」というメッセージを返します。

何か助けはありますか?みんなありがとう!

4

2 に答える 2

1

私はあなたがこれを達成することができる次の方法を考えることができます

1.作成してから挿入します

CREATE TABLE tblTemp必要なすべての列でを実行できます。もちろん、TblMainに含まれるよりも多くの列があるため、挿入には列定義が含まれます。

INSERT INTO tblTemp (Col1, Col2, Col3) SELECT Col1, Col2, Col3 from TblMain

2.に挿入し、列を追加します

に挿入してから、複数の方法を使用して列を追加できます

  1. VBAでは、TableDefオブジェクトを使用してtblTempをポイントし、それに列を追加します
  2. 実行DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn(OTTOMH)
于 2010-03-16T15:32:41.930 に答える
1

猫の皮を剥ぐ方法は常に複数あります。DAOを使用できますか?これには、Access内のユーザーインターフェイスを介して新しいフィールドを作成するときに取得する、新しく作成されたフィールドのさまざまなプロパティを設定できるという利点があります。ただのアイデア:-)

これは、Access 2007で作成およびテストされたサブファイルですが、どのバージョンとも互換性があるはずです。

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
于 2010-03-17T09:58:59.873 に答える