crear campo en una tabla access

03/08/2003 - 11:53 por malaka | Informe spam
Hola, he añadido unos campos a una tabla de una bd access y quiero que la
aplicacion, al arrancar, compruebe si esos campos existen en la tabla y si
no existen, los cree. Tengo que crear unos campos de tipo integer y con un
valor predeterminado, ¿cómo se podria hacer esto?
Gracias.

Preguntas similare

Leer las respuestas

#1 Softjaen
04/08/2003 - 01:32 | Informe spam
"malaka" escribió:

he añadido unos campos a una tabla de una bd access
y quiero que la aplicacion, al arrancar, compruebe si esos
campos existen en la tabla y si no existen, los cree.
Tengo que crear unos campos de tipo integer y con un
valor predeterminado



Hola, Malaka:

En el evento «Form_Load» llama a una función parecida como la que te indico,
la cual utiliza la biblioteca de DAO 3.6:

Private Function ExisteCampo(ByVal FieldName As String) As Boolean

Dim db As Database
Dim tbl As TableDef
Dim fld As DAO.Field

' Establecemos un controlador de errores
On Error GoTo CreateField

' Abrimos la base de datos
Set db = OpenDatabase("C:\Mis documentos\bd1.mdb")

' Referenciamos la tabla
Set tbl = db.TableDefs("Tabla1")

' Referenciamos el campo
Set fld = tbl.Fields("MiCampo")

' El campo existe
ExisteCampo = True

Exit Function

CreateField:
' Si se ha producido un error es porque el campo
' no existe, por tanto, lo creamos
Set fld = tbl.CreateField("MiCampo", dbInteger, 2)

' Establecemos el valor por defecto
fld.DefaultValue = 222

' Añadimos el campo a la colección «Fields»
' de la tabla
tbl.Fields.Append fld

' Continuamos con la ejecución de la función
Resume Next

End Function

Un saludo.

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
#2 malaka
04/08/2003 - 09:27 | Informe spam
Muchas gracias por tu ayuda, solo un pero...
¿como no es posible hacerlo mediante ado? es que no he usado nunca dao y no
se si me va a dar problemas usar ambos a la vez. Muchas gracias


"Softjaen" escribió en el mensaje
news:
Malaka, espera un momento.

Reemplaza "MiCampo" por el parámetro «FieldName» pasado a la función. Con
las prisas se me ha olvidado sustituirlo. :-)

Enrique Martínez
[MS MVP - VB]


Respuesta Responder a este mensaje
#3 Softjaen
04/08/2003 - 12:03 | Informe spam
"malaka" escribió:

¿como no es posible hacerlo mediante ado?
es que no he usado nunca dao y no
se si me va a dar problemas usar ambos a la vez



Las bibliotecas de DAO y ADO pueden convivir perfectamente
en el mismo proyecto y con buena armonía, siempre y cuando
no haya conflictos en identificar objetos comunes a ambas
bibliotecas, como puede ser el caso del objeto «Field».
Pero ello tiene fácil solución, ya que cuando desees
declarar un objeto de éstas características, sólo tienes
que especificar el «ProgId» de la biblioteca:

Dim fld As DAO.Field --> objeto Field de DAO
Dim fld As ADODB.Field --> objeto Field de ADO

Si deseas utilizar la biblioteca de ADO, no te quedará más
remedio que ejecutar una consulta SQL para crear el campo,
en el supuesto de que éste no exista en la tabla. La
función, se quedaría de la siguiente manera:

Private Function ExisteCampo(ByVal FieldName As String) As
Boolean

Dim cnn As ADODB.Connection
Dim fld As ADODB.Field
Dim rst As ADODB.Recordset

' Establecemos un controlador de errores
On Error GoTo CreateField

' Establecemos la conexión con la base de datos
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "C:\Mis documentos\Bd1.mdb"
.Open
End With

' Creamos un objeto Recordset
Set rst = New ADODB.Recordset
With rst
.LockType = adLockReadOnly
.CursorType = adOpenStatic
.Open "Tabla1", cnn, , , adCmdTable
End With

' Referenciamos el campo
Set fld = rst.Fields(FieldName)

' El campo existe
ExisteCampo = True

Exit Function

CreateField:
' Si se ha producido un error es porque el campo
' no existe
' Cerramos el objeto «Recordset»
rst.Close

' Creamos el nuevo campo Numérico tipo «Entero»
cnn.Execute "ALTER TABLE Tabla1 ADD COLUMN " & _
FieldName & " SHORT"

' Continuamos con la ejecución de la función
Resume Next

End Function

Pero te advierto, que con ADO no podrás establecer el
valor por defecto del campo. Para ello deberás de utilizar
la biblioteca de ADOX para indicarle la
propiedad «Default» de un objeto «Column». Te dejo la
dirección de un «tip» donde explico cómo añadir una
columna a una tabla de Access ya existente:

http://es.geocities.com/Softjaen/ti...dox009.htm

Un saludo.

Enrique Martínez
[MS MVP - VB]
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida