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