Option Compare Database
Option Explicit
'***************************************************************
' (C) Francisco García Aguado, Junio de 2002 *
' Utiliza DAO *
'Este módulo es exclusivo para Modificar Tablas del módulo de *
'Servicio con la incorporaciónde nuevos campos. *
'***************************************************************
Function CrearNuevoCampo(Ruta As String, NombreTabla As String, NombreCampo As String, TipoCampo As Integer, NombreIndice As String, TipoIndice As Boolean)
On Error GoTo Err_Comando0_Click
'Esta función añade campos a las tablas ya existentes de base de datos de Servicio
'Recibe como parametros:
'Ruta: Ruta y nombre completo de la MDB de servicio a tratar
'NombreTabla: Tabla a modificar
'NombreCampo: Nombre del campo a añadir
'NombreIndice: Nombre del indice, si el campo está indexado
'TipoIndice: Si está con o sin duplicados.
'TipoCampo: Tipo del campo, según las constantes de Access.
' A Y U D A D E C O N S T A N T E S T I P O / C A M P O === I N T E G E R
'dbBinary=9
'dbBoolean=1
'dbByte =2
'dbChar =18
'dbCurrency=5
'dbDate Date / Time=8
'dbDecimal Decimal=20
'dbDouble Double=7
'dbFloat Float=21
'dbInteger Integer=3
'dbLong Long=4
'dbLongBinary Long Binary (Objeto OLE)=11
'dbMemo Memo=12
'dbNumeric Numeric19
'dbSingle Single=6
'dbText Text=10
'dbTime Time=22
Dim Base As Database
Dim tdfTabla As TableDef
Dim fldCampo As Field
Dim NewIdx As Index
' abro la base de servicio donde tenga los datos
Set Base = OpenDatabase(Ruta)
' abro el objeto Tabla al cual voy añadir campos
Set tdfTabla = Base(NombreTabla)
' evito una doble actualización:
For Each fldCampo In Base.TableDefs(NombreTabla).Fields
If UCase(fldCampo.Name) = UCase(NombreCampo) Then
MsgBox "La tabla de datos " & tdfTabla.Name & " ya está actualizada en el campo: " & UCase(fldCampo.Name), vbInformation + vbOKOnly, "Tabla ya actualizada."
Exit Function
End If
Next
' Creo y agrego el objeto Campo nuevo
With tdfTabla
.Fields.Append .CreateField(NombreCampo, TipoCampo)
End With
' Creo y agrego los indices, si es que se pasan como parametros NO NULOS
' para lo cual, lo compruebo viendo si se ha recibido el parametro como ""
If Len(NombreIndice) <> 0 Then
Set NewIdx = tdfTabla.CreateIndex(NombreIndice)
NewIdx.Unique = TipoIndice
Set fldCampo = NewIdx.CreateField(NombreCampo)
NewIdx.Fields.Append fldCampo
tdfTabla.Indexes.Append NewIdx
End If
Base.Close
Set Base = Nothing ' libero
Exit_Comando0_Click:
Exit Function
Err_Comando0_Click:
' Ojo si hay algún usuario
' conectado a la base de servicio,el propio sistema de detección de errores
' avisa de esta contigencia en esta actualización, con mensaje personalizado.
If Err.Number = 3262 Then
MsgBox "No se puede actualizar la tabla pues está en uso en algún " & Chr(13) & _
"puesto de trabajo. Cierre todas las aplicaciones." _
, vbCritical + vbOKOnly, "A V I S O A C T U A L I Z A C I O N"
Resume Exit_Comando0_Click
Exit Function
End If
MsgBox Err.Description
Resume Exit_Comando0_Click
End Function
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)