Como tomar el valor de un textbox (cuadro de texto) en un informe

Estoy haciendo una BD en Access la cual lleva las notas de los estudiantes. En un formulario los profesores cargan las notas. Ahora para imprimir las notas del estudiante las estoy haciendo en un informe. El informe tiene los nombres de las materias y el valor de las notas de las materias, son 12 materias las cuales estan divididas en 3 periodos o lapsos diferentes, estas materias me generan un promedio. Lo que estoy haciendo es que oculto los periodos 2 y 3 y dejo visible solo el periodo 1. Necesto es que si el profesor cargo las notas del 2do periodo o de 1 materia del 2do periodo, se visualice el periodo 2 en el informe pero el 3ero debe de seguir no visible, en caso de que el profesor ingrese las notas del 3er periodo o 1 nota de una materia del 3er periodo se visualicen en el informe todos los periodos es decir todas las materias con sus notas

3 Respuestas

Respuesta
1

Este es el código.

Private Sub Report_Open(Cancel As Integer)
Dim CONS As Recordset, CONS2 As Recordset, CONS3 As Recordset, CONS4 As Recordset, CONS5 As Recordset
Dim VALOR As String, VALOR2 As String, VALOR3 As String, VALOR4 As String, VALOR5 As String
Dim T, T1, T2, T3, T4, T5, T6, T7 As Recordset
Dim N, N1, N2, N3, N4, N5, N6, N7, S, M, M1 As String

'Con esto se que valores tienen las materias O LOS CAMPOS DENTRO DE LA TABLA MATERIAS
Set T = CurrentDb.OpenRecordset("SELECT materias.[100-151 COMUNICACIÓN  Y  LENGUAJE] FROM materias;")
N = T![100-151 COMUNICACIÓN  Y  LENGUAJE]
Set T1 = CurrentDb.OpenRecordset("SELECT materias.[100-152 METODOLOGIA DE LA INVESTIGACIÓN] FROM materias;")
N1 = T1![100-152 METODOLOGIA DE LA INVESTIGACIÓN]
Set T2 = CurrentDb.OpenRecordset("SELECT materias.[100-153 INGLES I] FROM materias;")
N2 = T2![100-153 INGLES I]
Set T3 = CurrentDb.OpenRecordset("SELECT materias.[100-154 ECONOMIA] FROM materias;")
N3 = T3![100-154 ECONOMIA]
Set T4 = CurrentDb.OpenRecordset("SELECT materias.[100-155 DEPORTE] FROM materias;")
N4 = T4![100-155 DEPORTE]
Set T5 = CurrentDb.OpenRecordset("SELECT materias.[110-151 TEORIA GENERAL DE SEGUROS] FROM materias;")
N5 = T5![110-151 TEORIA GENERAL DE SEGUROS]
Set T6 = CurrentDb.OpenRecordset("SELECT materias.[110-152 INTRODUCCION A LA COMPUTACION] FROM materias;")
N6 = T6![110-152 INTRODUCCION A LA COMPUTACION]
Set T7 = CurrentDb.OpenRecordset("SELECT materias.[100-158 MATEMATICAS] FROM materias;")
N7 = T7![100-158 MATEMATICAS]
'aqui esta el problema que quiero resolver

En caso de que el valor de la materia sea menor a 9.5 Ees decir que cualquier a de las N, N1, N2, N3, N4, N5, N6, N7 es menor a 9.5

Entonces el campo [TOTAL_DE_MATERIAS_CURSADAS]que se encuentra en una tabla llamada materias, su valor sea igual a 7 en caso de que no aprobó 1 materia,

si le quedaron dos materias es decir N < 9.5 y N1 < 9.5 entonces [TOTAL_DE_MATERIAS_CURSADAS] = 6

si le quedaron 3 materias entoncs [TOTAL_DE_MATERIAS_CURSADAS]=5

Como hago para que me guarde o me coloque el valor dentro de [TOTAL_DE_MATERIAS_CURSADAS]

