Añadir Nuevos campos de tabla en tiempo de ejecucion

1,370 views
Skip to first unread message

Misael Rocha P

unread,
Jul 8, 2013, 8:08:17 PM7/8/13
to publice...@googlegroups.com
Que tal buenas tardes;
 
Resulta que hice nuevas modificaciones a una tabla principal y la manera de hacerlo practico es reemplazar la tabla verdad? desafortunadamente y lamentablemente esta en uso y tiene mas registros de los que yo tengo, entonces lo que debería de hacer es instalar el vfp y hacer las modificaciones a las tablas añadiendo manualmente los nuevos campos, pero y si no quiero hacerlo asi, existe alguna manera que pueda implementar para añadir estos nuevos campos sin afectar la cantidad de registros???
 
Saludos y muchas gracias por su ayuda!!!
 

Misael Rocha P

unread,
Jul 8, 2013, 8:11:34 PM7/8/13
to publice...@googlegroups.com
creo que ya me respondi jejejeje pero de todas formas pido su opinión:
esta es la manera?
 
 ALTER TABLE (tabla) ADD COLUMN NuevoCampo X(NN)
 ALTER TABLE dbf_cobranza add column autorizo l(1) es correcto???
 
Saludos y gracias
 
 

Ricardo Pina

unread,
Jul 8, 2013, 8:40:27 PM7/8/13
to Grupo VFP
Esa es la forma, pero tenes que tener en cuenta que para modificar estructuras tenes que tenes acceso exclusivo.
 
use dbf_cobranza excl
if vartype("dbf_cobranza.autorizo")="U"
ALTER TABLE dbf_cobranza add column autorizo L
endif
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Misael Rocha P

unread,
Jul 8, 2013, 8:54:13 PM7/8/13
to publice...@googlegroups.com
Oh! Muchas Gracias Ricardo, buenas tardes,

entonces quiere decir que si la expresión de datos dbf_cobranza.autorizo no existe entonces la añade, por asi decirlo verdad?

 

me imagino que vartype() tiene mucha funcionalidad en muchos casos pero aprovechando de tu amabilidad nada mas para darme una idea del tamaño de esta función, en que otros casos mas le puedo dar utilidad??

Muchas Gracias nuevamente...

 

Saludos

Fidel Charny

unread,
Jul 9, 2013, 11:17:54 AM7/9/13
to publice...@googlegroups.com
Por ejemplo, cuando pasas parámetros a una función puedes analizar el tipo de variable que se pasa y decidir un curso de acción:
GetInforme(lcPar1,lnPar2,llPar3,loForm)

Function GetInforme(xcpar1,xnPar2,xlPar3,xoForm)
if Vartype(xcPar1)#"C"
     xcPar1=""
endif
if Vartype(xnPar2)#"N"
    xnpar2=0
endif
if Vartype(xLpar3)#"L"
     xLpar3=.F.
ENDIF
if vartype(xoForm)#"O"
       xoForm=null
endif

Con esto, puedes llamar a la función con GetInforme(), donde los parámetros se definen por defecto.
La única complicación que tienes en este tema, es saber si se pasa un Array.
También te permite, en algunos casos, utilizar un solo parámetro, donde la respuesta dependerá del tipo de parámetro. Por ejemplo, en un Form secundario del que necesitas algún valor
*INIT del form
LPARAMETERS xntipo_oform
Addproperty(thisform,"frmCall",null)
do case
       case vartype(xntipo_oform)="O"
             thisform.frmCall=xnTipo_oform
       case vartype(xntipo_oform)="N"
            if between(xnTipo_oform,0,1)
                   thisform.WindowType=xnTipo_oform
            endif
endcase
En este caso, el valor del parámetro puede ser la referencia del objeto form convocante (o de un objeto del form convocante) o puede ser la indicación que el formulario se vuelva Modal (1) ó Modeless (0). 
Como está escrito, si se pasa cualquier otro valor, no hará nada.
Vartype() y en su caso ISNULL(), te permiten determinar si un procedimiento llega a un valor requerido.
Para el ejemplo del form, suponiendo que se pasa como referencia de objeto un TExtbox del formulario convocante que tiene que asumir un valor numérico:
* UNLOAD del form secundario
if !ISNULL(thisform.FrmCall)
      thisform.frmCall.Value=nValor && valor determinado por el proceso
                                                  && Si se convoca al como: DO FORM secundario with thisform.Text3
                                                  && Thisform.FrmCall será la referencia al .TExt3 del convocante
endif
if thisform.Windowtype=1
       Return nValor             && funciona únicamente si se convoca al secundario como 
                                        && do form secundario with 1 to lnValor
endif

Además de los parámetros puede que la necesites emplear si utilizas Arrays. Los Array pueden contener cualquier tipo de valor. A diferencia de un cursor, no tiene una estructura de campo, de modo que los datos pueden ser de diversos tipos.
for i=1 to alen(gaArray,1)
      For j=1 to alen(gaArray,2)
          do case
             case vartype(gaArray[i,j])="C"
                 Messagebox("Character")
             case vartype(gaArray[i,j]=="N"
                 Messagebox("Numérico")
            case vartype(gaArray[i,j])="L"
                 Messagebox("Lógico")
            case vartype(gaARray[i,j]="D"
                 mESSAGEBOX("Fecha")
            case vartype(gaArray[i.j]="T"
                 Messagebox("Fecha Hora")
            case vartype(gaARray[i,j]="O"
                Messagebox("Objeto")
&&            case ETc
       ENDCASE
    NEXT
NEXT

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Jul 9, 2013, 1:53:41 PM7/9/13
to publice...@googlegroups.com
Hola otra cosas que debes tener en cuentas, al agregar el campo nuevo que valor por default debe tener dicho campo, porque si no tendrás problemas por ahí. mas si usas el INSERT INTO


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com

Misael Rocha P

unread,
Jul 10, 2013, 3:13:28 AM7/10/13
to publice...@googlegroups.com
Hola a Todos
 
Fidel, muchas gracias muy explicativo y comprendo, muy complejo pero entiendo...
MALKASOFT, si claro es importante tener en cuenta el valor por default, gracias por la observación
 
Buenas Noches de Madrugada a todos...
Reply all
Reply to author
Forward
0 new messages