2010-01-12 10 views
5

¿Qué es el DDL para cambiar el nombre de una columna en MS Access? Algo a lo largo de las líneas de:¿Qué es la columna DDL para cambiar el nombre en MSAccess?

alter table myTable rename col1 to col2

que no funciona para bases de datos en formato MS Access 2000. Estoy usando OLEDB o ADO.NET con un formato MSAccess 2000 db, pero agradecería cualquier sugerencia sobre la sintaxis o una sugerencia sobre cómo lograr esto utilizando ADO.NET de alguna otra manera.

Respuesta

6

Estoy en casa y no puedo probar esto en este momento, pero creo que esto debería funcionar. Este site tiene información al respecto.

ALTER TABLE thetable ALTER COLUMN fieldname fieldtype 

Editar Probé esto un poco y por extraño que parezca, no se puede cambiar el nombre de una columna que puedo encontrar. La sintaxis ALTER COLUMN solo permite cambiar el tipo. Usando SQL, parece ser necesario soltar la columna y luego volver a agregarla. Supongo que los datos podrían guardarse en una tabla temporal.

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

no creo que pueda hacer esto, que no sea añadiendo una nueva columna, la actualización de la columna existente y luego borrar la columna 'viejo'.

Es, sin embargo, bastante simple en VBA:

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

... usando DAO, por supuesto. DAO es la interfaz natural para controlar Jet, y aunque DDL puede ser conveniente, nunca ha sido bien soportado por Jet/ACE. Nunca me ha importado, ya que no modifico mi esquema a través del código (lo hago a mano, ya que es algo que ocurre una vez en una luna azul; tomaría más tiempo para escribirlo y probarlo de lo que llevaría a solo hazlo). –

2

He mirado en esto antes y no hay ninguna instrucción DDL que puede hacer esto para usted. El único método es agregar una nueva columna, copiar los datos y eliminar la columna anterior.

3

En VBA puede hacer esto para cambiar el nombre de una columna:

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

Mi solución, simple pero eficaz:

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

La respuesta proporcionada por Fionnuala utilizando DDL es

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] 

Tenga en cuenta que, obviamente, puede especificar cualquier tipo de columna para su nueva columna, y Text (250) es solo para illustrati en

Cuestiones relacionadas