Porque al hacer esto

if N < 9.5 then

me.[TOTAL_DE_MATERIAS_CURSADAS]=6 <------esto me da error

end if

De pronto es fácil y me estoy matando con algo fácil pero el problema es que no se como hacerlo

Esto lo estoy haciendo dentro del formulario

Lo estoy haciendo dentro de un informe.

Respuesta
1

Solo cambiaría en la respuesta de Icue al abrir el reporte:

Nota: nota>0 en lugar de is not null, toda vez que tienes el campo de nota con valor por defecto 0, en este caso no hay valor null y por esto se muestra el nombre de la materia.

es que lo que quiero es que el cuadro de texto me muestre el numero "6"

lo tengo bajo un if porque tiene cumplir varias condiciones.

porque puede ser que me muestre en numero 6 como puede ser que me muestre 5 o otro valor dependiendo del cumpliminiento de otras condiciones.

pero lo que quiero es que me muestre el cuadro de texto un valor pero mediante programacion

Estoy de acuerdo con Icue si no suministras la base de datos no te puede colaborar, en mi caso haría lo mismo, no hay claridad en tu solicitud.

Vamos haber si te puedo colaborar, debes contar las materias que su valor sea menor que 9.5, valor que almacenas en N, N1, -------, N7, es decir algo como:

Dim intContar AS Integer

intContar=0

IF N<9.5 THEN

 intContar=1

END IF

IF N1<9.5 THEN

  intContar=inContar+1

EN IF

IF N2<9.5 THEN

  intContar=intContar+1

ENDIF

etc hasta N7

Ahora tomamos el contador intContar y evaluamos cuanto materias son inferiores a 9.5 y actualizamos la tabla:

SELECT CASE intContar

 CASE=1 

  Docmd.RunSQL "SET materias SET TOTAL_DE_MATERIAS_CURSADAS=7"

CASE 2

  Docmd.RunSQL "SET materias SET TOTAL_DE_MATERIAS_CURSADAS=6"

CASE 3

  Docmd.RunSQL "SET materias SET TOTAL_DE_MATERIAS_CURSADAS=5"

END SELECT

Me da error me dice que debo colocar una expresion insert into o una delete o update entre otras la coloque pero me da error aqui

  Docmd.RunSQL "SET materias SET TOTAL_DE_MATERIAS_CURSADAS=6"

EL ERROR dice instruccion sql no valida se espera DELETE INSERT PROCEDURE INSERT INTO entre otras

la coloque asi

  Docmd.RunSQL "INSERT INTO SET materias SET TOTAL_DE_MATERIAS_CURSADAS=6"

en vista que me lo pide pero me sigue dando el error Ahora de sintaxis

Disculpa que pena es que en lugar del primer SET va UPDATE, algo como:

Docmd.RunSQL "UPDATE  materias SET  Total_DE_MATERIAS_CURSADAS=6"

Hace falta indicar a que alumno se le va aplicar la actualización en este caso, seria algo como:

Docmd.RunSQL "UPDATE  materias SET  Total_DE_MATERIAS_CURSADAS=6 WHERE idalumno=" T.idalumno

Nota: En este caso debes agregar en tus recordsets (T,..., T7) el campo del alumno o algo similiar sobre el registro que se va actualizar. Ejemplo:

Set T = CurrentDb.OpenRecordset("SELECT materias.[100-151 COMUNICACICION Y LENGUAJE], materias.idalumno FROM materias;").

Idalumno lo reemplazas por un campo clave para la actualización en cada uno de los recordset T,..., T7

Falta concatenar con &, quedaría:

Docmd.RunSQL "UPDATE  materias SET  Total_DE_MATERIAS_CURSADAS=6 WHERE idalumno=" & T.idalumno.

Dudo que realmente te funcione mientras no conozca la estructura de tus tablas y el formulario que usas.

Estoy utilizando esta expresion que me diste para mostar los reportes o los informes que sean igual a la carrera administracion la coloque en un boton:

DoCmd.OpenReport "Notas", acPreview, , "[Carrera] = ""ADMINISTRACIÓN""

pero en el informe al abrir solo me muestra el primer  registro que tiene administracion.

necesito que me muestre todos los registros donde la carrera sea administracion.

Tomando en cuenta que tengo varias carreras.

Si tienes una tabla de las carreras te aconsejo utilizar el id de la carrera, toda vez, que posiblemente no todos los nombres sean iguales, por ejemplo administración, administacion, etc.

Si utilizas el id seria algo como:

DoCmd.OpenReport "Notas", acPreview, , "id=1"

Asumo que tienes una tabla de carreras como:

Id carrera

1 administración

2 CONTADURÍA

3 INGENIERÍA

4 ..

Respuesta

Puedes hacerlo de muchas formas diferentes.

1º Vamos a suponer que el informe lo quieres ver desde un formulario. En algún evento, por ejemplo, al hacer clic de un botón, puedes poner

Docmd.openreport"nombre del informe",acpreview,,"periodo=[escribe un periodo]"

Así, cuando pulses el botón, te preguntará lo de Escribe...

En caso de que en el formulario tengas algún control, tipo cuadro de texto, tipo cuadro combinado podrías ponerlo como

Docmd.openreport"nombre del informe",acpreview,,"periodo='" & me.nombredelcontrol & "'"

2º Otra forma, es que en el evento Al cargar del informe pongas

report.recordsource="select * from nombredelatabla where periodo=[Escribe un periodo]"

Hay más, como bien dices de ponerle lo de que oculte los períodos, pero me parecen más cómodos estos.

Creo que no me explique bien. Las notas se cargan en un formulario. Y por supuesto al darle a un botón que se llama ver notas se abre un informe que contiene las notas ya cargadas en el formulario. Lo que necesito es que en el informe las notas y los nombres de las notas solo se muestren si tienen un valor, en caso que no tengan ningún valor no se muestren.

Castellano 20pts

Matemática 20 pts

Pero ingles, geometría no tienen notas por lo cual no debería ser visible en el formulario para que al imprimir no salga una materia sin nota.

Si más adelante se carga la nota de ingles entonces en el formulario ahora debería de ser visible la materia ingles con su puntuación para que al imprimir el formulario salga la materia con la nota.

corrigo esta parte.

Pero ingles, geometría no tienen notas por lo cual no debería ser visible en el INFORME para que al imprimir no salga una materia sin nota.

Si más adelante se carga la nota de ingles, entonces en el INFORME debería de ser visible la materia ingles con su puntuación para que al imprimir el INFORME salga la materia con la nota.

Puedes encadenar hasta 99 condiciones AND o OR. Por ejemplo,

Docmd.openreport"nombre del informe",acpreview,,"periodo=[escriba un periodo] and nota is not null and Profesor="Joaquin" or Profesor="Paco" and Fechaexamen between...."

En el caso tuyo la instrucción terminaría en ... Nota is not null"

Así, aquellas asignaturas en que la nota sea nula ya no aparecen.

Es que esa información se mete en el formulario las notas el periodo todo eso se mete en el formulario. El informe es solo para mostrar las notas que fueron cargadas junto con el periodo y otras informaciones, es decir el informe es lo que voy a imprimir para entregar impreso. El asunto es que las notas cargadas son las únicas que quiero que se vean o que salgan impresas.

en el formulario coloque todas las materias, y las oculte ejemplo "me.estadistica.visible=false" "me.matematica.visible=false" lo que quiero es que cuando estadistica le carguen una nota (notas que se cargn en el formulario no en el informe) mayor a cero sea visible en el informe, pero matematica como no le cargaron la materia seguira estando oculta.

es decir, que si estadistica le colocan en el formulario 20 pts la condicion del informe "me.estadistica=false" cambiara a "me.estadistica=true" para que de esta manera sea visible porque ya le colocaron una nota.

Si tengo una tabla, en este caso uso la de Clientes de la base Neptuno. Verás que hay dos compañías que no tiene país.

Si en cualquier formulario, que puede ser el mismo donde pones las notas le pongo un botón y le digo

Docmd. Openreport"clientes", acpreview,,"pais is not null" y lo pulso el resultado es

Como se puede ver, no hay ninguna compañía que su país es nulo.

Donde digo pais, puedo decir report! Clientes! Loquesea. Report! Asignatura not is null, o cualquier otra cosa.

En caso de que quieras imprimirlo directamente basta con cambiar acpreview por acnormal, o simplemente dejarlo en blanco, ya que Access, por defecto, si no se le dice nada entiende que es para imprimir.

Como se ve en la imagen tengo los datos del estudiantes y se muestran de esa manera, ahora bien al darle clic sobre el botón "imprimir notas" me abre el siguiente informe:

Como se ve en la imagen se muestran las materias en cero, lo que quiero es que no se vean y no salgan al imprimir.

La situación también seria que hay estudiantes que tienen el 1er semestre y 2do semestre con notas así como hay estudiantes que solo tienen el 1er semestre, de igual forma hay estudiantes que tienen hasta el 3er semestre con notas.

Lo que quiero es que al darle al botón "imprimir notas" en el formulario y abra el informe, se me vean solo las materias que tengan notas o tengan valores cargados, estos valores no son igual para todos los estudiantes, en vista que si coloco:

Docmd. Openreport"notas", acpreview,,"administración is not null"

Me abrirá las notas de aquellos quienes administración no es nullo, pero no me mostrara aquellos que administración si sea nulo, eso significa que los que solo tengan las materias del primer semestre aprobadas no me aparecerán porque no han visto todavía la materia de administración.

Es decir no quiero que se visualicen los campos que tengan valos cero pero cuando se le carguen las notas si aparezcan visibles.

Como te he dicho puedes encadenar condiciones AND y OR. Como no sé el nombre real de los campos voy a ponerlo según veo, más o menos, en el informe

Docmd.openreport"notas",acpreview,,"[U.C.] <>0 and semestre =1 or semestre=2 or semestre=3"

Otra forma

Docmd. Openreport"notas", acpreview,,"lapso is not null"

En vista que creo que no me explico lo que deseo hacer entones pregunto:

Como hago en un informe para igualar una variable al valor que tiene el campo matemática.

Es decir para que la variable "N" sea igual al valor de matemática. Es decir si matemática tiene 18 que N = 18, al valor que coloquen en matemática.

Como hago para hacerlo dentro del informe.

Para definir una variable, en la sección del informe pertinente puedes poner

Dim N as integer

N=[matematica]

Pero la verdad no entiendo esa declaración de variable teniendo el propio valor de matematica

Lo único que puedo hacer, si quieres, repito, si quieres, mándame una copia con unos cuantos registros inventados(es para no tener que imaginarlos yo) a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias Gabriel, ya que si no sé quien me escribe ni los abro.

Ya lo pude resolver con una operacion Set.

en vista que en el informe cuando coloco:

Dim N as integer

N=[matematica]

me da un error me dice que no encuentra [matematica]

y probe con todas pero me daba error.

Ahora necesito saber como hacer que 1 txtbox (cuadro de texto) o un campo de la tabla llamado total de materias me muestre un valor numérico en un informe. Me explico:

tengo la condicion if.

if n<0 then

me.[materias]=6 <------ me da error

end if

Lo que quiero es que en el cuadro materia me muestre un numero al ejecutar el informe.

Le estás diciendo que n=campo matemáticas, pero no hay ningún campo llamado así. Supongo que el campo se llamará Asignatura, digo supongo porque no has querido, pese a mi oferta, que ahora retiro, ni mandarme la vista diseño del informe., con lo cual no puedo saber como se llaman los cuadros de texto del informe.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas