Consultas sin datos y reemplazarlos

Mi pregunta es tengo una tabla donde le estoy sacando valores por fecha Ejemplo: "Fecha de Hoy" al abrir la base de datos Hoy no voy a tener datos cierto quiero que cuando yo le de ejecutar a la consulta me muestre así sea Cero en vez de nada, por que esa consulta le hago un formulario y el formulario me aparece en blanco ni siquiera los campos en blanco, como puedo hacer

1 respuesta

Respuesta
1

Te pongo un código un poco "en abstracto" para que veas cómo podría hacerse. Tú sólo tienes que adaptarlo y cambiar los nombres que yo he usado por los que usas tú:

...

Dim nReg As Long
nReg = DCount("Id", "nombreConsulta")
If nReg = 0 Then
MsgBox "No hay registros para mostrar", vbInformation, "SIN REGISTROS"
Else
DoCmd.OpenForm "nombreForm"
End If

...

Donde:

- "Id" es un nombre de campo de contenga tu consulta

- "nombreConsulta" es el nombre de tu consulta

- "nombreForm" es el nombre del formulario que debería abrirse si hubiera datos

A ver si hay suerte ;)

Me parece genial ese código me sirve para otras consultas pero lo que busco gran amigo es lo siguiente para mi al abrir ese formulario que depende de una consulta lo que quiero es que me abra así sea que no allá datos que mostrar osea en este caso te voy a ser más explicito lo que saco es la caja tengo un punto de venta pero cuando no hay ventas ni egresos ni base o falta alguno de estos me sale el formulario en blanco lo que quiero es que si me muestre información en este caso cero en ventas cero en egresos cero en base así sea que no halla nada en sus respectivas tablas vale recordarte que esta información la busco a partir de la fecha del día Ojala me halla explicado bien Gracias por tu respuesta me sirvió muchísimo pero para esta en especial no me sirve para otras si es más ya la emplee en muchas consultas que tengo

Es curioso que quieras que aparezcan datos donde no hay datos. Eso digamos que cae más en el ámbito del milagro que de Access. :)

La verdad es no tiene mucho sentido lo que pides, pero de hacerse puede hacerse. La manera más fácil es:

- Te creas una consulta sobre la tabla con la información, y le añades los campos que necesites (los mismos que nutren tu formulario "normal") menos los que dices que deben o pueden salirte a cero.

- En esa consulta añades los campos calculados que requieras con la información que puede estar en blanco. Supongamos que uno de esos campos de llama [egreso]. El campo calculado debe tener una estructura asi:

miEgreso: Iif(isnull([egreso];0;[egreso])

- Haces lo mismo con el resto de campos que puede ser que no tengan valor (haces lo mismo = misma mecánica de creación de campo calculado)

- Guardas esa consulta.

- Copias tu formulario y lo pegas con otro nombre. Supongamos que lo llamas FInfo. Le cambias el origen de datos por el de esa consulta, y también le tendrás que cambiar el origen de los campos que has puesto como campos calculados. Por ejemplo, [egreso] ahora tendrá como origen [miEgreso]

- Adaptas el código que te he pasado en un mensaje anterior de la siguiente manera:

...

Dim nReg As Long
nReg = DCount("*", "nombreConsulta")
If nReg = 0 Then
docmd.openform "FInfo"
Else
DoCmd.OpenForm "nombreForm"
End If

...

Y listo.

Lo que debes tener en cuenta es que esa consulta no te servirá para cambiar valores porque se basa en campos calculados. De hecho, es lógico que no puedas cambiar valores porque la estás obligando a forzar que te muestre unos datos que no existen. Con ello quiero decir que para dar de alta datos deberás funcionar por el sistema "normal" de dar de alta un registro.

Gracias por tu respuesta entiendo es prácticamente lo mismo que hacia lo que hacia yo era crear tablas con un solo registro osea un cero por ejemplo y le creaba una consulta de anexar y le ponía una condición a un formulario que cuando me abriera me la ejecutara lo malo es que me anexaba tantos registros vacíos con esa sola información cada vez que yo abría por eso quería como te dije se que seria un milagro si access lo hiciera por cierto me hizo reír el comienzo de tu respuesta pero de todos modos gracias por tu atención.

Por otra parte quisiera hacer otra consulta tengo un botón con un proceso de evento al hacer click de la siguiente manera 

If Isnull(Me.Cedulacliente) then

Msgbox "Debe escojer un cliente",Vdcritical,"Atención"

me.Cedulacliente.Setfocus

End If

esto lo hago para cada campo que quiero que siempre llene la persona que lo esta utilizando ejemplo: el vendedor, los productos, la forma de pago, el pago en efectivo, osea quiero que siempre estén llenos los campos lo que me esta pasando es que se lo hago a uno todo bien se lo hago a dos todo bien pero de ahi en adelante me salen todos los mensajes de advertencia que hay un campo que debe llenarse y me manda al ultimo que le puse dar enfoque como puedo detener el procedimiento IF de cada sentencia Gracias ojala halla sido claro con mi pregunta.

Un pequeño comentario a tu primer punto. Imagínate que yo tengo un campo clave en el registro (que no sea un autonumérico) que debas rellenar para que el registro sea correcto. Supongamos que ese campo se llame [CampoNecesario].

Pues bien. Si haces una anexión de datos como comentas evidentemente ese registro se te añadirá, pero si te aseguras que ese campo necesario no tenga valor podrías programar en algún evento (lo difícil es decirte cuál sin ver tu BD) la ejecución de una SQL de eliminación de datos, de manera que si escribes un código como este (adaptando los nombres) que te escribo, por ejemplo en el evento "Al cerrar" del formulario (si no entra en conflicto, porque si no te saltará error):

...

Private Sub

Currentdb.execute("DELETE FROM NombreTabla WHERE isnull([CampoNecesario]")

End Sub

...

Si lo vas a probar hazlo en una copia de tu BD, puesto que al eliminar los datos de esta manera, si te equivocas en algo, podrías borrar registros que no deberían borrarse.

De esta manera: 1 Añades los registros con la Anexión - 2.- Consultas la información 3.- Borras los registros anexados vacíos o con valor cero.

Respecto de tu segunda consulta no acabo de entender muy bien cómo lo tienes estructurado, pero si el problema es la salida tras la evaluación de la condición la solución es tan simple como (por ejemplo):

...

If isnull(me.campo) then

msgbox "Tu msg"

me.campo.setfocus

Exit sub

End if

...

Creo que eso es lo que resuelve tu consulta. Si no me tendrás que explicar un poco más claramente la duda.

¡Gracias!  De verdad espero seguir contando con usted ya le mostrare quizás un vídeo de mi punto de venta ya terminado pero antes debo terminarlo así que cualquier problema que se me presente espero que me siga respondiendo con la misma agilidad Gracias nuevamente

Otra cosita estoy muy nuevo en VBA entonces me confundo en cosas simples siempre he trabajado con macros y eso de Exit Sub lo estaba poniendo donde no era Gracias mi amigazazo

Amigazazo que pena molestarlo tanto tengo otra. En un formulario tengo un campo combinado el cual trae información de la tabla cliente ejemplo: empiezo a escribir la CC del cliente "123456789" pero vamos a ver que no existe quiero que me diga, este cliente no existe y me abra el formulario para crear cliente pero aquí viene el pero, quiero que ese numero que puse que no encontró me lo pegue donde va Cédula del cliente en mi formulario Clientes que abrí esto es para no volver a escribir ese numero y así agilizar la creación del cliente... me hago entender?  

Te ruego que plantees esta cuestión en una nueva consulta. Ten en cuenta que tus preguntas y las respuestas que puedan darte sirven para ayudarte a ti como a otras personas que tienen una duda similar. Si lo que preguntas ya no se corresponde con el título de la consulta se pierde ese "efecto ayuda".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas