Actualizar un registro

joserizos
28 de Octubre del 2003
Estoy trabajando con Access 2000. Os comento los objetos y campos que influyen en el problema.

Tabla SERVICIOS
id_servicio - Autonumérico
cantidad - Numérico
reparto_trabajador - Numérico

Formulario SERVICIOS1 con los siguientes campos
id_servicio
cantidad
precio_pago
Texto18 (representa el total a repartir) -> =[cantidad]*[precio_pago]
Texto20 (representa cuanto cobrará cada trabajador) -> =[Texto18]/[Subformulario Trabajadores_Expo]!texto12

donde Text12 es el campo que cuenta el número de trabajadores asignados al servicio.


La idea es que al insertar un registro en el formulario SERVICIOS1 me inserte en el
campo reparto_trabajador de la tabla SERVICIOS, el valor que obtengo en el campo Texto20.


He abierto el formulario SERVICIOS1 y escrito el siguiente código:

Private Sub Form_AfterUpdate()

Dim dbs As Database, rst As Recordset
' Devuelve una variable que apunta a la base de datos actual.
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("SELECT * FROM Servicios WHERE [id_servicio] = '" & Me![id_servicio] & "'", dbOpenDynaset)
With rst
' Edita el objeto conjunto de registros.
.Edit
'Edita el campo
![reparto_trabajador] = Me![Texto20]
.Update ' Guarda los cambios.
End With
dbs.Close
Form_AfterUpdate_Exit:
Exit Sub
Form_AfterUpdate_Err:
MsgBox Err.Description
Resume Form_AfterUpdate_Exit
End Sub


No me funciona. Abro cualquier registro, le asigno más trabajadores, todos los campos calculados se obtienen
correctamente pero el campo reparto_trabajador de la tabla SERVICIOS no sufre ningún cambio (sigue en blanco).

Otro problema que he detectado ahora es que cuando inserto un nuevo registro como inicialmente un servicio no tiene
ningún cliente asignado, el campo Texto20 me sale erroneo (#¡Div/0!) y al intentar asignar el primer trabajador
me aparece error de compilación "No se ha definido el tipo definido por el usuario" y me subraya en el código
de Visual Basic la declaración de variable "Dim dbs As Database"


He intentado explicarlo lo mejor posible. Si me echais una mano os lo agradecería mucho.
Muchas gracias.

Baltasar
28 de Octubre del 2003
Has probado a comprobar que la sentencia SQL está correcta?
es que he visto que utilizas la forma ME![variable], y la verdad me resulta extraña (aunque funcione) cuando lo normal es poner sólo loquesea=variable

trata de comprobar, mediante una variable de texto, que la sentencia es correcta:

en vez de Set rst = dbs.OpenRecordset("SELECT * FROM Servicios WHERE [id_servicio] = '" & Me![id_servicio] & "'", dbOpenDynaset)

haz esto:

DIM Mconsulta as string

Mcunsulta="SELECT * FROM Servicios WHERE [id_servicio] = '" & Me![id_servicio] & "'"

aquí pon código o utiliza el debugger para ver el contenido de la sentencia

Set rst = dbs.OpenRecordset(Mconsulta, dbOpenDynaset)

Espero haberme explicado correctamente.

joserizos
28 de Octubre del 2003
Al final lo he solucionado asignándole el valor que he obtenido en el campo calculado, al campo de la BD. Esta asignación la he asociado a los botones de desplazamiento del formulario, así como al botón Cerrar. Me imagino que habrá una forma más eficiente pero como funciona lo dejo así. Gracias por todo.