OBJETIVO: El objetivo de este foro es el de divulgar MS Access y ayudar a los usuarios en la solución de dudas y consultas, siempre indicando el camino, para que el usuario aprenda, estudie y consiga caminar con las propias piernas. No espero nada a cambio (quizás tan sólo un gracias, ya que nadie me paga por hacer esto: gastar conexión, interpretar dudas, ubicar respuestas, en sintesis perder tiempo y/o dinero, sólo por la voluntad de ayudar) e intento siempre motivar al usuario a aprender, dando sólo guías o pistas y en algunos casos algún código completo. No soy de aquellos que gusta dar el código desarrollado y comentado, por el simple hecho de que eso lleva tiempo (no me sobra, ya que trabajo) y mi deseo es incentivarte a aprender.
El hecho que exista este site gratuíto y que lo mantenga en forma diaria, no me obliga a contestar la dudas de los usuarios, y menos aún la de tener que dedicar mi tiempo a desarrollar códigos completos por la falta de delizadeza o exceso de abuso de algunos. Cómo mencioné anteriormente el objetivo es mostrarte el camino...
"No soy favorable de dar pescado (leáse desarrollar código), sino de enseñar a pescar (leáse mostrar cómo desarrollar el código) , ya que así, sí tienes hambre sabrás pescar (leáse voluntad de aprender y crear tus propias aplicaciones) "
Si no te gusta nuestra postura, eres libre de irte y no volver, ya que nada perderás (no has pagado nada). En cambio si lo que deseas es aprender y valorar el esfuerzo y tiempo de otros, estás convidado de por vida por acá!!!
Hola a todos y gracias x ayudarme... Mi problema es el siguiente:
Tengo una tabla CODIGOS_POSTALES que almacena los CODIGOS_POSTALES y las LOCALIDADES.
Tengo un formulario donde se pide al usuario k introduzca el CP, LOCALIDAD, etc...
El CP del formulario es un cuadro combinado k muestra como posibles entradas la tabla CODIGOS_POSTALES.
Quiero evitar k el usuario introduzca un CP k no se encuentre en la tabla; y si introduce un CP valido k se rellene automaticamente el campo LOCALIDAD.
El codigo k he creado es el siguiente:
Private Sub CODIGO_POSTAL_AfterUpdate()
If IsNull(Me![CODIGO_POSTAL]) Then
Exit Sub
End If
Dim Comando As ADODB.Command
Dim Record As ADODB.Recordset
Set Comando = New ADODB.Command
With Comando
.ActiveConnection = CurrentProject.Connection
.CommandText = "SELECT LOCALIDAD FROM CODIGOS_POSTALES WHERE CODIGO_POSTAL = " & Me![CODIGO_POSTAL]
.CommandType = adCmdText
End With
Set Record = Comando.Execute
'Comprobacion de que se ha encontrado un registro.
If ((Record.BOF) And (Record.EOF)) Then 'No ha encontrado ningun registro
Dim Cadena As String
Cadena = "El Código Postal" + Str(Me![CODIGO_POSTAL]) + " no existe."
MsgBox Cadena, 0, "Error Código Postal"
Me![CODIGO_POSTAL].SetFocus
Me![CODIGO_POSTAL].SelStart = 0
Me![CODIGO_POSTAL].SelLength = Len(Str(Me![CODIGO_POSTAL]))
Else
Me![LOCALIDAD] = Record.Fields(0)
End If
End Sub
El problema es k cuando el usuario introduce un CP no valido, me saca el mensaje avisandome dl error pero luego no se me keda en el campo CODIGO_POSTAL y el contenido de este no se keda seleccionado.
Tu cuadro combinado, limitado a la lista, de esa manera no se pordrá introducir un código que no exista en el origen y por ende también podrás utilizar le evento NoInList. Con eso no tiene pronblemas de foco ya que siempre queda ahí
Saludos y Suerte
PD: No se puede intoducir imagen + texto. debes crear una imagen que tenga el texto y meterlo como imagen, salvo que encuentres algún Activex por ahí
Gracias... nunca te acostaras sin saber una cosa mas.. Pero ahora viene otra cuestion...
Creo la funcion k gestiona el evento NotInList:
Private Sub CODIGO_POSTAL_NotInList(NewData As String, Response As Integer)
MsgBox "El Código Postal introducido no existe.", 48, "Error Código Postal"
End Sub
Cuando pulso Aceptar me sale otro mensaje de Access informandome de k no he introducido un elemento de la lista: ¿Puedo kitar este ultimo mensaje? o ¿puedo modificarlo?
Gracias nuevamente... cada vez me gusta mas esto... aunke tenga k kitar horas d sueño...
Te mando un código muy práctico para añadir un nuevo elemento a la lista de un cuadro combinado. Con unas sencillas modificaciones puedes hacer que te salga un cuadro de mensaje y que te vuelva al cuadro combinado para que elijas el correcto. En este ejemplo te deja elegir entre añadir el elemento nuevo (en este caso el Código Postal) o el no añadirlo (que sería tu caso, ya que están todos los códigos introducidos)
Consiste en añadir un nuevo elemento a una lista de cuadro combinado en el que su propiedad "Limitar a la lista" sea Sí.
El código 1º se debe colocar en el evento "Al no estar en la lista" del Cuadro Combinado referido
El código 2º se debe colocar al cargar el formulario que va a recibir el nombre nuevo escrito
CÓDIGO 1º
Private Sub CustomerID_NotInList(NewData As String, Response As Integer)
Dim intReply As Integer
'-- la variable se asigna a la respuesta dada en el MsgBox
intReply = MsgBox("El cliente '" & NewData & _
"' no está en la lista. Deseas añadirlo?", vbYesNo)
If intReply = vbYes Then '-- Si la respuesta ha sido Sí
'-- Abrir el formulario de clientes en el modo de introducción
'-- de datos, pasando los nuevos datos en el parámetro
'-- OpenArgs (NewData)
DoCmd.OpenForm "NombreFormulario", , , , acFormAdd, acDialog, NewData
'-- Registro añadido, por lo que se cancela el
'-- procesamiento predeterminado de Access
Response = acDataErrAdded
Else '-- Si la respuesta ha sido No
MsgBox "Por favor, seleccione un elemento de la lista."
'-- Tenemos que tratar el error, por lo que informamos
'-- a Access de que no debe presentar su error
'-- predeterminado
Response = acDataErrContinue
End If
End Sub
CÓDIGO 2º
Private Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then
Me.NombreCampo.Value = Me.OpenArgs
End If
End Sub
"Los mayores best sellers son los Manuales y Archivos de Ayuda, pero ellos son como los libros de Stephen Hawking: muchos compran, pocos leen y muchos menos entienden alguna cosa."