Access - Problemas con DAO

 
Vista:

Problemas con DAO

Publicado por David (15 intervenciones) el 01/07/2013 19:12:37
Saludos a todos.
Necesito ayuda para terminar un programa que estoy haciendo.

Tengo una tabla, llamada "Caballetes", con los siguientes campos:
Id, índice autonumérico. Cliente, texto. FechaR, texto. E, texto. Cargas, texto
Indicativo, numérico. Ocupacion, numérico

Desde un formulario, llamado "Genera Archivo", basado en otra tabla diferente a esta,
necesito crear una función que busque un elemento en el campo "Cargas" de la tabla
"Caballetes" con un determinado criterio, filtro = "[Cargas]='" & Carga & "'"
donde Carga es un String. Una vez localizado el elemento, debe cambiar el valor del campo
"Ocupacion" por uno nuevo llamado Ocupa, que es un Integer.
He creado un codigo con recordset que es un desastre y aparece el error 3251,
operacion no válida para este objeto.
Trabajo en Access 2003, esta es la función:

Private Sub AddPiezaCaballete(Carga As String, Indicativo As Integer, Ocupa As Integer)
Dim db As Database
Dim rs As Recordset
Dim filtro As String
filtro = ""
Set db = CurrentDb
Set rs = db.OpenRecordset("Caballetes")
filtro = "[Cargas]='" & Carga & "'"
rs.FindFirst (filtro)
rs!Ocupacion = Ocupa
rs.Update
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub

Ayuda, por favor!!!!, 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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Problemas con DAO

Publicado por Neckkito (1157 intervenciones) el 01/07/2013 22:29:06
Hola!

¿Por qué no te creas una SQL que te filtre antes el dato? Así sólo tendrás que trabajar sobre un solo registro (doy por supuesto que la SQL te va a devolver sólo un registro en función de lo que puedo intuir en tu código).

Prueba este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
Private Sub AddPiezaCaballete(Carga As String, Indicativo As Integer, Ocupa As Integer)
 Dim db As Database
 Dim rs As Recordset
 Dim miSql As String
miSql="SELECT Caballetes.Ocupacion FROM Caballetes" _
        & " WHERE Caballetes.Cargas='" & Carga & "'"
 Set db = CurrentDb
 Set rs = db.OpenRecordset(miSql)
If rs.Recordcount=0 then
msgbox "No se ha encontrado ningún registro",vbExclamation, "SIN DATOS"
exit sub
End if
With rs
    .Edit
    .Fields(0).value = Ocupa
    .Update
End With
 rs.Close
 db.Close
 Set rs = Nothing
 Set db = Nothing
 End Sub
...

Como argumentos del procedimiento he dejado "Indicativo", pero, por lo que veo, no lo utilizas dentro el procedimiento. En este caso yo lo eliminaría y dejaría el sub sólo con dos argumentos.

Te he añadido un recordcount por si la consulta no devolviera ningún registro. Así evitas que te salte el error de intentar asignar un valor a un elemento que no existe.

A ver si así te funciona.

Un saludo,


http://neckkito.siliconproject.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problemas con DAO

Publicado por David (15 intervenciones) el 02/07/2013 13:31:36
Gracias a los dos, he utilizado la solucion que me propone Neckkito y me funciona!!!, gracias.
Leeré con más calma la información que me da deneg, gracias tambien por tu respuesta.
Que diferencia hay entre esta expresion
rs!Ocupacion = Ocupacion
y esta otra
rs.Fields(0).value = Ocupa
son iguales, funcionan en todos los casos??? entendiendo que el campo 0 es Ocupacion.
Y estas:
Set rs = db.OpenRecordset("Select Carga, Indicativo, Ocupacion from Caballetes where Carga='" & Carga & "'")
con esta otra:
miSql="SELECT Caballetes.Ocupacion FROM Caballetes" _
& " WHERE Caballetes.Cargas='" & Carga & "'"
Set rs = db.OpenRecordset(miSql)
Saludos y gracias otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar