MS Access 2003 - VBA для изменения таблицы после оператора «SELECT * INTO tblTemp FROM tblMain» - PullRequest
0 голосов
/ 16 марта 2010

Я использую функции, подобные приведенным ниже, для создания временных таблиц из запросов кросс-таблиц.

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 вернет сообщение «таблица уже существует».

Любая помощь? спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 17 марта 2010

Всегда есть несколько способов убить кошку. Вы могли бы использовать 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
1 голос
/ 16 марта 2010

Я могу подумать о следующих способах достижения этой цели

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 (ОТТОМ)
...