簡體   English   中英

MS Access 2003-VBA,用於在“ SELECT * INTO tblTemp FROM tblMain”語句之后更改表

[英]MS Access 2003 - VBA for altering a table after a “SELECT * INTO tblTemp FROM tblMain” statement

我使用如下函數從交叉表查詢中創建臨時表。

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.插入,然后添加列

您可以插入,然后使用多種方式添加列

  1. 在VBA中,使用TableDef對象指向tblTemp,然后向其中添加一列
  2. 執行DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn (OTTOMH)

總是有不止一種方式來貼皮貓科動物。 您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM