• Sábado 20 de Abril de 2024, 01:31

Autor Tema:  Scroll Con Form Y Campo Unico  (Leído 2677 veces)

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Scroll Con Form Y Campo Unico
« en: Jueves 6 de Octubre de 2005, 17:57 »
0
Hola como estan?

Tengo 2 problemas:

1. Cargo unos controles en el form de forma vertical, el formulario tiene un tamaño fijo. Tengo unos botones de edicion y cuando bajen con el scroll del form estos controles de edicion se deben mantener visibles.

2. Cargo en tiempo de ejecucion una tabla, tiene un campo unico, hize la prueba repitiendo un dato para que me apareciera el error y al momento de guardar no sale nada todo pasa normal, el error me aparece luego cuando me desplazo o cierro el formulario no se que pueda ser. El codigo que uso para abrir la tabla es el siguiente:
Código: Text
  1. SET MULTILOCKS ON
  2.    SELECT 0
  3.    USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + "\" + TablaCampos
  4.    loSuccess = CURSORSETPROP("Buffering",5)
  5.  
Muchas gracias por la atencion prestada.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Scroll Con Form Y Campo Unico
« Respuesta #1 en: Martes 11 de Octubre de 2005, 00:10 »
0
k tal widark tiempo sin estar por aki, bueno tal ves si pones el error se nos hará mas facil ayudarte y ver en que puede ser ese problema.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Scroll Con Form Y Campo Unico
« Respuesta #2 en: Martes 11 de Octubre de 2005, 16:51 »
0
Que tal Juez, encantado de saludarte de nuevo :D!

Resulta que no hay error, y ese es el problema, cree un campo unico en una "Free Table" y cuando repito el dato en ese campo y lo guardo no pasa nada, no hay error de indice repetido ni algo parecido, el error aparece cuando me muevo adelante o atrás y lo mas raro es que en otro formulario (con otra tabla) lo hago igual y si se genera el error de indice duplicado.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Scroll Con Form Y Campo Unico
« Respuesta #3 en: Martes 11 de Octubre de 2005, 17:52 »
0
igualmente widark, vamos a agregarle una linea mas al codigo que colocaste y modificarle la última para que pruebes.

Código: Text
  1. SET MULTILOCKS ON
  2.   SELECT 0
  3.   USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + "\" + TablaCampos
  4.   vTabla = alias ()
  5.   loSuccess = CURSORSETPROP("Buffering",5, vTabla)
  6.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Scroll Con Form Y Campo Unico
