MS Access 2003 - VBA para modificar una tabla después de un “SELECT * EN tblTemp DE tblMain” declaración

StackOverflow https://stackoverflow.com/questions/2455645

  •  20-09-2019
  •  | 
  •  

Pregunta

Yo uso funciones como el siguiente para hacer tablas temporales de tablas cruzadas consultas.

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

Lo hago para que luego puede utilizar más de VBA para tomar la tabla temporal para sobresalir, utilizar algunas de las funciones de Excel (fórmulas y tal) y luego volver a los valores de la tabla original (tblMain). punto simple que estoy recibiendo un tropiezo es que después de la instrucción SELECT INTO tengo que añadir una nueva columna adicional a la tabla temporal y no sé cómo hacer esto:

sql = "Create Table..."

es como la única manera que sé cómo hacer esto y por supuesto esto no trabaja a bien con el enfoque anterior, porque no puedo crear una tabla que ya se ha creado después de los hechos, y no puedo crearlo antes debido a que el enfoque de instrucción SELECT INTO devolverá una "tabla ya existe" mensaje.

Cualquier ayuda? gracias chicos!

¿Fue útil?

Solución

Se me ocurren las siguientes maneras en que puede lograr este

1. Crear, a continuación, insertar

Usted puede hacer una CREATE TABLE tblTemp con todas las columnas que necesita. Por supuesto, usted tendrá más columnas que contiene TblMain, por lo que su inserción contendrá definiciones de columna.

INSERT INTO tblTemp (Col1, Col2, Col3) SELECT Col1, Col2, Col3 from TblMain

2. Insertar en, a continuación, añadir la columna

Puede hacer su inserción en, a continuación, añadir columnas utilizando múltiples maneras

  1. En VBA, utilice el objeto TableDef para que apunte a tblTemp y luego agregar una columna a lo
  2. Ejecutar DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn (OTTOMH)

Otros consejos

Hay siempre algo más que una manera de pelar un felino. Se podría utilizar DAO? Esto tiene la ventaja de ser capaz de establecer las diversas propiedades del campo de nueva creación que llegar al crear nuevo campo a través de la interfaz de usuario dentro de Access. Sólo una idea: -)

Este sub l creado y probado, en Access 2007 debe ser compatible con cualquier versión sin embargo.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top