Programación General > Visual FoxPro

 Scroll Con Form Y Campo Unico

<< < (2/2)

arielb:
ok widark podes poner el codigo aki que usas al momento de cancelar o guardar?

Widark:
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 ---PARAMETERS Carpeta as String, TablaCampos as String, TablaDigitacion as StringPublic loErr AS ExceptionLocal loSuccess as Boolean, loTop as IntegerLOCAL loObjeto as String, loOrigenDatos as String, loControl as String, loPrefijo as String &&Prefijo del nombre del ControlLOCAL loTablaAbierta as String &&La tabla que se abrira para el combo Try  SET MULTILOCKS ON     USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + &#34;&#092;&#34; + TablaCampos IN 0  loSuccess = CURSORSETPROP(&#34;Buffering&#34;,5,TablaCampos)  IF loSuccess = .T.    MESSAGEBOX(&#34;Se ha conectado a la Tabla &#34; + TablaCampos + &#34; con exito.&#34;,64,&#34;Enlace a Datos&#34;)    SET ORDER TO Posicion    COPY TO Array loCamposFijos FIELDS nomcampo,etiqueta,tipcontrol,relacion,requerido FOR Aparece = .T.  EndIf  loSuccess = .F.  USE FULLPATH(CURDIR()) + ALLTRIM(Carpeta) + &#34;&#092;&#34; + TablaDigitacion IN 0  loSuccess = CURSORSETPROP(&#34;Buffering&#34;,5)  IF loSuccess = .T.    MESSAGEBOX(&#34;Se ha conectado a la Tabla &#34; + TablaDigitacion + &#34; con exito.&#34;,64,&#34;Enlace a Datos&#34;)     SELECT 2    loTop = 38    FOR I = 1 TO ALEN(loCamposFijos,1)      WAIT WINDOW &#34;Creando los campos para la digitación.&#34; NoWait      AdicionControles(ThisForm, 'lbl' + ALLTRIM(loCamposFijos(I,1)), &#34;Label&#34;, loTop, 5,&#59;        FSIZE(ALLTRIM(loCamposFijos(I,1))) + 3, ALLTRIM(loCamposFijos(I,2)))       IF loCamposFijos(I,3) = &#34;Normal&#34;        IF TYPE(FIELD(ALLTRIM(loCamposFijos(I,1)))) = &#34;L&#34;          loControl = &#34;CheckBox&#34;          loPrefijo = &#34;chk&#34;          ELSE          IF FSIZE(ALLTRIM(loCamposFijos(I,1))) &#60; 49            loControl = &#34;TextBox&#34;            loPrefijo = &#34;txt&#34;            ELSE              loControl = &#34;EditBox&#34;            loPrefijo = &#34;edt&#34;          EndIf        EndIf        ELSE        loControl = &#34;ComboBox&#34;        loPrefijo = &#34;cmb&#34;      EndIf      loObjeto      = loPrefijo + ALLTRIM(loCamposFijos(I,1))      loOrigenDatos = '&#34;' + TablaDigitacion + &#34;.&#34; + ALLTRIM(loCamposFijos(I,1)) + '&#34;'      AdicionControles(ThisForm, loObjeto, loControl, loTop, 99,&#59;              FSIZE(ALLTRIM(loCamposFijos(I,1))) + 3, &#34;&#34;)      ThisForm.&loObjeto..ControlSource = &loOrigenDatos      ThisForm.&loObjeto..Tag = IIF(loCamposFijos(I,5) = .F.,&#34;N&#34;,&#34;S&#34;)      IF loControl = &#34;ComboBox&#34;        loTablaAbierta = ALLTRIM(loCamposFijos(I,4))        IF NOT USED(loTablaAbierta)          USE FULLPATH(CURDIR()) + &#34;Globales&#092;&#34; + loTablaAbierta IN 0        EndIf        loOrigenDatos = loTablaAbierta + &#34;.descripcio,codigo&#34;        ThisForm.&loObjeto..ColumnWidths = &#34;190,50&#34;        ThisForm.&loObjeto..BoundColumn  = 2        ThisForm.&loObjeto..ColumnCount  = 2        ThisForm.&loObjeto..FirstElement = 1        ThisForm.&loObjeto..RowSourceType = 6        ThisForm.&loObjeto..RowSource    = loOrigenDatos      EndIf       loTop = loTop + ThisForm.&loObjeto..Height + 5    Next  ThisForm.txtColor1.ControlSource = &#34;Daniel.color&#34;  EndIf  SELECT &TablaDigitacion  EstadoControles(ThisForm, .F.)  Desplazamiento (ThisForm, 92)  Catch To loErr  MESSAGEBOX(loErr.Message,48,&#34;Error&#34;)EndTry Este es con el que guardo:
--- Código: Text ---Local strClase as String, intCo as Integer, loErr as Exception Try  FOR intCo = 1 TO ThisForm.ControlCount    IF INLIST(ThisForm.Controls(intCo).BaseClass,&#34;Textbox&#34;,&#34;Editbox&#34;,&#34;Combobox&#34;)      IF ThisForm.Controls(intCo).Tag = &#34;S&#34; AND ALLTRIM(ThisForm.Controls(intCo).Value) = &#34;&#34;        Messagebox(&#34;Debe llenar &#34; + ThisForm.Controls(intCo - 1).Caption + &#34; para guardar.&#34;,48,&#34;Faltan Datos&#34;)        Cancel      EndIf      ELSE        IF ThisForm.Controls(intCo).BaseClass = &#34;Checkbox&#34;          IF ThisForm.Controls(intCo).Tag = &#34;S&#34; AND ThisForm.Controls(intCo).Value = .F.          Messagebox(&#34;Debe llenar &#34; + ThisForm.Controls(intCo - 1).Caption + &#34; para guardar.&#34;,48,&#34;Faltan Datos&#34;)          Cancel        EndIf      EndIf    EndIf      Next   TABLEUPDATE()   IF BAdicion    GO BOTTOM  EndIf   BAdicion = .F.  BEdicion = .F.   Desplazamiento (ThisForm, 92)  EstadoControles(ThisForm, .F.)  BotonesEdicion (ThisForm, .T.)Catch To loErr   IF loErr.ErrorNo = 1884    Messagebox(&#34;Este registro esta Repetido.&#34;,16,&#34;Dato Repetido&#34;)    ThisForm.txtPosicion.value = mAnterior   ELSE             Messagebox(loErr.Message,48,&#34;Error&#34;)  EndIfFinally  ThisForm.Refresh()EndTry y este es el de cancelar:
--- Código: Text ---TABLEREVERT() IF Bmk &#60;&#62; 0  GO BmkEndIf BAdicion = .F.BEdicion = .F. Desplazamiento (ThisForm, 92)EstadoControles(ThisForm, .F.)BotonesEdicion (ThisForm, .T.) ThisForm.Refresh() Muchas gracias por tu atención.

arielb:
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 ---ON ERROR DO fallos WITH  ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( ) 
y te creas un prg con el nombre fallos y le colocas estas lineas


 
--- Código: Text ---DO CASE                       CASE meRror=39    WAIT WINDOW 'Error en la linea : ' + UPPER(meSs1) + CHR(13) +;                  'Encontrado en     : ' + UPPER(mprog) + CHR(13) +;                'Archivo           : ' + ALIAS()      + CHR(13) +;                'Nota : Existen caracteres como &#34;***.**&#34;' AT 1,1 NOWAIT        OTHERWISE           j = MESSAGEBOX(&#34;El sistema causó el siguiente error :&#34;         + CHR(13) +;                  &#34;Número :&#34;     + PADR(ALLTRIM(STR(meRror)),40)  + CHR(13) +;                   &#34;Tipo       :&#34; + PADR(meSs,40)                  + CHR(13) +;                  &#34;Código   :&#34;   + PADR(mess1,40)           + CHR(13) +;                   &#34;Línea      :&#34; + PADR(ALLTRIM(STR(mlIneno)),40) + CHR(13) +;                  &#34;Método  :&#34;    + PADR(mpRog,40),64,&#34;&#34;)ENDCASE   

Luego ejecutas el pograma desde el prg inicio y realizas lo que te está dando problema.

Widark:
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...  :(

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa