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 中的用户界面创建新字段时获得的新创建字段的各种属性。只是一个想法:-)

这个 sub l 创建和测试,在 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 回答