Sobre vba access 2010, tengo escrito lo siguiente:

If IsNull(CHEQUE) Then      'Si el número de cheque es nulo en el campo o en blaco
   Y = DLookup("[FOLIO]", "FOLIO_CHEQUE", "[FOLIO]") 'Busco en la tabla FOLIO el registro que que le asiganare a este campo CHEQUE
    CHEQUE = "DPJ" & "-" & Y & "/" & elaño 'Le agrego algunas letras que identificaran a este campo                especial
    Y = Y + 1 'Le incremnto la unida para utilizar el siguiente numero consecutivo y que es el valor que tendrá el campo CHEQUE la próxima vez que sea nulo o en blanco.

'End If

Lo que debe seguir a conticuación, es almacenar "Y" con el nuevo numero que se incremento, en la tabla FOLIO, y este es el procedimiento que no se como resolver. ¿Quiere alguien por favor apoyarme con sus conocimiento?

La tabla folio siempre tendrá solamente un registro numérico que irá cambiando cada vez que se ejecute el programa.

1 Respuesta

Respuesta
2

La verdad es que me he perdido, pero lo puedes hacer de muchas formas. Vamos a suponer que la tabla que sea tenga un campo Y. Podrías poner a continuación del código que has puesto

Si en el evento Al activar el registro de el formulario Clientes le pongo de código

Private Sub Form_Current()
If IsNull([Texto35]) Then
Dim y As Byte
y = DLookup("idcliente", "clientes", "idcliente=" & Me.IdCliente & "")
Texto35 = "DPJ" & "-" & y & "/" & Year(Date)
DoCmd.RunSQL "update clientes set y=" & y & " + 1 where idcliente=" & Me.IdCliente & ""
End If
End Sub

Cuando abro el formulario

Y en la tabla, en el campo Y le pone un 2

Te agradezco mucho  Icue Gonzalez. En lo que tu me muestras es funcional.

Lo que necesito es lo iguiente, tratare de explicarte mejor:

Tengo la tabla de CLIENTES en donde voy capturando la información y cuando llego al campo de CHEQUE, condiciono que si es nulo, busque el numero consecutivo en la tabla FOLIO_CHEQUE, al aceptar el campo vacio, después de perder el foco, me muestra el número que toma de la tabla FOLIO_CHEQUE, esta tabla solo contiene este único campo, mismo que debe incrementarse automaticamente cada vez que acepto que el campo es nulo, y debe actualizarse en la tabla FOLIO_CHQUE, la cual siempre tendrá un solo dato, que es el número que siempre se estará incrementando.

Espero haberme explicado y nuevamente muchas gracias por tomarte el tiempo para brinar tu apoyo. Recibe un cordial saludo

Tus razones tendrás para hacerlo así, pero creo que estás trabajando demasiado. De todas formas voy a poner lo que dices. Si tengo la tabla

No sé si tienen que empezar a partir del 100. Lo digo porque si no fuera así incluso podrías usar como folio me.currentrecord pero...

En el formulario Clientes le digo

Private Sub NombreCliente_AfterUpdate()
If IsNull([Cheque]) Then
Cheque = "DPJ" & "-" & DLookup("folio", "folio_chque") & "/" & Year(Date)
DoCmd.RunSQL "update folio_chque set folio =folio+1"
End If
End Sub

Lo he puesto en el evento Después de actualizar, por dos razones. Primero, si te movieras por los registros simplemente para ver no te modifica nada y segundo, el valor del cheque sólo se "rellena" si y solo si pones el nombre de un cliente.

En el formulario

Escribo el nombre del cliente y pulso Enter( le he quitado el punto de tabulación al control Cheque y lo he puesto como bloqueado para que nadie pueda cambiarlo porque le de la gana)

Y me ha dejado la tabla

Me voy al siguiente registro. Escribo otro nombre y pulso Enter

Y la tabla me la deja como

Lista para el siguiente uso. Me voy a otro registro y lo mismo

Y la tabla

Te decía que si el primer cheque tiene que tener el primer folio como 100 podrías poner el código como

Private Sub NombreCliente_AfterUpdate()
If IsNull([Cheque]) Then
Cheque = "DPJ" & "-" & Format(Me.CurrentRecord, "100") & "/" & Year(Date)
End If
End Sub

Y te ahorras la tabla Folio_chque, y una línea de la instrucción

En fin que hay muchas, muchas formas.

Estoy muy agradecido con la aportación que me estas dando y te pido un favor más. Ahora me aparece este mensaje:

Quisiera que al tomar la opción "No", me devolviera el cursor al campo CHEQUE. 

Te explico lo siguiente: Este campo, CHEQUE, no puedo bloquearlo ya que si la opción no es null, el usuario tiene la libertad de poner un número de cheque que si existe, si es null, entonces se asigna el valor que toma de la tabla FOLIO_CHEQUE. Este valor lo tendrá por un tiempo "X", hasta que sepa el usuario cual será el número de cheque que le asignen. Si por error el usuario asigna valor null en vez de un número de cheque que ya existe, entonces que tome la opción negativa de este cuadro de texto y que el cursor vuelva al campo cheque.

Te agaradezco nuevamente la aportación valiosa de tus conocimientos.

La dichosa ventanita de "Va a actualizar...", la puedes eliminar(aunque yo no lo haría) en Archivo-Opciones-Configuración de cliente-Confirmar consultas de acción.

Pero, si haces eso no te avisaría de otras cosas que pueden ser importantes como las consultas de eliminación, etc.

Es preferible poner antes de la instrucción

Docmd.setwarnings false

Para el caso que citas, de que pueden poner como valor de un cheque el que quieran, desbloquearía el control Cheque y la instrucción se la pondría en el evento Al recibir el enfoque, de forma que

Si acepto

Si cancelo el cursor se "queda" en el control Cheque.

El código, en este caso sería

Private Sub Cheque_GotFocus()
DoCmd.SetWarnings False
If IsNull([Cheque]) Then
Dim respuesta As Byte
respuesta = MsgBox("¿Quiere asignarle un valor al Cheque", vbOKCancel + vbQuestion, "¿Que hago, Que hago?")
If respuesta = vbOK Then
Cheque = "DPJ" & "-" & DLookup("folio", "folio_chque") & "/" & Year(Date)
DoCmd.RunSQL "update folio_chque set folio = folio + 1"
ElseIf respuesta = vbCancel Then
Exit Sub
End If
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas