Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Listado

Estas en el tema de Listado en el foro de Bases de Datos General en Foros del Web. Veamos, yo tengo una base de datos de access (hay que empezar por ahí). La situación es esta, se abre un formulario en el que ...

  #1 (permalink)  
Antiguo 26/03/2008, 05:07
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Listado

Veamos, yo tengo una base de datos de access (hay que empezar por ahí). La situación es esta, se abre un formulario en el que se introduce una contraseña. si es válida lleva a otro formulario (PartesDeTrabajo). Al abrirse ese formulario, se mira si ya hay un parte creado ese mismo día, si lo hay muestra el último, si no lo hay crea uno nuevo. Hasta ahñi todo bien.

El caso es que quiero poner en una zona del formulario un listado de los partes que lleve realizados durante ese día ese operario (el que introduce la contraseña). Se me había ocurrido a través de una consulta y después un informe, pero creo que me sirve de poco si el informe o la consulta no tienen el filtro (o lo que haya que poner) para que sólo me muestre las de un operario (que es el que introduce la contraseña).

alguna idea de cómo hacerlo?
__________________
Cámara Oscura
Etheria
  #2 (permalink)  
Antiguo 26/03/2008, 10:53
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Puedes poner una lista (listbox), con las caracteristicas que quieras, numero de campos, tamaño de estos, etc etc. Lo importante es que en el evto load del form, le puedes asignar a la lista la sentencia sql que quieras. Como??? Pues algo asi en el evnto load del form:

me.Lista.RowSource="Select Campo1,Campo2,Campo3 from Tabla where Operario=" & me.Operario & " AND Fecha=#" & format(date(),"mm/dd/yyyy") & "#"

Tendras que ajustar los nombres de los campos, controles, etct etc.

Recuerda tambien que si el tipo de datos de Operario es texto, hay que añadirle comillas simples.

un saludo
  #3 (permalink)  
Antiguo 27/03/2008, 02:14
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

creo que me he perdido XD. Veamos, yo creo la lista y añado los campos que quiero que muestre en esa lista. Luego voy al load del formulario y pongo lo siguiente:

Me.Lista.RowSource = "Select CodigoOperario, fecha, 'obra', 'actividad', horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#"& format (date(), "mm/dd/yyy") & #"

donde tú ponías operario yo he entendido como que era el campo que yo quería comparar para que coincidiese. Luego me dijiste lo del campo de texto con comillas simples y coo al principio me fallaba, le he puesto las comillas en los otros campos, pero aún así me da error -.-

Puede ser porque CodigoOperario es autonumérico?
__________________
Cámara Oscura
Etheria

Última edición por Koudelka; 27/03/2008 a las 02:57
  #4 (permalink)  
Antiguo 27/03/2008, 03:20
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

bueno, ya no me sale error, porque me quedaban unas comillas dejando la cosa así:

Me.Lista.RowSource = "Select CodigoOperario, fecha, 'obra', 'actividad', horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#"& format (date(), "mm/dd/yyy") & #"

el problema es que ahora en la lista no me muestra nada >.<
__________________
Cámara Oscura
Etheria
  #5 (permalink)  
Antiguo 27/03/2008, 03:39
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Primero quita las comillas simples que te pongo en rojo:

Me.Lista.RowSource = "Select CodigoOperario, fecha, 'obra', 'actividad', horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#"& format (date(), "mm/dd/yyy") & #"

Luego, antes de esa sentencia vamos a comprobar que hay algo en Me.CodigoOperario con : msgbox Me.CodigoOperario

Ademas, en la sentencia falta alguna comilla doble y algun y, al final queadria asi (ponlo tal cual te lo pogo a continuacion:

MsgBox Me.CodigoOperario
Me.Lista.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"

Haz esto y me cuentas si funciona.

Un saludo
  #6 (permalink)  
Antiguo 27/03/2008, 03:45
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

veamos, sí que le llega el código operario, ya que después de introducir la contraseña me sale una ventanita que pone 14 (justo el operario al que corresponde). Pero debe de haber un fallo, porque en la lista me muestra las actividades y las horas, pero no las obras (y está puesto o_O)
__________________
Cámara Oscura
Etheria
  #7 (permalink)  
Antiguo 27/03/2008, 03:53
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Vale, entones algo muestra. Mira las propiedades de la lista, el numero de columnas (segun la sql deberia haber 5 (CodigoOperario, fecha,obra,actividad,horas) y el ancho de columnas.

un saludo
  #8 (permalink)  
Antiguo 27/03/2008, 03:56
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

en total son 6 (incluye nparte por ser la clave, pero puse que no la mostrase a la hora de crear el listado). El número de columnas coincide. El caso es que me he fijado es que cuando me muestra el msgbox con el número 14, en el listado sí que se ven las obras, pero cuando acepto esa ventana coge el filtro de la fecha y se quitan las obras O_O
__________________
Cámara Oscura
Etheria
  #9 (permalink)  
Antiguo 27/03/2008, 04:01
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Vamos a comprbar antes de cambiar la lista, si hay registros para ese valor. Pon entre el msgbox y la asignacion al rowsource de la lista esto:


MsgBox DCount("*", "PartesDeTrabajo", "CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")

Que sale en el mensaje??? Si sale 0, es que no hay registros para la fecha actual y ese codigo de operario en la tabla partesDeTrabajo.

un saludo
  #10 (permalink)  
Antiguo 27/03/2008, 04:06
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

después del 14 (código operario), me sale una ventanita con el número 2 o_O
__________________
Cámara Oscura
Etheria
  #11 (permalink)  
Antiguo 27/03/2008, 04:09
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Entonces en el listado deberian cargarse 2 registros.

De esas 5 columnas, cuales quieres que se muestren??? (en numero de columnas debe haber 5)

Un saludo
  #12 (permalink)  
Antiguo 27/03/2008, 04:11
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

yo quiero que muestre obras, actividad y horas.
__________________
Cámara Oscura
Etheria
  #13 (permalink)  
Antiguo 27/03/2008, 04:21
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Entonces pon solo esos tres campos en la select:

Me.Lista.RowSource = "Select obra,actividad,horas form ..........

Y luego en las proiedades de la lista, en
numero de columnas pon: 3
Ancho de columnas: 2cm;2cm;2cm (pon los cm que necesites en cada columna)

Un saludo
  #14 (permalink)  
Antiguo 27/03/2008, 04:27
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

mientras escribias tu post he hecho una nueva lista (renombrando la anterior por si acaso) y ahora sí que me lo muestra, por lo que a saber qué era XD.

De todas formas ahora tengo una cosa más que añadir a tese apartado. Veamos, con la lista hecha, me gustaría añadir un campo que me sumase las horas que se muestran en ella. Si en esa lista se muestran 2 actividades con sus horas, quiero que abajo de esa lista me haga la suma de esas dos actividades en horas.
__________________
Cámara Oscura
Etheria
  #15 (permalink)  
Antiguo 27/03/2008, 04:36
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Prueba pòniendo un cuadro de texto, (Por ejemplo TxtHorasTotales) y en el load el form:

me.TxtHorasTotales=Dsum("Horas", "PartesDeTrabajo", "CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")

Un saludo
  #16 (permalink)  
Antiguo 27/03/2008, 04:45
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

vale, me lo calcula, pero me pone un número decilam (ej. 0,42513...). Esto ya me ha ocurrido, así que se solucionarlo, gaxias ^___^
__________________
Cámara Oscura
Etheria
  #17 (permalink)  
Antiguo 27/03/2008, 04:52
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

antes lo digo, antes me da error -.-

Veamos, tenemos TxtHorasTotales en el que me hace la suma y me muestra un número decimal. Como quiero que me lo muestre como una hora hago lo siguiente.

Creo un nuevo campo de texto llado Dias en el que en el origen de datos pongo lo siguiente: =Ent([TxtHorasTotales])

De esta manera, el número decimal me lo pasa entero. El siguiente paso es un nuevo campo de texto en el que el origen de datos pongo lo siguiente: =CFecha ([TxtHorasTotales]-[Dias])

Esto me funcionó la otra vez, pero ahora no me funciona... es que he hecho algo mal?
__________________
Cámara Oscura
Etheria
  #18 (permalink)  
Antiguo 27/03/2008, 05:09
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

En el campo horas, que tipo de datos hay?? Que contiene???

Un saludo
  #19 (permalink)  
Antiguo 27/03/2008, 05:13
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

es un campo fecha/hora
__________________
Cámara Oscura
Etheria
  #20 (permalink)  
Antiguo 27/03/2008, 05:19
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

he hecho como antes, un nuevo campo de texto con lo mismo y me funciona, así que sería algo mal escrito
__________________
Cámara Oscura
Etheria
  #21 (permalink)  
Antiguo 27/03/2008, 05:34
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

Veamos, ahora quiero hacer algo parecido. Ahora he hecho una consulta que pregunta por el operario y una fecha.

Con esa consulta yo quiero que me muestre una lista como la que he hecho antes y la suma total de las horas (eso ya se hacer). El problema es el siguiente (que no se me ocurre cómo hacerlo).

Necesito que al formulario que muestra esta lista con base de la consulta que se le puedan añadir nuevos datos. Esto es, por ejemplo yo pongo un botón a un nuevo formulario con los datos a rellenar, peeeeero aquí va la cuestión. Cómo hago para que al ir a este último formulario el CodigoOperario y fecha coincidan? Algo así como que se autorellene y se guarde en la tabla correspondiente.

A coincidir me refiero a que al hacer la consulta le pido ua fecha y si quiero añadir algo nuevo a esa fecha en el último formulario me ponga dicha fecha (que no sería la actual) y el CodigoOperario coincidiese con el de la lista.
__________________
Cámara Oscura
Etheria
  #22 (permalink)  
Antiguo 28/03/2008, 03:54
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

ignorando mi último post (lo solucioné de cierta manera) me ha surgido un error con lo que conseguí ayer con la lista. Veamos, como ya dice, se introduce una contraseña y si es correcta me lleva a un segundo formulario (en donde está la lista). El problema es el siguiente, que me da un error al cargar este segundo formulario en esta parte:

Private Sub Form_Load()
Me.Lista.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
Me.TxtHorasTotales = DSum("Horas", "PartesDeTrabajo", "CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
End Sub

me da error en la línea de rojo. Y el error que me sale me dice lo siguiente:

Se ha producido el error 3075 en tiempo de ejecución

Error de sintaxis (falta operador) en la expresón de consulta 'CodigoOperario = And fecha= #03/28/2008#'

El caso es que al fijarme en este error me he dado cuenta de que la fecha está en distinto orden, poniendo el mes primero y luego el día. Ahora bien, yo no he tocado nada como para modificar una fecha, así que.. cómo lo arreglo? >.<
__________________
Cámara Oscura
Etheria
  #23 (permalink)  
Antiguo 28/03/2008, 03:58
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

El problema no esta en la afecha sino el el codigo de operario. Segun el mensaje, no hay nada en Me.CodigoOperario, lo hay??? Pon un msgbox para comprobarlo.

Un saludo
  #24 (permalink)  
Antiguo 28/03/2008, 04:04
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

he puesto MsgBox Me.CodigoOperario

y me sale el siguiente error

se ha producido un error 94 en tiempo de ejecución

uso no válido de Null


por qué me falla ahora si hasta ayer me funcionaba?
__________________
Cámara Oscura
Etheria
  #25 (permalink)  
Antiguo 28/03/2008, 04:07
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

En el form tienes un control llamado CodigoOperario, si lo tienes invisible hazlo visible para ver que contiene. No se, algo habras cambiado, no sera que abres el form sin filtrar y por eso no hay Me.CodigoOperario??

un saludo
  #26 (permalink)  
Antiguo 28/03/2008, 04:19
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

Veamos, yo tengo el formulario numeros2 en el que introduzco una contraseña y al darle al botón acepar me lleva a horas3. En el botón del primer formulario tengo puesto lo siguiente:

Private Sub CmdAceptar_Click()
Dim IdOperario As Long

IdOperario = Nz(DLookup("CodigoOperario", "operario2", "clave=" & Me.Txtclave), 0)


'Comprobamos si existe la clave introducida
If IdOperario <> 0 Then
'comprobamos si hay algun registro para este operario en la tabla Partes de tarbajo para
'La fecha actual, si existe abrimos el registro, si no abrimos uno nuevo
If DCount("*", "PartesDeTrabajo", "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date, "mm/dd/yyyy") & "#") > 0 Then
DoCmd.OpenForm "hora3", acNormal, , "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
'cerramos el form numeros
DoCmd.Close acForm, Me.Name
Else
DoCmd.OpenForm "hora3", acNormal, , , acFormAdd
Forms!hora3!CodigoOperario = IdOperario
'Forms!hora!fecha = Date'Esta no hace falta ya que tienes en la tabla Partes de trabajo
'El campo fecha con valor predeterminado la fecha actual
'cerramos el form numeros
DoCmd.Close acForm, Me.Name
End If
Else
MsgBox "La contraseña introducida no corresponde a ningun empleado", vbCritical, "CONTRASEÑA ERRONEA"
End If
End Sub



Ahora bien. Tengo un CodigoOperario en horas3 oculto, pero lo he puesto visible y sigue dando el mismo error. El caso es que si entro directamente a horas3 (sin poner la contraseña), me sale el msgbox que he puesto con el número 13 (CodigoOperario), pero me fijo en el campo CodigoOperario y me sale 14 (el operario al que le corresponde la ficha que estoy viendo, así que en el mensaje tendría que salir 14 y no 13)
__________________
Cámara Oscura
Etheria
  #27 (permalink)  
Antiguo 28/03/2008, 04:38
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Te debe dar error cuando se trata de un nuevo registro, es decir, cuando entra en el else, ya que si entra en la primera opcion, simplemente abre le form filtrado y si tiene valor el codigoOperario.

Al entrar por la segunda opcion, el CodigoOperario no tiene valor, y aunque le hagamos la asigancion aqui (Forms!hora3!CodigoOperario = IdOperario), el dato aun no se ha guardado, por eso la propiedad value de Me.CodigoOperario esta vacia y da el error.

Antes has puesto MsgBox Me.CodigoOperario y te daba error, ponlo asi:

MsgBox Me.CodigoOperario.text

Deberia funcionar.


Cita:
Iniciado por Koudelka
El caso es que si entro directamente a horas3 (sin poner la contraseña), me sale el msgbox que he puesto con el número 13 (CodigoOperario), pero me fijo en el campo CodigoOperario y me sale 14 (el operario al que le corresponde la ficha que estoy viendo, así que en el mensaje tendría que salir 14 y no 13)
Esto es normal, abres el form directamente, sin filtro ni nada, y te sale el primer registro que haya.

Un saludo
  #28 (permalink)  
Antiguo 28/03/2008, 04:51
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

me sale el siguiente error:

Se ha producido el error 2185 en tiempo de ejecución.
No se puede hacer referencia a una propiedad o a un método para un control a menos que el control tenga enfoque.
__________________
Cámara Oscura
Etheria
  #29 (permalink)  
Antiguo 28/03/2008, 04:53
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Listado

Hay que darle el enfoque antes de referirte a esa propiedad, por eso siempre se usa value:

Me.CodigoOperario.setfocus
MsgBox Me.CodigoOperario.text

Un saludo
  #30 (permalink)  
Antiguo 28/03/2008, 04:58
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Listado

Me sale el mensaje en blanco y me pone el siguiente error

se ha producido el error 3075 en tiempo de ejecución
Error de sintaxis (falta operador) en la expresón de consulta 'CodigoOperario = And fecha= #03/28/2008#'
__________________
Cámara Oscura
Etheria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:42.