Access - Contadores/autonumericos

 
Vista:

Contadores/autonumericos

Publicado por Joaquín Pascual (48 intervenciones) el 28/01/2007 21:38:43
Hola a todos, un formulario con un subformulario basados en sus respectivas tablas.

TbMonedas--Cód_Moneda-clave principal- numero entero largo
Tbcomplementos--Cód_Moneda-numero entero largo
Tbcomplementos--Cód_Complemento-clave principal-numero entero largo.
como podeis ver las tablas estan relacionadas por Cód_Moneda.
He intentado varias funciones para el contador incluso el autonumerico de access con el mismo resultado, el formulario Monedas funciona bien pero el subformulario Complementos no, me explico, cunado abro el formulario en el de Monedas no aparece ningun numero hasta que no ingreso un registro pero en el de Complementos ya me aparecen 3 registros en blanco, si ingreso un dato en el principal me crea otro que si esta relacionado con lo que ya tengo 4 registros, si en el principal le doy a nuevo registro entonces en Complementos me vuelve a crear 3 más y si ingreso un dato pues otro más, o sea que por cada registro en el principal me crea 4 en el relacionado 3 en blanco y uno relacionado.
he provado entre otros este código de don Emilio.

Option Explicit
Public Function AutoNumerico(strTabla As String, strCampo As String) As Integer
Dim dbs As Database, _
rst As Recordset, _
strMaximo As String
strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM " & strTabla
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strMaximo)
If IsNull(rst!Mayor) Then
AutoNumerico = 1
Else
AutoNumerico = rst!Mayor + 1
End If
' cierro el recordset
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Function

Private Sub Form_BeforeInsert(Cancel As Integer)
Cód_Moneda = AutoNumerico("Monedas", "Cód_Moneda")
End Sub

tambien estos dos.
Dim varFacturaNumero as integer
varFacturaNumero = Nz(DMax("[Cód_Moneda]", "Monedas")) + 1
Me.Cód_Moneda.DefaultValue = varFacturaNumero
----------------------------------------------
If Me.NewRecord Then
Me.Cód_Moneda = Nz(DMax("Cód_Moneda", "Monedas")) + 1
End If

Todo ello en los dos formularios, y como ya os digo con igual resultado hata con el autonumerico de access.
Que puede ser, donde tengo el fallo. yo quiero que no se genere ningun numero en el subformulario si no le ingreso ningun dato.

Gracias por vuestro tiempo, Joaquín Pascual
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

RE:Contadores/autonumericos

Publicado por Chea (1015 intervenciones) el 28/01/2007 21:48:28
En cuanto asignas un valor a un campo de un formulario, ya estás haciendo que se guarde el registro. Tienes dos alternativas: Asignárselo a la propiedad Text del campo o, más habitual, a la propiedad DefaultValue, ésta última, por supuesto, antes de abrir un nuevo registro.

Saludos
José Bengoechea Ibaceta
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

RE:Contadores/autonumericos

Publicado por Joaquín Pascual (48 intervenciones) el 28/01/2007 22:13:46
Gracias, pero ya lo he intentado en el evento antes de insertar.

Private Sub Form_BeforeInsert(Cancel As Integer)
Dim varFacturaNumero As Integer
varFacturaNumero = Nz(DMax("[Cód_Moneda]", "Monedas")) + 1
Me.Cód_Moneda.DefaultValue = varFacturaNumero
End Sub

Y funciona bien, no solo este código sino todos los que he provado, el que me da problemas es el subformulario que me crea tres registros en blanco cada vez que cambio de registro, y tiene el mismo código. Estoy estancado ya que llevo mucho tiempo trabajando en esta bd y temo perder todo el trabajo realizado, ya que no soy un experto.

Gracias, Joaquín Pascual
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

RE:Contadores/autonumericos

Publicado por Joaquín Pascual (48 intervenciones) el 29/01/2007 15:18:22
Tema solucionado, en el current del subformulario tenia tres instrucciones y por eso me generaba tres registros en blanco, las he quitado y ya funciona de maravilla.

Gracias a todos.
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