Access - CONSULTA CARGA DE REGISTROS

 
Vista:
sin imagen de perfil

CONSULTA CARGA DE REGISTROS

Publicado por agus (3 intervenciones) el 07/06/2022 06:38:43
Buenas noches, soy bastante nuevo usando access,perdon si no me explico bien, mi consulta es la siguiente:

Tengo un formulario basico de ingreso de datos con el nombre "Ingresos doble" , en el mismo tengo dos cuadros de textos "texto4" donde ingreso id cliente y "texto7" donde ingreso el numero de paquete. Estos datos se graban en una tabla llamada "ingresos" y a su vez tengo otra tabla previamente cargada con numeros de id cliente con el nombre "base".

Lo que yo quiero hacer por medio de codigos de vba o macros es al momento de cargar el id cliente en el cuadro de "texto4" y darle enter me busque en la tabla llamada "base" si ese id cliente ingresado aparece en esa tabla :
Si el id cliente aparece en la tabla "base" que lo cargue normalmente en la tabla "ingresos"
SI el id cliente no aparece en la tabla "base" que me tire un error con alguna leyenda como ingreso incorrecto.

Las tablas no estan relacionadas.
Estuve mirando como hacerlo con dlookup o con algun macro pero no pude porque no tengo tantos conocimientos.
Muchas gracias de antemano al que me ayude.

Saludos.
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

CONSULTA CARGA DE REGISTROS

Publicado por Anonimo (3316 intervenciones) el 07/06/2022 08:57:59
En lugar de DLookup que devuelve un valor si encuentra un dato que cumpla las condiciones o un NULL, utilizo con preferencia la función de dominio 'DCount' que cuenta los registros que cumplan la condición y devuelve el numero de coincidencias.

Si la tabla esta indexada sin repeticiones (lo normal de un ID), la función DCount devuelve un uno si el dato existe o un cero cuando no.
En síntesis:
= Cero ===> NO/FALSO
<> Cero ===> SI /TRUE

Como utilizarlo (con VBA y los datos aportados)

1
IF DCount("*", "BASE", "ID = " & Me.Texto4 ) = 0 Then MsgBox "No se localizo el ID"

Hay métodos mas sencillos que no precisan macros o VBA (son poco delicados, pero eficaces).

Si se indexa sin repeticiones el campo ID de la tabla BASE, nos garantiza: un ID = un Cliente

Si se relaciona la tabla BASE con la tabla INGRESOS por el campo ID, la tabla Ingresos no permitirá que se guarde un registro cuyo ID no figure (exista) en la tabla BASE.

Es importante que las tablas se diseñen bien y se creen relaciones (Access es una base de datos RELACIONAL).
Utilizar datos sin conexión entre ellos se asemeja mas a una libreta de apuntes que a una base de datos (es mi libre opinión).

Nota:
Un planteamiento alternativo para esa toma de datos iría en la línea de utilizar en el formulario [ingresos doble] y en lugar de [texto4] un Combo-Box con los ID de la tabla [Base].
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
sin imagen de perfil

CONSULTA CARGA DE REGISTROS

Publicado por agus (3 intervenciones) el 08/06/2022 00:30:48
Buenas tardes, muchisimas gracias por la ayuda funciona de maravilla, no puedo utilizar un combox dado que son miles de registros.

El problema que estoy teniendo es que a pesar de relacionar las tablas como me dijiste, luego del cartel de "no se localizo el id" pasa al proximo cuadro de texto y me deja ingresar los datos igualmente, lo que necesito es que no me deje pasar del primer cuadro de texto si se cumple el dcount, nose si me explico bien,lo intente agregando un setfocus pero no logro hacerlo dado mis pocos conocimientos.

Agradeceria tu ayuda nuevamente.
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
sin imagen de perfil

CONSULTA CARGA DE REGISTROS

Publicado por agus (3 intervenciones) el 08/06/2022 08:42:42
ya lo pude solucionar muchas gracias
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

CONSULTA CARGA DE REGISTROS

Publicado por Anonimo (3316 intervenciones) el 08/06/2022 09:20:59
Nunca me pareció adecuado generar código sin tener claro el entorno para el cual se crea y lo que al final se desea.

Lo clásico es que las preguntas sean genéricas (su autor asume que todos conocen lo que el ha creado) .... y no suele ser lo real.

En fin, supongamos que se desea crear un dato pero se puede dar el caso de que ya exista y no se pueda continuar porque habría duplicidad.

La secuencia (intento de representar un diagrama de flujo)

.- Se digita un valor
.- Se verifica si ya existe
----- alternativas en funcion del resultado obtenido ----
-Ya existe--
Se envía un mensaje indicándolo y ... nada mas (lo que se solicito)
-No existe-
Se continua con el proceso de creación
.- Fin

En ese diagrama de flujo se aprecia con claridad que esta incompleto, la validación de su existencia requiere algo mas que un mensaje, requiere una acción, acción que dependerá del resto de la aplicación (que solo su autor conoce).

Pero la respuesta aportada hace lo que tiene que hacer: detecta si ya existe o no existe, solo hay que utilizarla para el mensaje y 'algo mas' ¿abortar el proceso en curso? ....

Si estamos en un evento, estos acostumbran a ser subfunciones y para abortar una subfunción (al igual que una función o un DO ...LOP etc.) basta un Exit [aquí lo que corresponda según el entorno]

Suponiendo una subfunción:
--Antes--

1
IF DCount("*", "BASE", "ID = " & Me.Texto4 ) = 0 Then MsgBox "No se localizo el ID"

Después:

1
IF DCount("*", "BASE", "ID = " & Me.Texto4 ) = 0 Then MsgBox "No se localizo el ID" : Exit Sub

No es la única forma (es mi método), pero es un IF que se puede crear con una o varias líneas y complicarlo con un IF ... Then ... ElseIF ... End IF
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
Imágen de perfil de Eduardo

CONSULTA CARGA DE REGISTROS

Publicado por Eduardo (317 intervenciones) el 07/06/2022 17:42:43
Como le recomiendan utilice un combo box para seleccionar el id cliente y utilice mejor DCOUNT()
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