2010-03-16 108 views
0

我使用類似以下的函數將臨時表從crosstabs查詢中移出。MS Access 2003 - 用於在「SELECT * INTO tblTemp FROM tblMain」語句之後更改表的VBA

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語句方法將返回「表已經存在」消息。

任何幫助?多謝你們!

+0

這聽起來像是一個有問題的設計。首先,你不應該在應用程序的前端創建表。其次,重複的任務不應該經常要求改變目標表的結構。偶爾,當然,但不是當然。確定導入格式,你可以完全避免這個問題。 – 2010-03-17 20:09:32

+0

這實際上是一個自動化部分,它通過創建的我的臨時訪問應用程序調用excel中的財務函數,並使用由我提供的查詢生成的表。然而,造成問題的原因是讓「幕後卓越」的方法起作用,結果回到了桌子上。所以我需要在這個動態方法中創建空字段,並將結果數據字段發送到表單(我的實際數據庫)上,或者使用ppt自動化表示等等。因爲這個excel的主意確實有效,但這是我知道的唯一方法... – Justin 2010-03-18 01:04:11

+0

...如何讓它發揮作用,因爲我從烹飪書中學到了這個excel利用技巧。我也有一個自定義的添加內置到Excel通過類模塊的自助餐,讓我能夠在Excel中創建帶有公式的迷你圖。所以我相信我可以得到上面的概念來處理圖表(它只是基本上將它們創建爲形狀,而不是MS圖表)只需要找出如何將OLE.copy方法返回到表單而不是rs.fields ....如果它做得很好,如果不是很好。我明白你在說什麼,這都是非常非常不自然的東西。 – Justin 2010-03-18 01:07:49

回答

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)
+0

工程就像一個魅力....謝謝! – Justin 2010-03-18 00:55:22

1

永遠有不止一種方法去皮膚的貓科動物。你可以使用DAO?這具有能夠設置通過Access內的用戶界面創建新字段時獲得的新創建字段的各種屬性的優點。只是一個想法:-)

這在Access 2007中創建和測試的子l應該與任何版本兼容。

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 
+0

哦,很酷..感謝這樣!謝謝! – Justin 2010-03-18 00:55:44