« Respuesta #4 en: Martes 11 de Octubre de 2005, 23:01 »
0
Gracias Juez Funciono una parte, ahora si me avisa que el indice se esta duplicando pero cuando cancelo la accion o trato de guardar  aparece el mensaje que la tabla debe tener buffer de registro o tabla. ¡HELP!
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Scroll Con Form Y Campo Unico
« Respuesta #5 en: Miércoles 12 de Octubre de 2005, 16:33 »
0
ok widark podes poner el codigo aki que usas al momento de cancelar o guardar?
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Scroll Con Form Y Campo Unico
« Respuesta #6 en: Miércoles 12 de Octubre de 2005, 21:17 »
0
Claro, y solo por hoy pondré el código con que cargo el formulario, solo es oferta  :D:
Este codigo va en un metodo que cree para el formulario CargaControles:
Código: Text
  1. PARAMETERS Carpeta as String, TablaCampos as String, TablaDigitacion as String
  2. Public loErr AS Exception
  3. Local loSuccess as Boolean, loTop as Integer
  4. LOCAL loObjeto as String, loOrigenDatos as String, loControl as String, loPrefijo as String &&Prefijo del nombre del Control
  5. LOCAL loTablaAbierta as String &&La tabla que se abrira para el combo
  6.  
  7. Try
  8.   SET MULTILOCKS ON
  9.  
  10.    USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + "\" + TablaCampos IN 0
  11.   loSuccess = CURSORSETPROP("Buffering",5,TablaCampos)
  12.   IF loSuccess = .T.
  13.     MESSAGEBOX("Se ha conectado a la Tabla " + TablaCampos + " con exito.",64,"Enlace a Datos")
  14.     SET ORDER TO Posicion
  15.     COPY TO Array loCamposFijos FIELDS nomcampo,etiqueta,tipcontrol,relacion,requerido FOR Aparece = .T.
  16.   EndIf
  17.   loSuccess = .F.
  18.   USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + "\" + TablaDigitacion IN 0
  19.   loSuccess = CURSORSETPROP("Buffering",5)
  20.   IF loSuccess = .T.
  21.     MESSAGEBOX("Se ha conectado a la Tabla " + TablaDigitacion + " con exito.",64,"Enlace a Datos")
  22.  
  23.     SELECT 2
  24.     loTop = 38
  25.     FOR I = 1 TO ALEN(loCamposFijos,1)
  26.       WAIT WINDOW "Creando los campos para la digitación." NoWait
  27.       AdicionControles(ThisForm, 'lbl' + ALLTRIM(loCamposFijos(I,1)), "Label", loTop, 5,&#59;
  28.         FSIZE(ALLTRIM(loCamposFijos(I,1))) + 3, ALLTRIM(loCamposFijos(I,2)))
  29.  
  30.       IF loCamposFijos(I,3) = "Normal"
  31.         IF TYPE(FIELD(ALLTRIM(loCamposFijos(I,1)))) = "L"
  32.           loControl = "CheckBox"
  33.           loPrefijo = "chk"
  34.           ELSE
  35.           IF FSIZE(ALLTRIM(loCamposFijos(I,1))) < 49
  36.             loControl = "TextBox"
  37.             loPrefijo = "txt"
  38.             ELSE
  39.               loControl = "EditBox"
  40.             loPrefijo = "edt"
  41.           EndIf
  42.         EndIf
  43.         ELSE
  44.         loControl = "ComboBox"
  45.         loPrefijo = "cmb"
  46.       EndIf
  47.       loObjeto      = loPrefijo + ALLTRIM(loCamposFijos(I,1))
  48.       loOrigenDatos = '"' + TablaDigitacion + "." + ALLTRIM(loCamposFijos(I,1)) + '"'
  49.       AdicionControles(ThisForm, loObjeto, loControl, loTop, 99,&#59;
  50.               FSIZE(ALLTRIM(loCamposFijos(I,1))) + 3, "")
  51.       ThisForm.&loObjeto..ControlSource = &loOrigenDatos
  52.       ThisForm.&loObjeto..Tag = IIF(loCamposFijos(I,5) = .F.,"N","S")
  53.       IF loControl = "ComboBox"
  54.         loTablaAbierta = ALLTRIM(loCamposFijos(I,4))
  55.         IF NOT USED(loTablaAbierta)
  56.           USE FULLPATH(CURDIR()) + "Globales\" + loTablaAbierta IN 0
  57.         EndIf
  58.         loOrigenDatos = loTablaAbierta + ".descripcio,codigo"
  59.         ThisForm.&loObjeto..ColumnWidths = "190,50"
  60.         ThisForm.&loObjeto..BoundColumn  = 2
  61.         ThisForm.&loObjeto..ColumnCount  = 2
  62.         ThisForm.&loObjeto..FirstElement = 1
  63.         ThisForm.&loObjeto..RowSourceType = 6
  64.         ThisForm.&loObjeto..RowSource    = loOrigenDatos
  65.       EndIf
  66.  
  67.       loTop = loTop + ThisForm.&loObjeto..Height + 5
  68.     Next
  69.   ThisForm.txtColor1.ControlSource = "Daniel.color"
  70.   EndIf
  71.   SELECT &TablaDigitacion
  72.   EstadoControles(ThisForm, .F.)
  73.   Desplazamiento (ThisForm, 92)
  74.  
  75.  Catch To loErr
  76.   MESSAGEBOX(loErr.Message,48,"Error")
  77. EndTry
  78.  
Este es con el que guardo:
Código: Text
  1. Local strClase as String, intCo as Integer, loErr as Exception
  2.  
  3. Try
  4.   FOR intCo = 1 TO ThisForm.ControlCount
  5.     IF INLIST(ThisForm.Controls(intCo).BaseClass,"Textbox","Editbox","Combobox")
  6.       IF ThisForm.Controls(intCo).Tag = "S" AND ALLTRIM(ThisForm.Controls(intCo).Value) = ""
  7.         Messagebox("Debe llenar " + ThisForm.Controls(intCo - 1).Caption + " para guardar.",48,"Faltan Datos")
  8.         Cancel
  9.       EndIf
  10.       ELSE
  11.         IF ThisForm.Controls(intCo).BaseClass = "Checkbox"
  12.           IF ThisForm.Controls(intCo).Tag = "S" AND ThisForm.Controls(intCo).Value = .F.
  13.           Messagebox("Debe llenar " + ThisForm.Controls(intCo - 1).Caption + " para guardar.",48,"Faltan Datos")
  14.           Cancel
  15.         EndIf
  16.       EndIf
  17.     EndIf    
  18.   Next
  19.  
  20.   TABLEUPDATE()
  21.  
  22.   IF BAdicion
  23.     GO BOTTOM
  24.   EndIf
  25.  
  26.   BAdicion = .F.
  27.   BEdicion = .F.
  28.  
  29.   Desplazamiento (ThisForm, 92)
  30.   EstadoControles(ThisForm, .F.)
  31.   BotonesEdicion (ThisForm, .T.)
  32. Catch To loErr
  33.    IF loErr.ErrorNo = 1884
  34.     Messagebox("Este registro esta Repetido.",16,"Dato Repetido")
  35.     ThisForm.txtPosicion.value = mAnterior
  36.    ELSE  
  37.            Messagebox(loErr.Message,48,"Error")
  38.   EndIf
  39. Finally
  40.   ThisForm.Refresh()
  41. EndTry
  42.  
y este es el de cancelar:
Código: Text
  1. TABLEREVERT()
  2.  
  3. IF Bmk <> 0
  4.   GO Bmk
  5. EndIf
  6.  
  7. BAdicion = .F.
  8. BEdicion = .F.
  9.  
  10. Desplazamiento (ThisForm, 92)
  11. EstadoControles(ThisForm, .F.)
  12. BotonesEdicion (ThisForm, .T.)
  13.  
  14. ThisForm.Refresh()
  15.  
Muchas gracias por tu atención.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Scroll Con Form Y Campo Unico
« Respuesta #7 en: Viernes 14 de Octubre de 2005, 16:59 »
0
ok que te parece si le decimos al programa que se un poco mas especifico al decirte los errores para entenderlo un poco mas

En el prg inicial (main) coloca esta linea
Código: Text
  1. ON ERROR DO fallos WITH  ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
  2.  

y te creas un prg con el nombre fallos y le colocas estas lineas


 
Código: Text
  1. DO CASE
  2.        
  3.          
  4.  
  5.       CASE meRror=39
  6.     WAIT WINDOW 'Error en la linea : ' + UPPER(meSs1) + CHR(13) +;  
  7.                 'Encontrado en     : ' + UPPER(mprog) + CHR(13) +;
  8.                 'Archivo           : ' + ALIAS()      + CHR(13) +;
  9.                 'Nota : Existen caracteres como "***.**"' AT 1,1 NOWAIT
  10.  
  11.       OTHERWISE
  12.            j = MESSAGEBOX("El sistema causó el siguiente error :"         + CHR(13) +;
  13.                   "Número :"     + PADR(ALLTRIM(STR(meRror)),40)  + CHR(13) +;
  14.                    "Tipo       :" + PADR(meSs,40)                  + CHR(13) +;
  15.                   "Código   :"   + PADR(mess1,40)           + CHR(13) +;
  16.                   "Línea      :" + PADR(ALLTRIM(STR(mlIneno)),40) + CHR(13) +;
  17.                   "Método  :"    + PADR(mpRog,40),64,"")
  18. ENDCASE
  19.  
  20.  
  21.  


Luego ejecutas el pograma desde el prg inicio y realizas lo que te está dando problema.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Scroll Con Form Y Campo Unico
« Respuesta #8 en: Viernes 14 de Octubre de 2005, 18:13 »
0
Que tal Juez!

gracias por tu respuesta, ese modulo ya lo tenia, y si me saca el error que el indice esta repetido (en realidad dice que ha sido violado)  en realidad lo que yo quiero es que antes de guardar me diga que ya esta repetido, en otro formulario tengo casi lo mismo, y cuando llega a la linea TABLEUPDATE() Try intercepta el error y ahí pongo mi mensage, pero en este espera hasta que se mueva, ya no se que hacer...  :(
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos