MS Access 2003 - VBA per la modifica di un tavolo dopo un “SELECT * INTO tblTemp DA tblMain” dichiarazione

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

  •  20-09-2019
  •  | 
  •  

Domanda

Io uso le funzioni come la seguente per fare tabelle temporanee di query campi incrociati.

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 faccio in modo che possa poi usare più VBA per prendere la tabella temporanea per eccellere, utilizzare alcune delle funzionalità di Excel (formule e simili) e quindi restituire i valori alla tabella originale (tblMain). Semplice punto sto ottenendo sgambetto è che dopo l'istruzione SELECT INTO ho bisogno di aggiungere un nuovo marchio colonna aggiuntiva a quella tabella temporanea e non so come fare questo:

sql = "Create Table..."

è come l'unico modo che conosco per fare questo e, naturalmente, questo non funziona per bene con l'approccio di cui sopra perché non riesco a creare una tabella che è già stato creato dopo il fatto, e non riesco a crearlo prima, perché l'approccio istruzione SELECT INTO restituirà un "tavolo esiste già" il messaggio.

Qualsiasi aiuto? grazie ragazzi!

È stato utile?

Soluzione

Mi vengono in mente i seguenti modi per raggiungere questo obiettivo

1. Crea, quindi inserire

Si può fare una CREATE TABLE tblTemp con tutte le colonne necessarie. Naturalmente, si avrà più colonne di TblMain contiene, così il vostro inserto conterrà definizioni delle colonne.

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

2. Inserisci nella, quindi aggiungere la colonna

Si può fare il vostro inserto in, quindi aggiungere colonne utilizzando diversi modi

  1. In VBA, utilizzare l'oggetto TableDef per puntare tblTemp e quindi aggiungere una colonna ad esso
  2. Esegui DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn (OTTOMH)

Altri suggerimenti

C'è sempre più di un modo per scuoiare un gatto. Si potrebbe utilizzare DAO? Questo ha il vantaggio di essere in grado di impostare le varie proprietà del campo appena creato che ottiene quando si crea nuovo campo tramite l'interfaccia utente all'interno di Access. Solo un'idea: -)

Questo il sub l creato e testato, in Access 2007 dovrebbe essere compatibile con qualsiasi versione però.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top