• Domingo 17 de Noviembre de 2024, 21:39

Autor Tema:  Ventana Con 30 Campos  (Leído 2425 veces)

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Ventana Con 30 Campos
« en: Martes 21 de Noviembre de 2006, 20:55 »
0
hola, (esta vez si que no es algo tonto eso es seguro) es como el tratar de darle la vuelva (mejor solucion) a algo que tiene muchos campos.

Yo tengo esta ventana:
Lo que está en azul lo meto en una tabla, y lo que está en rojo va en otra tabla:


Lo que está en azul lo meto en esta tablita:


Y lo que está en rojo lo meto en esta otra: (o al menos esa es la idea)


Yo pensaba (o aun pienso) el que tal vez podría poner en el campo Motivo el string del checkbox pulsado. Pero para eso el ID debe repetirse

Es decir, si yo en la primera tabla (el recuadro azul) meto un registro, supongamos ID=1 entonces en la segunda tablita (recuadro rojo) meteria ID=1 lo cual sería la relacion entre ambas tablas. Pero si yo selecciono 5, 20 o los 30 checkbox, entonces en la 2da tabla habrían 30 registros todos con ID=1

Asi, si yo quiero ver los registros relacionados, pues creo y supongo que podría en una SQL filtrar los datos, indicando que me busque (para una consulta) todos los registros de la 2da Tabla que tengan el ID de la 1era Tabla.

¿Que me recomiendan? que haga esto asi o que la 2da Tabla sea diferente, es decir, hacer una tabla con 30 campos  :(
y validaria asi:
Código: Text
  1.  
  2. If Check1.Value = 1 And TxtCampo1.Text<>"" Then
  3.    RsServicio("Campo1")=TxtCampo1.Text
  4. Else
  5.    RsServicio("Campo2")=""
  6. End If
  7. If Check2.Value = 1 And TxtCampo2.Text<>"" Then
  8.    RsServicio("Campo2")=TxtCampo2.Text
  9. Else
  10.    RsServicio("Campo2")=""
  11. End If
  12.     .
  13.     .
  14.     .
  15.     .
  16. If Check30.Value = 1 And TxtCampo30.Text<>"" Then
  17.    RsServicio("Campo30")=TxtCampo30.Text
  18. Else
  19.    RsServicio("Campo30")=""
  20. End If
  21.  
  22.  

En una consulta, yo activaria el CheckBox dependiendo si el campo de la Tabla tiene o no valor (el dato es numerico), si el campo está vacio checkbox.Value=0, si está lleno, checkbox.value=1 y pongo en el Textbox el dato.

Pero hacer esto ultimo, una tabla con 30 campos, y la otra pestaña tiene como 20, pues serían muchos campos, y luego escribir el codigo validando cada uno  :(

Por eso habia pensado si podría tal vez dejar la 2da Tabla como está y no meterle tantos campos. ¿cómo podría hacer para un caso como este?

EDITANDO:
Me he dado cuenta mientras empiezo todo esto, que va a ser más dificil de lo que pensé, algo me dice que no habra mucha opinión sobre este post, al menos yo me enrrede todo comenzando con esta loca idea de ver si debo o no hacer una tabla de muchos campos  <_< vamos a ver.
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #1 en: Martes 21 de Noviembre de 2006, 22:10 »
0
Si, ya me decidí, la 2da tablita la voy a dividir en 2 tablas  <_<
la primera con 30 campos (cotenido de la primera pestaña de la ventana)
la segunda con 19 campos (contenido de la segunda pestaña de la ventana)

Igual siempre, habrá que escribir muuuuucho código para validar todos esos TextBox y los CheckBox.

Al parecer no hay otra mejor forma, que se le va a hacer :brickwall:
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #2 en: Martes 21 de Noviembre de 2006, 23:05 »
0
me voy a tomar un tiempito  <_<  de puro análisis a pensar a papel y lapiz sobre esto, porque haciendo lo ultimo escrito sirve para el programa, pero no para los reportes.

Si algunos campos no se llenan, quedara el campo vacio o con un 0 en la tabla
(suponiendo que le indique al programa que si no hay nada, que ponga un 0 o deja el campo vacio)

En el reporte no podría poner todos esos campos, 30 campos, ni siquiera con hoja horizontal y con fuente de letra 8 entrarian todos, a muy pegados unos con otros y no sabría como hacer por algun Query el que salgan los datos siempre y cuando tengan un valor <>"" o <>0.

a darle pelea  :lightsabre:  :comp:

así sea que me tome varios dias o más a puro papel y lapiz hehehe  :P
Si esto es Leído por accidente, induzca al vomito

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #3 en: Miércoles 22 de Noviembre de 2006, 00:56 »
0
Tu solucion es bastante burda, por decirlo, suavemente. Pero soluciona tu problema. Que sea lo mas eficiente, es otra cosa.

Si tienes un minima nocion de gestion de base de datos, podrias haber modelo tu problema y asunto arreglado.

Por el icono del formulario, espero que no seas de CHILE, por que, deja bastante que desear tu solucion...

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #4 en: Miércoles 22 de Noviembre de 2006, 04:06 »
0
Cita de: "UserCode"
Yo pensaba (o aun pienso) el que tal vez podría poner en el campo Motivo el string del checkbox pulsado. Pero para eso el ID debe repetirse

Es decir, si yo en la primera tabla (el recuadro azul) meto un registro, supongamos ID=1 entonces en la segunda tablita (recuadro rojo) meteria ID=1 lo cual sería la relacion entre ambas tablas. Pero si yo selecciono 5, 20 o los 30 checkbox, entonces en la 2da tabla habrían 30 registros todos con ID=1

yo apoyo esa solucion :good: asi es como realmente se debe hacer :P


Para la otra solucion no es dificil validar 30 campos :P

Mira lo que yo haria es crear un arreglo de 'checks' y uno de 'textbox' con el index correspondiente es decir

el check(0) es otro
el textbox(0) es el text que esta enseguida de otro

el check(1) es Paquete Encontrado
el textbox(1) es el text que esta enseguida de Paquete Encontrado

el check(2) es Paquete Robado
el textbox(2) es el text que esta enseguida de Paquete Robado

y asi para poder recorrer los dos controles en un solo for B) no importa que sean 30,40,50...

por ultimo en la propiedad tag del textbox guardar el nombre del campo (de la tabla) para poder saber a que campo se va guardar....


Bien te dejo un ejemplo


Saludos
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #5 en: Miércoles 22 de Noviembre de 2006, 04:14 »
0
Cita de: "Jose Arriagada"
Tu solucion es bastante burda, por decirlo, suavemente. Pero soluciona tu problema. Que sea lo mas eficiente, es otra cosa.

Si tienes un minima nocion de gestion de base de datos, podrias haber modelo tu problema y asunto arreglado.

Por el icono del formulario, espero que no seas de CHILE, por que, deja bastante que desear tu solucion...
Mas que ayuda, parece reclamo, si ha preguntado creo que es porque desea orientacion y algo de apoyo, de alguien que pueda ofrecerlo

Siempre hay soluciones mas eficientes que otras, pero mientras se soluciones el problema muchas veces es suficiente (No es mi idea pero siempre es prioridad)

y creo que el que deja que desear es tu comentario, porque no veo nada de aporte :P, el que critica, propone si no que mejor no diga nada ;)


Saludos

Somos una comunidad
 :beer:
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Ventana Con 30 Campos
« Respuesta #6 en: Miércoles 22 de Noviembre de 2006, 05:28 »
0
Revisando tu pregunta y las formas que colocas, me doy cuenta por ejemplo: que difícilmente encontrarás 2 razones (de las 30) que se combinen (ley de propabilidad) pero si solo se requiere de una de esas razones para no haber entregado el paquete por ejemplo: "mal tiempo" que importaría si la dirección está incorrecta, o si el cliente está de huelga. si solo una razón cualquiera de estas 3 que menciono basta para que no se entregue (lo que sea que se entregue).

El problema que planteas pudiera solucionarse también, colocando todas las causas, de 'no entrega', en un ComboBox y seleccionando solo una de ellas, si hay varias causas, se seleccione la más relevante. El único problema sería que la causa fuera 'Otra', para lo cual habría que darle oportunidad al capturista que escribiera el motivo.

No entendí lo que Jose Arriagada quiso decir con:
Citar
podrias haber modelo tu problema y asunto arreglado.
Espero nos ilustre con con su idea.

 :comp:

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #7 en: Miércoles 22 de Noviembre de 2006, 16:37 »
0
compadres ya lo resolvi B) y viniendo corriendo a exponerlo, indico que es precisamente la solucion que dice el buen amigo F-Tanori  :good:

La Tabla que guarda lo que está en el recuadro Azul tiene estos campos:
TR_SERVICIOS (este ID es unico)
TipoServicio
TipoGestion
Fecha
ID
IDSucursal
Dias_Habiles
CodRegion
Total1 --> Total (TextBox en amarillo, Pestaña 1)
Total2 --> Total (TextBox en amarillo, Pestaña 2)

Y la Tabla que guarda lo que está en el recuadro rojo es esta asi:
CAUSAS_NO_ENTREGADOS (este ID si permite repetirse)
ID
Motivo
TipoCNE
TipoServicio
IDSucursal
CodRegion
Cant

Y efectivamente como ha comentado el amigo F_Tanori a matriz se minimizó todo:
Matriz tanto para los Check como para los Text
Aqui sólo la parte de lo de matriz:
Código: Text
  1.  
  2.                 For i = 0 To 48
  3.                     If Text1(i).Text &#60;&#62; &#34;&#34; Then
  4.                         RsCNE.AddNew
  5.                         RsCNE(&#34;CodRegion&#34;) = RsConfig(&#34;CodRegion&#34;)
  6.                         RsCNE(&#34;TipoServicio&#34;) = SERVICIO
  7.                         If i &#62;= 0 And i &#60; 30 Then
  8.                             RsCNE(&#34;TipoCNE&#34;) = 1 'No Imp
  9.                         ElseIf i &#62; 29 And i &#60;= 48 Then
  10.                             RsCNE(&#34;TipoCNE&#34;) = 2 'Imp
  11.                         End If
  12.                         RsCNE(&#34;IDSucursal&#34;) = SUCURSAL
  13.                         RsCNE(&#34;ID&#34;) = LbID.Caption
  14.                         RsCNE(&#34;Motivo&#34;) = Check1(i).Caption
  15.                         RsCNE(&#34;Cant&#34;) = Text1(i).Text
  16.                         RsCNE.Update
  17.                     End If
  18.                 Next i
  19.  
  20.  

Eso del IF i >= 0 And i < 30 Then y el otro con i > 29 And i <=48 Then
es porque el la segunda tabla estoy colocando lo que está en ambas pestañas
y para que no se mesclen los datos de una con la otra, pues lo valido con un campo:
TipoCNE = 1 --> Es No Imputable
TipoCNE = 2 --> Es Imputable

El botoncito que dice LISTO hace la sumatoria de los Text que tengan dato:
Primera Pestaña: Causas No Entregados [No Imputables]:
Código: Text
  1.  
  2.     Dim TotalNoImp As Double
  3.     TotalNoImp = 0
  4.     'No Imp:
  5.     For i = 0 To 29
  6.         TotalNoImp = TotalNoImp + Val(Text1(i).Text)
  7.     Next
  8.     TxtTotalNoImp = TotalNoImp
  9.  
  10.  

El otro botoncito de LISTO de la otra pestaña:
Causas No Entregados [Imputables]:
Código: Text
  1.  
  2.     Dim TotalImp As Double
  3.     TotalImp = 0
  4.     'Imp:
  5.     For i = 30 To 48
  6.         TotalImp = TotalImp + Val(Text1(i).Text)
  7.     Next
  8.     TxtTotalImp = TotalImp
  9.  
  10.  

Asi restauro todos los check y text:
Código: Text
  1.  
  2.     For i = 0 To 48
  3.         Check1(i).Value = 1
  4.         Text1(i).Text = &#34;&#34;
  5.     Next i
  6.  
  7.  

Citar
Tu solucion es bastante burda, por decirlo, suavemente. Pero soluciona tu problema. Que sea lo mas eficiente, es otra cosa.
Burda = sifrino (no importa si ha sido por "decirlo suavemente")
Que sea lo más eficiente es la idea y lo que siempre se trata de buscar

Citar
Si tienes un minima nocion de gestion de base de datos, podrias haber modelo tu problema y asunto arreglado.
R: digo lo mismo que el amigo cpmario sobre esto.

Citar
Por el icono del formulario, espero que no seas de CHILE, por que, deja bastante que desear tu solucion...
El icono es de la empresa, en eso yo no tengo nada que ver.
Y no no soy de Chile y es triste que tal vez tu lo seas, porque tal vez yo no sea un erudito en la programacion o más aun en gestiones de bases de datos, pero al menos no soy pedante.

Te recomiendo que con el ultimo comentario, que en vez de decir lo que piensas, mejor piensa lo que dices, veras que en ese orden no te llevas la sorpresa de un posible disgusto o mal entendido por parte de las personas a quienes te expresas, modera mejor tus palabras para la proxima. O en su defecto mientras sigas con esa actitud (que no te conozco ni te he hecho nada) descarta u omite mis post en el futuro, haste de la vista gorda y lee y participa en el de los otros menos en uno que yo escriba.

A los demás muchachos muchass gracias, no me sorprende que el amigo F_Tanori apreciese con la solución, me alegra no haber pasado antes porque sino, la idea hubiese sido de él (por leerle) y no mia (al menos en esto) por la obsesión y gusto de ver como podía darle la mejor solucion a ello, concordamos en lo mismo y lo coroboro al verlo.  :comp:

gracias muchachos  :kicking:
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Ventana Con 30 Campos
« Respuesta #8 en: Miércoles 22 de Noviembre de 2006, 18:07 »
0
cpmario:
Citar
El problema que planteas pudiera solucionarse también, colocando todas las causas, de 'no entrega', en un ComboBox y seleccionando solo una de ellas, si hay varias causas, se seleccione la más relevante. El único problema sería que la causa fuera 'Otra', para lo cual habría que darle oportunidad al capturista que escribiera el motivo.

Oops!! se me habia pasado esta parte
Si yo pense en eso tambien, ponerlo todo en un combo pero el problema era el usuario tendria que estar desplegando el combo muchas veces, además al pulsar el boton guardar se guarda todo de una vez, con un combobox tendría que estar adjutando cada item del listado en alguna variable, tabla, etc.. para luego guardar.  :(

Asi como ha quedado creo que esta muy bien porque eso de hacer una tabla co 30 campos, realmente no sé como saldrian los datos para un repote ya que no todos los campos se llenan, y hablando mas de Filas y no de Registros (para verlo mejor) no serviria en el reporte, aun colocando un largo WHERE Ausente<>"" AND .... en una sql validando cada campo de los 30 en la tabla, ya me daba vueltas todo de que asi no podia ser, tal vez si para el programa pero no para reporte alguno.

 :hola:
Si esto es Leído por accidente, induzca al vomito