1

Konu: Runtime sırasında field ekleme değiştirme

Merhabalar.
Programların versiyonları geliştikçe tablelere yeni fieldler eklemek (bunun cevabı forumda var ) ve var olan bazı fieldlerin özelliklerini boyutlarını vs değiştirmem gerekiyor. Bunu yeni exe yi yükledikten sonra boş bir table açıp eski dataları buraya kopyalayarak yaptım birkaç sefer.
Ama bir prg ile mevcut fieldleri kontrol edip bir değişiklik varsa özelliklerini ya da boyutunu değiştirmek belkide o fieldi kaldırıp yeniden oluşturmanın yolu nedir.

USE STOKHAR exclusive
AFIELDS(STOKHARSAHA,"STOKHAR")
IF  ASCAN(STOKHARSAHA,"ISKONTO")=0
ALTER table stokhar add iskonto N(6,2)
endif

Cemal beyin bu kodu ile tableye add yapabiliyorum. field delete  ya da özellik değiştirmek için ne önerebilirsiniz? tabiiki özellik değiştirince mevcut dataların problem çıkaracağı öngörülebilir. Ancak şu aşamada bu sorun etmiyorum.
Teşekkür ederim

2 Son düzenleyen, metin (11.02.2010 14:23:12)

Re: Runtime sırasında field ekleme değiştirme

Visual Fox Pro
if ftype("isim")#"C(20)"

    alter table ....
endif
 
 
func ftype
Lparameters xfname,xfull_type
xfname=Upper(Padr(m.xfname,10,"*"))
Local Array aDummy[1]
Local undefined,xret,onerr,xret3,xret4,xftop,i
onerr=On("error")
On Error undefined=.T.
xftop=Afields(aDummy)
For m.i=1 To m.xftop
    aDummy(m.i,1)=Padr(aDummy(m.i,1),10,"*")
Next
xret=aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),2]
If xfull_type
    xret3=Transform(aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),3])
    If xret="C"
        xret4=""
    Else
        xret4=Transform(aDummy[ASCAN(aDummy,m.xfname,1,m.xftop,1,9),4])
        If xret4="0"
            xret4=""
        Else
            xret3=xret3+","
        Endif
    Endif
Endif
On Error &onerr
If m.undefined
    Return "U"
Else
    If xfull_type And !Inlist(m.xret,"D","T","I","L","Y")
        If m.xret="B"
            Return m.xret+"("+xret4+")"
        Else
            Return m.xret+"("+xret3+xret4+")"
        Endif
    Else
        Return m.xret
    Endif
Endif
Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com