Access - dudas en formularios

 
Vista:
sin imagen de perfil

dudas en formularios

Publicado por juan carlos (5 intervenciones) el 23/05/2018 23:18:47
buena tarde.

tengo un formulario en el que quiero que en el campo "estatus" aparezcan un texto de acuerdo a una condición, si ingreso una fecha limite en el campo "fecha limite" del formulario quiero que se compare con la fecha de hoy y si es menor la fecha limite a la de hoy que aparezca el texto "urgente" en el campo estatus, si en el campo "estado" escribo "finiquitado" que en el campo "estatus" aparezca el texto "atendido", espero se entienda

gracias! espero me puedan orientar
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

dudas en formularios

Publicado por Anonimo (3318 intervenciones) el 24/05/2018 11:10:37
Para ello esta la función IIF, que permite (en base a una condición/comparación) presentar uno u otro resultado.

Especial atención a que se trabaja con TEXTO y ello exige ser absolutamente fiel (ojo a acentos, espacios …… etc)

Las comparaciones requieren dos resultados (si se cumple una, si no se cumple: la otra), se puede sustituir cualquier resultado (o ambos) por nuevas comparaciones y sus dos posibles soluciones (se conoce por encadenamiento y hay limites al numero de ellos).

Un ejemplo (incompleto, nos faltaría una opción alternativa)

Como origen de datos para 'Estatus':

= IIF([estado] = "finiquitado"; "ATENDIDO"; IIF ([fecha limite] < DATE() ; "URGENTE"; "Normal .. o lo que se quiera poner"))

Se podrá apreciar que una de las opciones (la falsa en concreto) se ha sustituido por otra comparación (en itálica) que verifica si la fecha es inferior a la actual
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

dudas en formularios

Publicado por juan carlos (5 intervenciones) el 28/05/2018 19:40:44
gracias por la respuesta, ahora la función la puedo ingresar directamente en la tabla en reglas de validación o en el formulario en el cuadro de texto que corresponde a Estatus?
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

dudas en formularios

Publicado por Anonimo (3318 intervenciones) el 29/05/2018 00:18:16
He vuelto a revisar el mensaje original, y en parte alguna se menciona una tabla ……

Lo que he propuesto es un 'origen de datos' para un cuadro de texto (se asume que independiente) que presentara un mensaje en función de dos (mas bien tres) variables:

.- La fecha actual
.- El valor (se supone que de tipo fecha) de un cuadro de texto al que se denomina 'fecha limite'
.- El valor (se deduce que de tipo texto) de un cuadro de texto al que se denomina 'estado'

En parte alguna se indica que se desea guardar ese DATO CALCULADO que tendrá un valor hoy y quizás otro mañana ….. por lo que solo será valido el calculo mas reciente (cada segundo del día y de todos los días)
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

resuelta mi duda en formulario

Publicado por juan carlos (5 intervenciones) el 12/06/2018 00:33:08
hola, disculpa las molestias, ya resolvi lo de la condicion, ahora mira el codigo que escribi al darle click al boton guardar

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
Private Sub guardar_Click()
 
If IsNull(Me.f_remi) Then
MsgBox "escriba el remitente"
Me.f_remi.SetFocus
 
ElseIf IsNull(f_recturno) Then
MsgBox " Escribe quien recibio el turno"
Me.f_recturno.SetFocus
 
ElseIf IsNull(f_fechrec) Then
MsgBox " escriba la fecha de recibido"
Me.f_fechrec.SetFocus
 
ElseIf IsNull(f_fecdoc) Then
MsgBox " Escribe la fecha de documento"
Me.f_fecdoc.SetFocus
 
ElseIf IsNull(f_folio) Then
MsgBox " Escribe el numero de folio"
Me.f_folio.SetFocus
 
ElseIf IsNull(f_priori) Then
MsgBox "eliga la prioridad del documento"
Me.f_priori.SetFocus
 
ElseIf IsNull(f_numref) Then
MsgBox "escriba el numero de referencia del documento"
Me.f_numref.SetFocus
 
ElseIf IsNull(f_tipoasu) Then
MsgBox "escriba el tipo de asunto"
Me.f_tipoasu.SetFocus
 
ElseIf IsNull(f_dirigido) Then
MsgBox "escriba a quien va dirigido"
Me.f_dirigido.SetFocus
 
ElseIf IsNull(f_asunto) Then
MsgBox "escriba el asunto"
Me.f_asunto.SetFocus
 
ElseIf IsNull(f_feclimite) Then
MsgBox "escriba la fecha limite"
Me.f_feclimite.SetFocus
 
ElseIf IsNull(f_turnado) Then
MsgBox "escriba a quien va turnado"
Me.f_turnado.SetFocus
 
ElseIf IsNull(f_instruc) Then
MsgBox "escriba una instrucción"
Me.f_instruc.SetFocus
 
ElseIf IsNull(f_observac) Then
MsgBox "escriba una observación"
Me.f_observac.SetFocus
 
 
End If
 
End Sub

mi duda es despues de que ya valido que los campos esten llenos me salga el mensaje de que los datos fueron guardados con exito

es decir donde meto este codigo para que me salga ya al final de que todo esta correcto??

1
2
DoCmd.RunCommand acCmdSaveRecord
MsgBox "El registro ha sido guardado", vbInformation, "CORRECTO"


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

resuelta mi duda en formulario

Publicado por juan carlos (5 intervenciones) el 12/06/2018 01:56:28
ah se me olvidaba un detalle tambien valida que el numero de folio no este repetido

1
2
3
4
5
6
7
8
9
10
Private Sub Form_Error(DataErr As Integer, response As Integer)
 
