Access - que me falla por favor

 
Vista:

que me falla por favor

Publicado por salva (56 intervenciones) el 29/03/2008 19:41:19
haber tengo el siguiente codigo, gracias a la buena gente que hay por aqui, que cuando un registro no esta en un cuadro lista me abre el formulario para agregarlo, el problema viene que en este formulario que abre tengo un contador que hace que este codigo me abra en el primer numero de registro, con el consiguiente mensaje que estoy duplicando un registro, haber si alguien me puede ayudar.

Private Sub empleado_NotInList(DatosNuevos As String, Respuesta As Integer)

' Agregar un producto nuevo escribiendo un nombre en el cuadro combinado tucampo.

Dim entempleado As Integer, entNombreTruncado As Integer, cadTítulo As String, entCuadroMensaje As Integer

' Mostrar un cuadro de mensaje preguntado al usuario si desea agregar un nuevo PRODUCTO.
cadTítulo = "El producto no está en la lista"
entCuadroMensaje = vbYesNo + vbQuestion + vbDefaultButton1
entempleado = MsgBox("¿Desea agregar un producto nuevo?", entCuadroMensaje, cadTítulo)

If entempleado = vbYes Then
' Quitar el nombre nuevo del cuadro combinado producto para que el usuario
' pueda volver a consultar el control al volver al formulario.
DoCmd.RunCommand acCmdUndo

' Mostrar cuadro de mensaje y ajustar la longitud del valor introducido
' en el cuadro combinado producto. CAMBIA el 50 por el límite de caracteres que uses tú (está en 3 sitios).

cadTítulo = "Nombre demasiado largo"
entCuadroMensaje = vbOKOnly + vbExclamation
If Len(DatosNuevos) > 50 Then
entNombreTruncado = MsgBox("Los nombres de productos no pueden ser más largos de " _
& "50 caracteres. El nombre que introdujo se truncará.", _
entCuadroMensaje, cadTítulo)
DatosNuevos = Left(DatosNuevos, 50)
End If

' Abrir el formulario Agregar Producto.
DoCmd.OpenForm "tabla1", acNormal, , , acAdd, acDialog


' Continuar sin mostrar el mensaje de error predeterminado.
Respuesta = acDataErrAdded
End If

End Sub


y este es el contador

Private Sub Form_Current()
If Me.RecordsetClone.RecordCount = 0 Then
id = "001"
ElseIf Me.RecordsetClone.RecordCount > 0 And IsNull(id) Then
id = Format(Left(DMax("id", "Tabla2"), 3) + 1, "000")
End If
End Sub
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:que me falla por favor

Publicado por Enrique (1299 intervenciones) el 29/03/2008 21:11:07
Hola Salva:
Es lógico que te pase eso, fíjate que cuando abres el formulario para agregar productos, lo haces en modo "Agregar" (acAdd) por lo que el RecordsetClone del formulario es cero, no tiene ningún registro y como el Contador que tienes en el Procedimiento de evento Form_Current necesita saber los registros que hay para añadir uno más y no encuentra ninguno, intenta crear el primero (001) con el consiguiente error de duplicados, pués el 001 ya existe.

Esto es lo que tienes ahora:

'Abrir el formulario Agregar Producto.
DoCmd.OpenForm "tabla1", acNormal, , , acAdd, acDialog

Y lo debes sustituir por esto otro:

'Abrir el formulario Agregar Producto.
DoCmd.OpenForm "tabla1", acNormal
DoCmd.GoToRecord , , acNewRec

Prueba ahora a ver si funciona.

Saludos
Enrique
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:que me falla por favor

Publicado por salva (56 intervenciones) el 29/03/2008 21:33:16
haber ante todo muchisimas gracias por la rapidez en contestar.

haber lo he probado y antes cuando introducia un registro que no estaba en la lista me preguntaba si lo queria introducir, y me abria el formulario directamente, ahora con lo que me dices que pruebe, primero despues de pregunta si quiero añadir el registro me sale un mensaje que el registro no esta en la lista, doy intro
y me abre el formulario introduzco el registro y cuando vuelvo no se me a actualizado en la lista.

ayuda por favor
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:que me falla por favor

Publicado por Enrique (1299 intervenciones) el 29/03/2008 23:08:02
No se ha actualizado en la Lista, pero supongo que sí en la Tabla ¿cierto ?, pués es ese caso puedes intentar alguna de estas dos cosas:

Primera:
Desde el Formulario para Agregar Productos y justo antes de cerrarlo después de haber introducido los datos, prueba a hacer un Requery a la Lista (supongo que será un Combo porque en las Listas no se pueden introducir datos) con:
Form_NombreFormulario.NombreLista.Requery

o un Refresh al Formulario donde está la Lista con:
Form_NombreFormulario.Refresh

Segunda:
Cambiar el Evento Form_Current para actuar sobre el Recordset de la Tabla en lugar del RecordsetClone del Formulario y así puedes abrir el Formulario como lo tenías con ,,, acAdd, adDialog ¿ así si funcionaba ?

Private Sub Form_Current()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset ("Tabla2")
If rst.RecordCount = 0 Then
id = "001"
ElseIf rst.RecordCount > 0 And IsNull(id) Then
id = Format(Left(DMax("id", "Tabla2"), 3) + 1, "000")
End If
End Sub

Para esta segunda opción, comprueba en la Ventana de Referencias que esté marcada: Microsoft DAO 3.6 Object Library

Saludos
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

muchasimas gracias por favor haber esta

Publicado por salva (56 intervenciones) el 30/03/2008 09:48:40
todo de lujo con la segunda solucion eres un artistas,

dos dudas haber si puedes solucionarlas,

primero cuando se abre el formulario para introducir un registro solo me sale el registro en blanco, como puedo hacer para verlo en forma tabular que vea todo los registros y desde hay introducir el nuevo.

segundo como hago para que me salga en el cuadro combinado los registros ordenados de a-z.

muchas gracias menos mal que hay gente como si no.
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

solucionado gracias a todos

Publicado por salva (56 intervenciones) el 30/03/2008 15:20:28
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