[Ayuda] Do case

460 views
Skip to first unread message

Facundo Dell'Anna

unread,
Sep 2, 2013, 11:39:09 AM9/2/13
to publice...@googlegroups.com
Hola, mi duda es la siguiente.

Estoy haciendo un programa el cual graba datos desde el formulario hacia la tabla, con distintos objetos como checkbox, listbox,combobox...

El problema es que estoy utilizando de manera incorrecta el Do case. Por ejemplo hago 1 case para cada caso del optiongroup, mi pregunta es: ¿Cómo se supone que debo usarlo para que con 1 case el optiongroup ya esté cubierto?

Facundo Dell'Anna

unread,
Sep 2, 2013, 12:07:10 PM9/2/13
to publice...@googlegroups.com
Voy a aclarar porque tal vez no se entendió. ¿Cómo hago para usar 1 solo case en el código que  graba los datos hacia la tabla para que abarque todo el optiongroup?

Ej: (Es mas o menos así) Do case
                                                 case thisform.optiongroup.value=1
                                                  replace tabla.datoX with "1"
                                                  endcase

O sea que hago un "Do case" para cada opción del optiongroup. Lo que quiero es que con un solo "Do case" y "Endcase" tenga todo el optiongroup cubierto.

Antonio.xt

unread,
Sep 2, 2013, 12:07:27 PM9/2/13
to publice...@googlegroups.com

Esta es la forma en que podrias usar el CASE con los valores del OptionGroup:

DO CASE
CASE Thisform.optiongroup1.Value = 1
    {Lo que tenga que hacer con el valor 1}
CASE Thisform.optiongroup1.Value = 2
    {Lo que tenga que hacer con el valor 2}
CASE Thisform.optiongroup1.Value = 3
    {Lo que tenga que hacer con el valor 3}
ENDCASE


Con la propiedad Value del OptionGroup, segun la cantidad opciones que incluya.

Saludos...

Miguel A.

unread,
Sep 2, 2013, 12:08:50 PM9/2/13
to publice...@googlegroups.com
do case
case c=1
case c=2
Otherwise
endcase

Facundo Dell'Anna

unread,
Sep 2, 2013, 12:20:29 PM9/2/13
to publice...@googlegroups.com
Gracias Antonio y Miguel. Ahora mi problema es otro y la verdad no tengo idea cual es la solución.

Cuando quiero modificar esos datos desde el formulario en el momento que los estaría sobreescribiendo me da error de incompatibilidad entre tipo de operador y operando, cuando veo donde está el error me dice que es en el "Do case" del optiongroup (Ya modificado como me dijeron). La idea es que sobreescriba los datos sin ningún problema.

Analyzer

unread,
Sep 2, 2013, 12:54:57 PM9/2/13
to publice...@googlegroups.com
Está usando tablas nativas o un sgbd?..

Si está usando tablas nativas abra la tabla con USE mitabla y revise los tipos con LIST STRUCTURE desde la ventana de comandos.

Si está usando un sgbd vaya a su administrador gráfico y revise los tipos desde ahi.

Luego desde VFP revise los tipos que manipula y compruebe que haya coincidencia con los de su tabla o los de su sgbd.

Si no la hay, haga coincidir los tipos usando una funcion de conversión de tipos como transform, dtoc, ctod, str, val, etc.

Saludos!

Víctor Hugo Espínola Domínguez

unread,
Sep 2, 2013, 12:57:53 PM9/2/13
to publicesvfoxpro
Hola Facundo

Publica el código que estás usando, será más fácil ayudarte.

Saludos,
Víctor.

Facundo Dell'Anna

unread,
Sep 2, 2013, 1:09:16 PM9/2/13
to publice...@googlegroups.com
Los tipos de datos son iguales. La grabación se hace correctamente, pero al momento de intentar modificar cualquier campo (por ejemplo un campo X que antes era 2 y lo modificamos a 3), da el error que mencioné antes, y sucede en el primer "case" que encuentre en el código.

Facundo Dell'Anna

unread,
Sep 2, 2013, 1:32:55 PM9/2/13
to publice...@googlegroups.com
if varmodi <> "m"
    append blank