If DataErr = 3022 Then
MsgBox "El numero de folio ya existe", vbCritical, " verfica el numero de folio"
response = acDataErrorContinue
 
 
End If
 
End Sub

entonces ya que valido que no falte ningun campo y que el folio no sea uno que ya esta registrado ahora si me guarde con el mensaje de "El registro ha sido guardado"

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

resuelta mi duda en formulario

Publicado por Anonimo (3318 intervenciones) el 12/06/2018 12:11:16
Optaría por crear una SubFunción que (utilizando ese mismo código u otro similar) verificase la ausencia de datos críticos y de localizar un error, enviase el foco al campo adecuado para su corrección.

En el evento CLICK (que actualmente valida la ausencia de datos) se efectuaría una llamada a la función y de encontrar un error desviaría el flujo del programa

En las validaciones …. crearía una regla mas fuerte, por ejemplo: si en el campo 'remitente' (por poner uno cualquiera) el usuario escribe un simple espacio (o un simple punto) ya no devolvería un 'NULL' pero a efectos prácticos (y en mi opinión) el resultado seria el mismo.

Se podrían utilizar las funciones TRIM (recorta espacios en ambos extremos de la cadena de texto) y LEN (que devuelve la longitud de una cadena de texto).
Es cierto que todas las reglas se pueden saltar (si se exige una longitud mínima de 6 caracteres los rellena con seis puntos y ….) pero para algo simple suele ser suficiente, a continuación un ejemplo de lo anterior:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Verifica()
If Len(Trim(Nz(Me.f_remi, ""))) < 6 Then MsgBox "escriba el remitente": Me.f_remi.SetFocus: Exit Sub
If Len(Trim(Nz(Me.f_recturno, ""))) < 6 Then MsgBox " Escribe quien recibio el turno": Me.f_recturno.SetFocus: Exit Sub
......
If Not IsDate(f_fechrec) Then MsgBox " escriba la fecha de recibido": Me.f_fechrec.SetFocus: Exit Sub
.......
If Nz(Me.f_Folio, 0) = 0 Then MsgBox "Introduzca un numero de folio": Me.Folio.SetFocus: Exit Sub
If DCount("*", "La_Tabla", "Folio =" & Me.f_Folio) > 0 Then MsgBox "El numero de folio ya existe":Me.Folio.SetFocus
End Sub
 
Private Sub guardar_Click()
Verifica
DoCmd.RunCommand acCmdSaveRecord
MsgBox "El registro ha sido guardado", vbInformation, "CORRECTO"
End Sub

En principio debería funcionar correctamente (añadiendo en lugar de los puntos el resto de las validaciones omitidas) , también se podría crear una función que (tras validar) devolviese un resultado y modificar en base a esa respuesta el flujo del programa.

Nota:
¿El campo observaciones es requerido? .... si no lo fuere, se le debería asignar una cadena vacía (en el caso de ser un null) para no guardar datos innecesarios (algo que ocurrirá si se le exige 'tener algo' para no ser un nulo).
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

resuelta mi duda en formulario

Publicado por juan carlos (5 intervenciones) el 13/06/2018 00:46:43
ok muchas gracias por la asesoria, ahora estoy atorado en otro formulario pero de actualizacion

meti este codigo al boton buscar registro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub BUSCAR_Click()
f_remi = DLookup("[Remitente]", "[DGS]", "FolioSistema=" & b_buscar)
f_recturno = DLookup("[RecibioTurno]", "[DGS]", "FolioSistema=" & b_buscar)
f_fecrec = DLookup("[FechaRecibido]", "[DGS]", "FolioSistema=" & b_buscar)
f_fecdoc = DLookup("[FechaDocumento]", "[DGS]", "FolioSistema=" & b_buscar)
f_sist = DLookup("[FolioSistema]", "[DGS]", "FolioSistema=" & b_buscar)
f_priori = DLookup("[PrioridadDocumento]", "[DGS]", "FolioSistema=" & b_buscar)
f_numref = DLookup("[NumeroReferencia]", "[DGS]", "FolioSistema=" & b_buscar)
f_tipoas = DLookup("[TipoAsunto]", "[DGS]", "FolioSistema=" & b_buscar)
f_dirigido = DLookup("[DirigidoA]", "[DGS]", "FolioSistema=" & b_buscar)
f_asunto = DLookup("[Asunto]", "[DGS]", "FolioSistema=" & b_buscar)
f_feclimi = DLookup("[FechaLimite]", "[DGS]", "FolioSistema=" & b_buscar)
f_turnado = DLookup("[TurnadoA]", "[DGS]", "FolioSistema=" & b_buscar)
f_instruc = DLookup("[Instruccion]", "[DGS]", "FolioSistema=" & b_buscar)
f_observ = DLookup("[Observaciones]", "[DGS]", "FolioSistema=" & b_buscar)
f_archfis = DLookup("[ArchivadoFisicamente]", "[DGS]", "FolioSistema=" & b_buscar)
f_resp = DLookup("[Respuesta]", "[DGS]", "FolioSistema=" & b_buscar)
f_digital = DLookup("[ArchivadoDigitalmente]", "[DGS]", "FolioSistema=" & b_buscar)
End Sub


para que me llene todos los cuadros te texto con la informacion de los campos
ahora que tengo que hacer para modificar la informacion de acuerdo al numero de folio

trate de meter este codigo para un campo pero no me funciona

1
2
3
DoCmd.RunSQL "UPDATE DGS set ArchivadoFisicamente='" & f_archfis & "'"
 
WHERE [FolioSistema] = "b_buscar.Value"

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