Control longitud campo previo a impresión

Hola experto: Quiero imprimir un informe basado en la consulta C_referencias4 desde un formulario. Pero antes de imprimir necesito comprobar que los registros del campo REFERENCIA de dicha consulta tienen todos ellos una longitud de 30 caracteres.
Lo estoy haciendo con un campo adicional que me pone 1 si la longitud de REFERENCIA es distinta a 30 y 0 si es igual a 30. Luego tengo una consulta adicional C_referencias4_suma que me suma ese campo. Si el resultado es distinto a 0, abre un Msgbox advirtiendo del error .
Creo que podría hacerse mejor mediante un recordset, pero no se como hacerlo. ¿Podrías ayudarme? . Gracias.

1 respuesta

Respuesta
1
Te explico el proceso entero asignándolo a un botón de un formulario, por si acaso. Así tendrás una visión "global". Como no sé tu "nivel" te lo explico paso a paso, por si acaso (sin haberlo deseado me ha salido un pareado... je, je...).
Vamos allá:
1.- De ese botón de formulario sacas sus propiedades y te vas a la pestaña Eventos->Al hacer click. Verás que hay un pequeño botón de puntos suspensivos a la derecha. Haces click sobre él y, en la ventana que te sale, le dices que quieres generar código.
2.- Se te abrirá el editor de VB, con dos líneas por defecto (Private Sub... y End Sub). No debes tocarlas. En medio de ellas escribes el siguiente código (te lo pongo comentado para que sepas lo que hace).
...
Private Sub...
'Declaramos las variables
Dim rst as recordset 'Si trabajas con Access 2003 mejor pon: Dim rst as Object
Dim vRef as variant 'Nos cogerá el valor del campo REFERENCIA
Dim longRef as integer 'Nos calculará la longitud del campo REFERENCIA
'Creamos el recordset
Set rst=currentdb.openrecordset("C_Referencias4")
'Esta línea es por si la consulta no contiene ningún registro
If rst.recordcount=0 then
msgbox "La consulta no ha devuelto ningún valor",vbInformation,"SIN VALORES"
Goto Salida 'En vez de salir del proceso a través de un Exit Sub (que sería lo
'habitual), salto a la etiqueta Salida: para poder cerrar el recordset y liberar memoria
End If
'Nos movemos al primer registro
rst.movefirst
'Iniciamos el proceso de recorrido de registros
Do until rst.EOF
'Cogemos el valor del campo REFERENCIA
vRef=rst.Fields("REFERENCIA").value
'Si por casualidad el campo estuviera vacío sale del proceso con un mensaje de aviso
If isnull(vRef) then
msgbox "Existe una referencia sin valor",vbExclamation,"SIN VALOR"
Goto Salida
End If
'Calculamos la longitud del valor en REFERENCIA
longRef=len(vRef)
'Comprobamos que su longitud sea 30. Si no lo es lanza un mensaje de aviso y sale del proceso
If longRef<>30 then
msgbox "Hay una referencia que no tiene 30 caracteres",vbExclamation,"REFERENCIA ERRÓNEA"
Goto Salida
End if
'Si hemos llegado hasta aquí es que todo es correcto. Pasamos a examinar el siguiente registro
rst. MoveNext
Loop
'Si hemos llegado hasta aquí es que todo es correcto. Imprimimos el informe
DoCmd. OpenReport "NombreInforme", acViewNormal 'Si cambias acViewNormal por acViewPreview tendrás una vista previa
Salida:
Rst. Close
Set rst=nothing
End Sub
...
Te he marcado en negrita el valor "NombreInforme" en el código porque tú debes cambiarlo por el nombre del informe en cuestión.
Te he escrito el código de cabeza. Si tienes algún problema me lo comentas e intentamos arreglarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas