Access - error 3027 No se puede actualizar. Base de datos u objeto de solo lectura

   
Vista:
Imágen de perfil de Visor

error 3027 No se puede actualizar. Base de datos u objeto de solo lectura

Publicado por Visor (72 intervenciones) el 22/04/2015 16:10:41
Estimados amigos por favor alguien me puede ayudar. He tomado un codigo creado por Jefferson Jimenez, es muy bueno el codigo pero parece que el lo aplica en acceso 2007 y yo tengo access 2010. El codigo es para activar todas las casillas de verificacion de los registros de un campo, con un solo boton de alternar. el codigo es el siguiente. He intentado pedirla al autor mismo la solucion pero parece que el ya no esta por estas paginas pues no me ha contestado.
Mi tabla es ASISTENCIA y el campo es Chkb1. El codigo es el siguiente:
formulario al activar registro:
1
2
3
4
5
6
7
8
9
Private Sub Form_Current()
If MiRecordset(Consultar, "ASISTENCIA", "1", "1", -1) Then
BtnAlternar.Caption = "DesMarcar"
BtnAlternar.Value = True
Else
BtnAlternar.Caption = "Marcar"
BtnAlternar.Value = False
End If
End Sub

Boton alternar, al hacer click:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub BtnAlternar_Click()
Select Case BtnAlternar
Case -1
MiRecordset Actualizar, "ASISTENCIA", "1", , , -1
MsgBox "Ud selecciono  " & _
MiRecordset(Cuenta, "ASISTENCIA", "1", "1", BtnAlternar) & " Casillas"
BtnAlternar.Caption = "DesMarcar"
Case 0
MiRecordset Actualizar, "ASISTENCIA", "1", , , 0
MsgBox "Ud quito la seleccion de  " & _
MiRecordset(Cuenta, "ASISTENCIA", "1", "1", BtnAlternar) & " Casillas"
BtnAlternar.Caption = "Marcar"
End Select
Me.Refresh
End Sub

Modulo 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Option Compare Database
Enum TipoAccion
Agregar = 1
Consultar = 2
Actualizar = 3
Elimina = 4
Cuenta = 5
End Enum
 
Function MiRecordset(AccioN As TipoAccion, _
                                LaTabla As String, _
                                Optional ElCampo As String, _
                                Optional CampoCriterio As String, _
                                Optional ElCriterio As Variant, _
                                Optional DatoAgrega As Variant) As Variant
On Local Error GoTo VerError
Dim rst As DAO.Recordset
Dim MiBd As Database
If CampoCriterio <> vbNullString Then
 If IsNumeric(ElCriterio) Then
     Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "=" & ElCriterio)
 End If
 If IsDate(ElCriterio) Then
      Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "=#" & ElCriterio & "#")
 End If
 If Not IsDate(ElCriterio) And Not IsNumeric(ElCriterio) Then
      Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "='" & ElCriterio & "'")
 End If
 
ElseIf ElCampo = vbNullString Then
  Set rst = CurrentDb.OpenRecordset("Select * from " & LaTabla)
ElseIf ElCampo <> vbNullString Then
Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla)
Else
Set MiBd = CurrentDb
MiBd.Execute ("Delete * from " & LaTabla)
Exit Function
End If
                 With rst
                      Select Case AccioN
                        Case 1
                        .AddNew
                         rst(ElCampo) = DatoAgrega
                        .Update
                        Case 2
                         While Not .EOF
                         MiRecordset = rst(ElCampo)
                        .MoveNext
                         Wend
                        Case 3
                        While Not .EOF
                        .Edit
                         rst(ElCampo) = DatoAgrega
                        .Update
                        .MoveNext
                        Wend
                        Case 4
                        If ElCampo <> vbNullString Then
                        .Delete
                        .MoveNext
                        End If
                        Case 5
                        If .EOF Then MiRecordset = 0
                        While Not .EOF
                        .MoveNext
                        MiRecordset = .RecordCount
                        Wend
                       End Select
                  .Close
                 End With
                Set Rs = Nothing
          MiRecordset = MiRecordset
       Debug.Print MiRecordset
Exit Function
VerError:
MsgBox "Error #  " & Err.Number & vbCrLf & Err.Description, vbInformation
End Function

Espero respuestas
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder