2010-03-16 103 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