Problema con base de datos

Hola experto:
Estoy haciendo una aplicación para el control de entrada/salida de documentación de mi empresa. Tengo unas dudas:
1º- Como puedo controlar que al empezar el año, 2003 por ejemplo, se ponga la numeración de referencia desde 1 (la referencia de entrada es un autonumérico desde 1 hasta lo que sea)
2º- Podría de alguna forma integrar el año en la referencia, es decir, ¿que fuese del tipo 1/03,232/03,etc..?
3º- Tengo un cuadro combinado para el tipo de documento que entra/sale (carta, telegrama, paquete...)y me gustaría que si meto uno que no está en la tabla desde la cual cojo la información, que me diga que es nuevo y si lo quiero agregar, y que lo haga bien, pues lo he intentado de muchas formas y no me sale.
4º- En un formulario tengo los distintos archivos que componen la empresa, y al añadir alguno nuevo, tengo que introducir el año que corresponde. Le tengo puesto en este campo el formato aaaa para que me salga el año pero cuando miro la tabla vinculada me aparece en todos "1905". ¿Por qué?
Gracias por la respuesta

3 Respuestas

Respuesta
1
1 y 2.No puedes controlar un campo autonumérico(es el sistema el que lo controla), así que tendrás que declarar otro campo del tipo numérico por ejemplo. Y luego tendrás que programar la introducción de los datos (para que los haga automáticamente). Te lo cuento en otro mensaje (voy a intentar darte una programación válida)
3.Para empezar deberás tener seleccionada la propiedad del campo combinado "limitar a la lista" a "sí". Después tendrás que añadir un procedimiento al evento "Al no estar en lista". A ver si te sirve éste:
If MsgBox("EL TEXTO INTRODUCIDO NO ES UN ELEMENTO DE LA LISTA." & Chr(13) + Chr(10) & "¿DESEA INTRODUCIRLO?", vbYesNo) = vbYes Then
DoCmd.OpenForm "TiposDocumento", acNormal, , , acFormAdd, acDialog
Response = acDataErrContinue
TipoDocumento.RowSource = TipoDocumento.RowSource
TipoDocumento.ListIndex = TipoDocumento.ListCount - 1
Else
Response = acDataErrContinue
TipoDocumento.Undo
End If
4. Si lo que introduces en el campo es sólo el año, tal vez deberías cambiar el tipo de dato de fecha a texto. Access interpreta los campos de fecha como una fecha completa y por eso te puede dar problemas.
Para resolver tu primer problema deberás declarar un campo numérico en la tabla (en lugar del autonumérico) y ponerle el formato #\/00 (para que te aparezca 1/03,232/03...). Luego, en el sitio donde introduzcas los datos dejas ese campo bloqueado y sin tabulación (los datos se introducirán automáticamente) y hacer un procedimiento en el evento "Antes de insertar" del formulario. Podría ser como éste (ten en cuenta que los nombres de los campos me los he inventado. Tendrás que poner los tuyos):
Dim reg As Recordset
Set reg = CurrentDb.OpenRecordset("SELECT Max(val(Left([CodigoAnual],Len([CodigoAnual])-2))) AS MaxCod FROM TablaAnual WHERE (((Right([CodigoAnual],2))=Format(Now(),'yy')))", DB_OPEN_DYNASET)
If reg.RecordCount > 0 Then
[CodigoAnual] = (Val(Nz(reg("MaxCod"), 0)) + 1) * 100 + Val(Format(Now(), "yy"))
Else
[CodigoAnual] = 100 + Val(Format(Now(), "yy"))
End If
A ver si con esto puedes llegar a resolverlo. Por cierto, no te he preguntado, pero todo lo que te he dicho funciona con Access 2000. Si tienes algún problema me lo comentas. Puede que funcione con otras versiones, pero también puede ser que haya que variar algunas cosillas.
Respuesta
1
Por partes,
1) Si quieres renumerar lo más fácil es que crees en la tabla 2 campos más:
Refaño entero
Refnum entero
Incluyes en el formulario
Dónde grabes estos dos campos (puedes si quieres dejarlos bloqueados), en el evento antes de actualizar pon el código
----------------------
Dim R as integer
refaño=year(fechaX)
R=Max("Refnum";"tablax";"refaño=" & me.refaño)
if isnull(R)=true then
Refnum=1
else
Refnum=R+1
Endif
------------------
Evidentemente TablaX y FechaX son nombres inventados.
-----------------------------
2) La respuesta es trivial, te defines una consulta con los dos campos creados:
Refaño/Refnum
-----------------------------
3) Yo lo que haría, para evitar errores es lo siguiente,
En el cuadro comb. Marcar 'limitado a la lista' a si, justo al lado del cuadro un botón de comando que abra un formulario donde tengas la tabla de tipos de documento (para más seguridad que lo abra solo para insertar, mira propiedades de los formularios).
4)Esto último puede tener muchas causas, version de access, configuración regional etc. Con lo que me dices no puedo decirte más.
Respuesta
1
Tengo las siguientes respuestas:
1. Yo preferiría tener una tabla en la cual tenga los años con su correlativo para que cuando yo agregue un nuevo año el correlativo empiece con 1 y conforme vayan habiendo movimientos el correlativo vaya incrementando. Para poder realizar esto necesitas utilizar ADO o DAO, para accesar la tabla y extraer la información necesaria. Si te interesa ver un ejemplo de como accesar tablas enviame tu correo a [email protected]
2. Si se puede integrar, pero debe haber un tercer campo en donde a través de un evento se concatene el correlativo y el año por ejemplo si el año es 2003 y el correlativo 5, entonces debe haber un evento que actualice el cambo de la siguiente manera: Campo = Correlativo & "/" & Año
3. Como siempre, todo es posible utilizando eventos, en el evento al no estar en lista del cuadro combinado tienes que indicarle que habrá un formulario donde puedas agregar el nuevo tipo, seguidamente tienes que actualizar el cuadro combinado con la propiedad requery puedes tener un botón en el formulario donde agregas el nuevo tipo y después de haberlo escrito, al darle clic a dicho botón que ejecute el siguiente evento
form_NombreFormulario! Campo.Requery
form_NombreFormulario!Campo= NuevoTipo
4. Esta pregunta me gustaría que la plantearas un poco mejor.
P.D. Aveces es difícil entender los procedimientos si no tienes la base de datos frente, pero si tuvieras alguna duda puedes enviarme tu correo y yo te ampliare las respuestas, me gustaría que me respondieras si te ha servido de ayuda la información que te proporciono.
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas