MS Access 2003 - VBA pour modifier une table après un « SELECT * INTO tblTemp DE tblMain » déclaration

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

  •  20-09-2019
  •  | 
  •  

Question

J'utilise des fonctions comme suit pour faire des tables temporaires sur des requêtes de tableaux croisés.

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

Je le fais pour que je puisse alors utiliser plus vba pour prendre la table temporaire pour exceller, utiliser certaines fonctionnalités Excel (formules et autres), puis retourner les valeurs à la table d'origine (tblMain). tache simple je reçois trébuché est que, après l'instruction SELECT INTO je dois ajouter une nouvelle colonne supplémentaire à cette table temporaire et je ne sais pas comment faire ceci:

sql = "Create Table..."

est comme la seule façon que je sais comment faire cela et bien sûr cela ne fonctionne pas bien avec l'approche ci-dessus parce que je ne peux pas créer une table qui a déjà été créé après le fait, et je ne peux pas créer avant parce que l'approche de l'instruction SELECT INTO renverra un message « table existe déjà ».

Toute aide? merci les gars!

Était-ce utile?

La solution

Je peux penser à des façons suivantes, vous pouvez y parvenir

1. Créer, puis insérez

Vous pouvez faire un CREATE TABLE tblTemp avec toutes les colonnes dont vous avez besoin. Bien sûr, vous aurez plus de colonnes que contient TblMain, de sorte que votre insert contiendra les définitions des colonnes.

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

2. Insérer dans, puis ajoutez la colonne

Vous pouvez faire votre insertion dans, puis ajouter des colonnes à l'aide de multiples façons

  1. Dans VBA, utilisez l'objet TableDef pour pointer vers tblTemp puis ajouter une colonne à elle
  2. Exécuter DoCmd.RunSQL "ALTER TABLE tblTemp Add Column MyNewColumn (OTTOMH)

Autres conseils

Il y avait toujours plus d'une façon à la peau d'un félin. Vous pouvez utiliser DAO? Ceci a l'avantage de pouvoir définir les différentes propriétés du champ nouvellement créé qui se lors de la création de nouveaux champs via l'interface utilisateur dans Access. Juste une idée: -)

Ce sous l créé et testé, dans Access 2007 devrait être compatible avec une version bien.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top