【问题标题】:MS Access 2003 - VBA for altering a table after a "SELECT * INTO tblTemp FROM tblMain" statementMS Access 2003 - VBA 用于在“SELECT * INTO tblTemp FROM tblMain”语句之后更改表
【发布时间】:2012-05-13 02:36:51
【问题描述】:

我使用如下函数从交叉表查询中创建临时表。

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 语句方法会返回“表已存在”消息。

有什么帮助吗?谢谢大家!

【问题讨论】:

  • 这听起来像是一个有问题的设计。首先,您不应该在应用程序的前端创建表。其次,重复的任务不应该经常需要改变目标表的结构。偶尔,当然,但不是理所当然的。确定导入格式,就可以完全避免这个问题。
  • 这实际上是一个自动化部分,它通过我创建的临时访问应用程序调用 excel 中的财务功能,表格由我提供给它的查询制成。然而,导致问题的是让“幕后excel”方法发挥作用,结果又回到了桌面。所以我需要在这种动态方法中创建空字段,并将结果数据字段发送到表单(我的实际数据库)或 ppt 自动演示文稿等上。这是因为这个 excel 想法确实有效,但这是我知道的唯一方法...
  • ...如何让它工作,因为我从食谱中学到了这个 excel 使用技巧。我还通过一系列类模块在 excel 中内置了一个自定义插件,这使我能够使用 excel 中的公式创建迷你图。所以我相信我也可以让上述概念与图表一起使用(它基本上只是将它们创建为形状,而不是 MS 图表)只需要找出如何将 OLE.copy 方法返回到表单而不是 rs.fields ....如果它做得很好,如果不是很好。我明白你在说什么,这都是非常非典型的自动化东西。

标签: ms-access vba ms-access-2003


【解决方案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)

【讨论】:

    【解决方案2】:

    总是有不止一种方法可以给猫科动物剥皮。你可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多