AfterUpdate

Espero que puedas ayudarme y perdón por dirigirtelo personalmente, lo que pasa es que puse un mensaje en el tablón y nadie lo ha contestado.
Mira mi problema si es que tienes un tiempecin para ayudarme por favor, es que soy nuevo en access y tengo accesx 2007, lo que necesito es que cuando actualice un campo con el combobox, ejemplo cambiar el estatus ha pagado, obtenga de otra base de datos un os puntos (algo así como su cuota para este reitro en especifico), pero lo debe calcular en base a lo que haya vendido que es otro combobox
Ya estuve investigando y se que se puede hacer con el after update pero perdón no le encuentro ni pies ni cabeza al comando.
Respuesta
1
-
Bueno, antes que nada, si vas a trabajar con registros de una tabla que se encuentra en otra base de datos, lo más cómodo será que la vincules a la base de datos actual (en la que estás trabajando), de la siguiente manera:
-
Archivo - Obtener datos externos - Vincular tablas - Seleccionás la base de datos donde se encuentra la tabla en cuestión - Seleccionás la tabla y LISTO! (Ahora se podrá trabajar con esa tabla como si fuera propia de la base de datos actual)
-
Ahora lo que tendrías que hacer es ir al formulario y crear un cuadro de texto (si no lo hay) donde irá a parar el DATO obtenido de la tabla para que luego trabajes con él fácilmente y realices cualquier cálculo que quieras.
-
Entonces vamos a llevar el DATO al cuadro de texto y para eso la forma más fácil es con macro. Vamos a crear una, vas a Macro - Nuevo:
-
Usá la acción EstablecerValor, en Elemento ponés:
-
 Form![NombreElemento] (Cuadro de texto o cualquier otro elemento al que quieras asignarle un valor)
-
Expresión: vas a usar la función Dbúsq para buscar los valores en la tabla según el criterio deseado, por ej:
-
Dbúsq("[NombreCampo]";"NombreTabla";"Criterio")
-
NombreCampo: nombre del campo de la tabla donde se encuentra el valor que se va a asignar al elemento.
-
NombreTabla: nombre de la tabla en la que se va a buscar.
-
Criterio: debe haber un valor (un campo en común) que relacione el registro que tenés en el formulario con el que tenés en la tabla de la otra base de datos. Supongamos que ese campo en la tabla se llama ID y el cuadro de texto, combox, listbox, etc del formulario donde se encuentra este dato se llama TxtId, en ese caso tendrías que escribir el criterio como "ID = Form!TxtId"
Un ejemplo sería:
-
=Dbúsq("[Nombre]";"Personas";"ID = Form![TxtId]")
-
Ojo, dependiendo de la versión de Access que tengas se usan (;) o (,)
-
Una vez creada la macro, la guardás dándole un nombre...
-
Luego te vas al evento After Update del ComBox en cuestión y escribís el nombre de la macro para que se ejecute cuando se actualice el ComBox.
-
Bueno, espero que se entienda y te sea útil la explicación...
-
Gracias por tu tiempo y por responder azarleonardo.
Malas nuevas para mi claro, no me funciona y lo que pasa es que creo que te explique mal, dejame intentarlo de nuevo por favor. Tengo dos tablas que deben jugar para este problema que tengo.
Tabla: Hoja2
Campos:, producto, estatus, puntos
Tabla: puntosbd
campos: productobd, pxcbd
Si estatus cambia ha liquidado (ya es un combobox) con producto debo buscar en la tabla puntosbd con producto=productobd, obtener el valor de pxcbd y dejarlo en el campo puntos.
Haber si me logre hacer entender, lo cual no me pasa con mucha frecuencia últimamente.
Recuerda por favor que es mi primera incursión al access siento que he avanzado mucho pero obvio mientras más conozco más se que no se nada.
Gracias nuevamente ya me extedi demasiado, Saludos
A ver... Si estoy entendiendo bien...
En el evento AfterUpdate del combox poné lo siguiente:
Me.puntos =DLookup("[pxcbd]", "puntosbd", "[productobd] =" & Forms![NombreDeTuFormulario]!producto)
Y comentame como te fue...
Hola
Gracias de nuevo
Ya hice la prueba y no hace nada, el código que puse fue como medijiste
Private Sub Status_AfterUpdate()
Me.Puntos = DLookup("[pxcbd]", "puntosbd", "[productobd] =" & Forms![conbase]!Producto)
End Sub
Gracias si puedes seguir ayudándome te lo agradezco
De nuvo!
Si no es molestia enviame la BD (formato de archivo 2000 o 2002, MDB) al correo así me fijo bien, a ver que solución le encuentro...
[email protected]
Debes tenerlo en tu mail.
Saludos
Ya la bajé, en este momento estoy tapado de trabajo, pero en cuanto me desocupe un poco la veo.
Para traer el dato de la tabla lo hice así:
Me.Puntos = DLookup("[pxcbd]", "puntosbd", "[productobd] = Form![Producto]")
Y funciona bien, lo que no se es que cálculo que tenés que hacer con ese dato...
Hola.
Solamente que ponga lo que trae el campo pxcbd en el campo puntos de la tabla hoja2 y que se guarde en esta tabla cuando se cierre el formulario.
Gracias
Ok, si es sólo eso...
Poné en el evento AfterApdat del ComBox Status:
Me.Puntos = DLookup("[pxcbd]", "puntosbd", "[productobd] = Form![Producto]")
Tiene que funciona... Pruébalo y contame.
Hola.
Perdoname por favor pero no me jala esta cosa, no te desesperes por favor, ¿qué puedo hacer alguna sugerencia?
Decime cual es el problema, ¿te da un error? ¿No establece ningún valor? ¿Establece un valor incorrecto?... A mi me funcionó...
Pongo el código como ve dijiste, guardo, abro el formulario y cuando hago el cambio en el estatus no pone nada en el campo puntos, pero no me manda ningún error
La función busca en la tabla "puntosbd" el valor del campo "pxcbd" del registro que cumpla la condición de que el valor del campo "productobd" sea igual al valor del cuadro combinado "producto" que tenés en el formulario (creo que es el primero). Pensé que era eso lo que me estabas pidiendo. Pero al revisar el cuadro combinado vi que el origen de fila busca los datos en otra tabla "productos" cuyos valores no se corresponden con los del campo "productobd" de la tabla "puntosbd", es por eso que no te entrega el valor en el campo "puntos" del formulario. ¿Se entiende?... Bueno, si me estás entendiendo, por favor paciencia y explicame más detalladamente como querés que funcione.
Para comprobar y entender el funcionamiento del código escribís en el cuadro combinado "producto" un valor que corresponda al campo "productobd" de la tabla "puntosbd" por ejemplo "Afore Afiliación" y luego cambiás el estatus para que se ejecute el código...
Bueno...
Hola.
De verdad eres un experto, ya hace lo que quiero que haga gracias a ti.
No te califico mejor porque no hay.
De verdad gracias por tu esfuerzo, comprensión y tiempo que me dedicaste, te agradezco arto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas