2010-01-12 10 views
5

Che cos'è il DDL per rinominare una colonna in MS Access? Qualcosa sulla falsariga di:Che cos'è il DDL per rinominare la colonna in MSAccess?

alter table myTable rename col1 to col2

che non funziona per i database in formato MSAccess 2000. Sto usando OLEDB o ADO.NET con un db di formato MSAccess 2000 ma sarei grato di qualsiasi suggerimento sulla sintassi o un suggerimento su come ottenere ciò usando ADO.NET in qualche altro modo.

risposta

6

Sono a casa e non posso testare questo al momento, ma penso che questo dovrebbe funzionare. Questo site ha informazioni a riguardo.

ALTER TABLE thetable ALTER COLUMN fieldname fieldtype 

Edit Ho provato questo un po 'e stranamente, non è possibile rinominare una colonna che posso trovare. La sintassi ALTER COLUMN consente solo la modifica del tipo. Utilizzando SQL, sembra necessario eliminare la colonna e quindi aggiungerla nuovamente. Suppongo che i dati possano essere salvati in una tabella temporanea.

alter table test drop column i; 
alter table test add column j integer; 
4

io non credo che si possa fare questo, oltre aggiungendo una nuova colonna, l'aggiornamento dalla colonna esistente e quindi l'eliminazione della colonna 'vecchio'.

E ', tuttavia, abbastanza semplice in VBA:

Set db = CurrentDb 
Set fld = db.TableDefs("Table1").Fields("Field1") 
fld.Name = "NewName" 
+3

... utilizzando DAO, ovviamente. DAO è l'interfaccia naturale per il controllo di Jet, e mentre DDL può essere conveniente, non è mai stato ben supportato da Jet/ACE. Non mi è mai importato, dal momento che non modifico il mio schema tramite codice (lo faccio a mano, dato che è qualcosa che accade una volta in una luna blu - ci vorrebbe più tempo per copiarlo e testarlo di quanto ci vorrebbe per fallo). –

2

Ho guardato in questa prima e non v'è alcuna dichiarazione DDL che può fare questo per voi. L'unico metodo è aggiungere una nuova colonna, copiare i dati e rimuovere la vecchia colonna.

3

In VBA si può fare questo per rinominare una colonna:

Dim acat As New ADOX.Catalog 
Dim atab As ADOX.Table 
Dim acol As ADOX.Column 
Set acat = New ADOX.Catalog 
acat.ActiveConnection = CurrentProject.Connection 
Set atab = acat.Tables("yourTable") 
For Each acol In atab.Columns 
    If StrComp(acol.Name, "oldName", vbTextCompare) = 0 Then 
     acol.Name = "newName" 
     Exit For 
    End If 
Next acol 
5

La mia soluzione, semplice ma efficace:

Dim tbl as tabledef 
set tbl = currentdb.TableDefs("myTable") 
tbl.fields("OldName").name = "Newname" 
0

La risposta fornita da Fionnuala utilizzando DDL è

ALTER TABLE [your table] ADD COLUMN [your newcolumn] Text(250) 
UPDATE [your table] SET [your table].[newcolumn] = [your table].[old column] 
ALTER TABLE [your table] DROP COLUMN [oldcolumn] 

Si noti che ovviamente è possibile specificare qualsiasi tipo di colonna per la nuova colonna e Testo (250) è solo per illustrati su

Problemi correlati