endif
thisform.List1.enabled=.t.
thisform.ALTA.enabled=.t.
thisform.BAJA.enabled=.t.
thisform.MODIFICAR.enabled=.t.
thisform.CANCELAR.enabled=.f.
thisform.GRABAR.enabled=.f.
thisform.SALIDA.enabled=.t.
replace ficha.ficcod with thisform.text1.value
replace ficha.ficape with thisform.text2.value
replace ficha.ficnom with thisform.text3.value
replace ficha.ficdni with thisform.text4.value
replace ficha.ficsue with thisform.text5.value
replace ficha.ficfdn with thisform.text6.value
replace ficha.ficobs with thisform.text7.value
If thisform.check2.value=1
    replace ficha.ficmed with .T.
else
    replace ficha.ficmed with .F.
endif
If thisform.check1.value=1
    replace ficha.ficani with .T.
else
    replace ficha.ficani with .F.
endif
If thisform.check3.value=1
    replace ficha.ficaca with .T.
else
    replace ficha.ficaca with .F.
endif
If thisform.check4.value=1
    replace ficha.ficpic with .T.
else
    replace ficha.ficpic with .F.
endif
If thisform.check5.value=1
    replace ficha.ficali with .T.
else
    replace ficha.ficali with .F.
endif
If thisform.check6.value=1
    replace ficha.ficpol with .T.
else
    replace ficha.ficpol with .F.
endif
If thisform.check7.value=1
    replace ficha.ficotr with .T.
else
    replace ficha.ficotr with .F.
endif
If thisform.check7.value=1
    replace ficha.ficotr2 with thisform.text8.value
endif
replace ficha.ficmed2 with thisform.combo1.value
replace ficha.ficani2 with thisform.combo2.value
replace ficha.ficali2 with thisform.combo3.value
replace ficha.ficpic2 with thisform.text9.value
Do case
    case thisform.optiongroup1.value=6
    replace ficha.fichij with "No tiene"
    case thisform.optiongroup1.value=1
    replace ficha.fichij with "1"
    case thisform.optiongroup1.value=2
    replace ficha.fichij with "2"
    case thisform.optiongroup1.value=3
    replace ficha.fichij with "3"
    case thisform.optiongroup1.value=4
    replace ficha.fichij with "4"
    case thisform.optiongroup1.value=5
    replace ficha.fichij with "Más de 4"
Endcase
thisform.text1.enabled=.f.
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f.
thisform.text5.enabled=.f.
thisform.text6.enabled=.f.
thisform.text7.enabled=.f.
thisform.text1.value=ficha.ficcod
thisform.text2.value=ficha.ficape
thisform.text3.value=ficha.ficnom
thisform.text4.value=ficha.ficdni
thisform.text5.value=ficha.ficsue
thisform.text6.value=ficha.ficfdn
thisform.text7.value=ficha.ficobs
thisform.list1.displayvalue=ficha.ficcod
thisform.list1.requery
thisform.list1.refresh
thisform.list1.setfocus
thisform.list1.click
thisform.list1.enabled=.t.

Ese sería el código del boton "grabar". El problema ocurre cuando, por mediante del formulario, intento modificar los datos de lo que sería una persona que ya está en la tabla.

J. Enrique Ramos Menchaca

unread,
Sep 2, 2013, 2:08:53 PM9/2/13
to publice...@googlegroups.com
Tu error es, que los optiongroup almacenan el dato de value como integer y tu lo almacenas en caracter y al regresar el valor al optiongroup no lo conviertes a integer.

Facundo Dell'Anna

unread,
Sep 2, 2013, 3:02:44 PM9/2/13
to publice...@googlegroups.com
¿Cómo podría hacer eso?

Igualmente, da error en todas la líneas que reemplacen datos, no solo en el case del optiongroup.

Víctor Hugo Espínola Domínguez

unread,
Sep 2, 2013, 3:18:46 PM9/2/13
to publicesvfoxpro
Hola Facundo

En el botón <grabar> estás convirtiendo datos numéricos a lógicos y caracteres, luego de traer el registro a modificar debes hacer el proceso inverso antes de actualizar el formulario, ejemplos:

If   ficha.ficotr
   thisform.check7.value=1
else
   thisform.check7.value=0
endif

o mejor aún: ThisForm.check7.Value = IIF( tuTabla.Ficha.FicOtr, 1, 0 )
 
Do case
    case tuTabla.ficha.fichij == "No tiene"
         thisform.optiongroup1.value = 6
    case  tuTabla.ficha.fichij with "1"
         thisform.optiongroup1.value = 1
....
....

Saludos,
Víctor.

Reply all
Reply to author
Forward
0 new messages