Numerar personalizado

Aunque haga más de un año que pregunte sigue interesándome la respuesta, te lo agradecería mucho, ya que todavía no he encontrado la manera.
Hola marciana, la pregunta es la siguiente tengo un form "Monedas" dependiente de la tabla "Monedas" con los campos "CódMoneda" "País"...
País depende de otra tabla Lamada Países con los campos idPaís y País el idpaís es txt de tres letras "ESP" "FRA" etc.y en el form esta como cuadro combinado para eligir el país que quiera, entonces como puedo hacer para que el campo CódMoneda coja el código del país y le añada 0001, 0002 etc. Según el país que hayamos elegido o sea que tome el ultimo numero de ese país y le sume 1.

1 respuesta

Respuesta
1
Me copio tu problema para analizarlo. Pienso que es posible resolverlo. A lo sumo en dos días te respondo. Pido disculpas por el atraso que se produjo.
Ximo
Acabo de leer el texto de tu consulta. Ante todo parece sencillo.
Me quedan dudas, ¿por qué sumar 1? Y en tal caso, ¿sumarlo a qué?
En el formulario Moneda debe haber un control (cuadro de texto, por ejemplo) donde querrás mostrar el nombre de la moneda del país elegido. ¿Voy bien?
Hasta aquí yo haría lo siguiente: en el cuadro combinado donde se elige el país asociaría el evento Después de actualizar con la función Dlookup((1),(2),(3))
(1) Acá el nombre del campo que tiene la moneda
(2) Acá el nombre de la tabla que tiene esos datos
(3) Acá la condición que sería que el código de país = al código que se acaba de elegir.
Ejemplo
Tabla Moneda
CodPais NombreMoneda
USA Dolar
FRA Euro
ARG Peso
Supongamos que tu cuadro combinado se llama CmbPais
Quedaría así
Dlookup("NombreMoneda","Moneda","CodPais = " & CmbPais.column(0)
El numero de columna es porque lo supongo el primero.
Contame como va esto hasta aquí
Hola Marciana:
No es exactamente eso, en la tabla "Monedas" tengo CodMoneda y País, donde País es un combo que se alimenta de la tabla Países con dos campos Idpais, País.
Lo que pretendo es que el CodMoneda se componga de IdPais+0001.
ESP0001
ESP0002
FRA0001
FRA0002
ARG0001
ARG0002
ARG0003
O sea que siempre me de el número más alto de ese país y le sume 1.
Saludos, ximo
Ximo
Entonces Moneda no es una tabla, porque una tabla no puede tener un combo. Pero creo que te entiendo. En realidad lo que querés es algo así como ir contando las veces que se elige país. La pregunta entonces es: cuando comenzás de cero o de uno.
Si es como lo entiendo yo llevaría un registro en una tabla auxiliar o en el mismo formulario en una variable de tipo Array que tenga el código de país y el último número asignado. Cuando se usa el combo país se consulta esa tabla (supongo tabla), se toma el número correspondiente a país y se le suma uno y al mismo tiempo se guarda ese número (ya sumado el uno) en la tabla.
Lo explico de nuevo.
Además del formulario se puede tener una tabla con código de país y el último numero usado. Cuando un usuario elige país se hacen tres cosas
1) Se toma el último número de país usado que corresponde al país que acaba de elegir.
2) Se suma 1 y se concatena al código de país
3) Se actualiza la tabla sumando 1 al número guardado.
Esto se puede hacer también de otro modo:
Que es hacer una búsqueda para encontrar el número más grande usado para el país elegido. Esto depende de si ese dato está accesible o no.
Esto se puede hacer también de otro modo:
Que es hacer una búsqueda para encontrar el número más grande usado para el país elegido. Esto depende de si ese dato está accesible o no.
Es esto justamente, buscar en (Monedas, CodMoneda)el número más alto para el país que acabamos de seleccionar en el formulario (todo esto supongo debería ir en el evento antes de actualizar del combo País) y además con la instrucción Nz por los nulos de la primera vez que elegimos un país.
Creo que lo vas entendiendo.
Saludos, ximo
Faltaría que me digas dónde va quedando ese código FRA001 etc.
¿En una tabla? Esto sería lo ideal, con la función Dlookup() que te comenté antes lo resolverías. En todo caso, a veces se prefiere una solución más ágil (Dlookup() suele ser pesada).
Como siempre primero entender bien el problema.
Espero que me expliques dónde quedaría el dato para buscar después.
Si el dato no queda registrado o si es muy engorroso buscarlo se puede hacer otra cosa.
Si se guarda el dato,
Tabla Monedas (CodMoneda, IdPais) donde CodMoneda es la clave principal de la tabla Monedas.
IdPais toma el valor de la tabla Países a través de un combo donde visualizo el nombre del país pero almaceno el idPais.
Saludos, ximo
¿Qué tal si en la tabla Monedas agregás un campo UltimoNumero que guarde el último número usado? Si es posible para recuperarlo usarías Dlookup().
Esto tiene un inconveniente que es que dicha función no te sirve para actualizar la tabla Monedas. Deberías escribir una función para hacerlo y ya que está le cargaríamos a esa función todo el trabajo: devolver el número que necesitás y actualizar la tabla.
No hay problema se puede añadir el campo UltimoNumero, siempre y cuando aquí se guarde el ultimo de cada país que hayamos usado.
Saludos, ximo
Hago una función y te la mando.
No haría falta modificar la tabla Moneda. Esta es la función. Cópiala y pégala en módulo. La llamás desde el evento Después de actualizar del combo donde eligen país. Como argumento le pasás el valor elegido. La función te devuelve el número siguiente que deberás guardarlo en la tabla Monedas.
Public Function NumeroMoneda(IdPais As String) As String
Dim UltimoNumero As String
Dim Numero As Long
UltimoNumero = Nz(DMax("CodMoneda", "Monedas", "left(CodMoneda,3) = '" & IdPais & "'"), 0)
Numero = Int(Right(UltimoNumero, 4)) + 1
Select Case Numero
Case Is < 10
NumeroMoneda = IdPais & "000" & Numero
Case 10 To 99
NumeroMoneda = IdPais & "00" & Numero
Case 100 To 999
NumeroMoneda = IdPais & "0" & Numero
Case Else
NumeroMoneda = IdPais & Numero
End Select
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas