1

Konu: cursor'e kolon ekleme

Arkadaşlar,
READWRITE ile oluşturulmuş CURSOR'e kolon eklenebiliyor mu ?
ALTER TABLE komutu sadece DBF için mi kullanılabiliyor.

2

Re: cursor'e kolon ekleme

Özcan ;

Eğer cursor de yeni bir field 'a ihtiyacın varsa, cursor ü oluşturmadan önce filed ı eklesen daha kolay olmaz mı? Yada soruyu biraz açarsan ( neden ? - nasıl ) farklı fikirler çıkartılabilir.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: cursor'e kolon ekleme

4-5 tablodan Select-SQL ile derleyip oluşturduğum cursor'daki çok sayıda field'lara bir kaç field daha eklemek istemiştim.

4 Son düzenleyen, konuka (24.11.2009 16:33:05)

Re: cursor'e kolon ekleme

eklenebiliniyor, ben bu tekniği çok kullanıyorum. gride cursor oluştururken .
aşağıda aylara veya çetreklere göre bir raporun cursor oluşturma örneği var....

Visual Fox Pro
WITH ThisForm

.gkat.RecordSource=""
CREATE CURSOR kat(ne C(25), toplkg N (10))
M.Xsene=.spsene2.Value
.spsene2.Value=MAX(.spsene1.Value,.spsene2.Value)
.spsene1.Value=MIN(.spsene1.Value,M.Xsene)
 
IF .op.Value=2
  IF .spay1.Value%3=0
    .spay1.Value=.spay1.Value-2
  ELSE
    .spay1.Value=INT(.spay1.Value/3)*3+1
  ENDI
  IF !.spay2.Value%3=0
    .spay2.Value=MIN(INT(.spay2.Value/3)*3+3,12)
  ENDI
ENDI
 
M.Xsene=.spsene1.Value
M.Xay=.spay1.Value
DO WHIL M.Xsene<=.spsene2.Value
  DO CASE
  CASE M.Xsene=.spsene2.Value AND M.Xay>.spay2.Value
    EXIT
  CASE .op.Value=1
    M.Xekle="A"+PADL(RIGH(STR(M.Xsene,4,0),2),2,"0")+"_"+PADL(ALLTRIM(STR(M.Xay,2,0)),2,"0")
    ALTER TABLE kat ADD COLUMN &Xekle N(8)
  CASE .op.Value=2
    IF (M.Xay+2)%3=0
      M.Xekle="C"+PADL(RIGH(STR(M.Xsene,4,0),2),2,"0")+"_"+ALLTRIM(STR((M.Xay+2)/3,2,0))
      ALTER TABLE kat ADD COLUMN &Xekle N(8)
    ENDI
  ENDC
  M.Xay=M.Xay+1
  IF M.Xay>12
    M.Xay=1
    M.Xsene=M.Xsene+1
  ENDI
ENDD
ENDW
 
WITH ThisForm.gKat
.ReadOnly=DOGRU
.GridLineColor=RGB(192,192,192)
.ColumnCount=FCOUNT("kat")
.RecordSource="kat"
.ReadOnly=DOGRU
.SetAll("FontSize",9,"Column")
.SetAll("Width",60+IIF(This.op.Value=2,10,0),"Column")
 
.SetAll("FontName","Tahoma","Column")
.SetAll("ForeColor",RGB(0,0,64),"Column")
.SetAll("DynamicFontBold","IIF(kat.ne='TOPL',.t.,.f.)","Column")
.SetAll("InputMask","99 999 999","Column")
 
.Column1.InputMask=""
.Column1.FontSize=8
.Column1.Width=110
.Column1.ForeColor=RGB(255,255,0)
.Column1.BackColor=RGB(128,128,255)
 
.Column2.Width=80
.Column2.ForeColor=RGB(255,255,128)
.Column2.BackColor=RGB(0,0,128)
 
FOR Xi=3 TO .ColumnCount
  .Columns[Xi].Header1.Caption=This.Ayap(FIELD(Xi,"kat"))
  .Columns[Xi].Header1.FontName="Tahoma"
  .Columns[Xi].Header1.Alignment=2
  .Columns[Xi].BackColor=RGB(255,255,210)
ENDF
ENDWITH
 
ENDS
VFP9 SP2

5

Re: cursor'e kolon ekleme

Ali Abi, verdiğin örnekteki gibi sadece 2 satırı bile command prompt'ta çalıştırsam oluyor.

Visual Fox Pro
CREATE CURSOR kat(ne C(25), toplkg N (10))

ALTER TABLE kat ADD COLUMN SAYI N(8)


CREATE CURSOR ile oluşturulmuş cursor için hata vermiyor ama SELECT... INTO CURSOR xxx READWRITE ile oluşturduğum CURSOR için ALTER TABLE satırına gelindiğinde 'invalid operation for the cursor' hatası veriyor. Başka bir küçük örnek yaptım onda READWRITE olan cursorde hata vermedi. Cursor ile ilgili beğenmediği bir şey var galiba.

6

Re: cursor'e kolon ekleme

Bir yerde okudum.  10 karakterden uzun field adı varsa bu hatayı veriyormuş.

7

Re: cursor'e kolon ekleme

ALTER TABLE ALIAS("kat") ADD COLUMN sayi n(8)
olacak

8

Re: cursor'e kolon ekleme

Ozcan'in soyledigi dogru. Eger 10 karakterden uzun oland alan adin var ise bu hatayi alacaksin. Cozumu Ugur'un dedigi gibi bastan eklemek:

Visual Fox Pro
select *, cast( 0 as int ) as Sayi, {} as Tarih, cast('' as m) as Notlar from (_samples+'data\customer') into cursor ornek readwrite

9 Son düzenleyen, konuka (25.11.2009 18:05:58)

Re: cursor'e kolon ekleme

cetinbasoz yazdı:

Cozumu Ugur'un dedigi gibi bastan eklemek:


Bu metodu özellikle değişken kolon sayısından dolayı kullanıyoruz.
Baştan yazmak için SQL kodunu bir döngü ile üretip makro substituon & ile çalıştırmak olacak, bir kod karalayayım:

Visual Fox Pro
m.xkomut="SELECT "

FOR Xi=1 TO 12
  m.xkomut=m.xkomut+"CAST( 0 AS INT) AS ay"+ALLT(STR(xi))+","
ENDF
m.xkomut=m.xkomut+"CAST( 0 AS INT) AS sonalan FROM birdosya INTO CURS cursdene"
&xkomut
 
ALTER TABLE cursdene ADD COLUMN Xekle N(8)
BROWSE


gibi :] runtime yapmadım, biraz uğraşılırsa çalışır galiba....
vfp yüklü yerde kodu denedim çalışıyor. (biz bendeki bir dbf
cursor select ile seçilse de alter table çalışıyor, aşağıda kodu:

Visual Fox Pro
SELECT * FROM biz INTO CURSOR xxx readwr

ALTER TABLE xxx ADD COLUMN Xekle N(8)
BROWSE
VFP9 SP2

10 Son düzenleyen, cetinbasoz (25.11.2009 18:22:38)

Re: cursor'e kolon ekleme

Merhaba:) Benim soyledigim yanlis anlasildi galiba ozur dilerim. Alter table cok guzel calisiyor ancak cursor'de 10 karakterden uzun alan adi var ise sadece bir kez "alter table" kullanilabiliyor, ikincisinde hata veriyor. Soyle bir cozum uzun alan adinda bile oluyor (senin kodundan modifiye:)

Visual Fox Pro
Local xi

Local Array laAlan[13,4]
For xi=1 To 12
    laAlan[m.xi,1] = "ay"+Ltrim(Str(m.xi))
    laAlan[m.xi,2] = 'I'
    laAlan[m.xi,3] = 4
    laAlan[m.xi,4] = 0
Endfor
laAlan[13,1] = "sonalan"
laAlan[13,2] = 'I'
laAlan[13,3] = 4
laAlan[13,4] = 0
 
Create Cursor tmp From Array laAlan
Append Blank
 
Select cus.Cust_id, cus.Company, tmp.* ;
    FROM (_samples+'Data\Customer') cus, tmp ;
    INTO Cursor cursorDene ;
    readwrite
 
Browse


Probleme ornek (X1 sorunsuz, X2de "SirketAcikAdi" sorun yaratiyor):

Visual Fox Pro
SELECT cust_id, Company FROM (_samples+'data\customer') INTO CURSOR x1 readwrite

SELECT cust_id, Company as SirketAcikAdi FROM (_samples+'data\customer') INTO CURSOR x2 readwrite
 
ALTER table x1 ;
    ADD COLUMN f1 i ;
    ADD column f2 i
ALTER table x1 ADD COLUMN f3 i
 
ALTER table x2 ADD COLUMN f1 i

11

Re: cursor'e kolon ekleme

Sevgili Özcan;

Kodunu görünce, öyle tatlı gülümsedim ki smile

Önceden dinamik SQL oluşturabilmek için oldukça zorlanırdım:

Hangi tabloları sorgulamam gerekiyor; WHERE kısmında hangi koşulu/koşulları kullanıcam, Hangi tablolar  JOIN yapılıcak, JOIN seçimleri neler olucak ...

Bu işi bitirmek hep hayalimde olan bir şeydi ancak nasıl ve ne şekilde yapılacağına bir fikrim yoktu ... Ta ki Textmerge ile tanışana kadar...

Çetin Üstat textmerge ü ilk gösterdiğinde, tekrar tekrar yazdığım kodlara ve  çektiğim eziyetlere ağlayasım gelmişti. Sonrasında TEXTMERGE bir numaralı vazgeçilmez aracım oldu. Kendisine burdan herzamanki gibi sonsuz teşekkürlerimi iletiyorum.

Kullandığım kod örneği aşağıda; umarım biraz fikir verebilir:


Visual Fox Pro
*!*    Author    : Ugur YILMAZ

*!*    Todo    : INDEX Optimizasyonu....
 
PARAMETERS tcHesapType, tcMusteriType
 
LOCAL ;
    lcHesapType, lcMusteriType, ;
    lcAdetCur, lcAdetType, ;
    lcSipAtlCur, lcSipAtlType, ;
    lcSipMusCur, lcSipMusType, ;
    lcSqlText, lcTempMyDeg, lnStart , lnStop
 
lnStart = Seconds()
WAIT WINDOW "Veritabanları ilişkilendiriliyor. Lütfen bekleyiniz..." + CHR(13) + ;
            "Bu işlem  verilerin büyüklüğüne göre bir kaç dakika sürebilir." NOWAIT
 
 
*!* 1 -    Tbl ön kullanım dosyaları yoksa en önce bu dosyaları oluştur.
IF !File("TbAmodel.DBF") OR !File("TbAdet.DBF") OR !File("TbSipAtl.DBF") OR !File("TbSipMus.DBF")
    DO TbOlustur
ENDIF
 
DO CASE
    CASE Pcount() = 2 AND ( Type("tcHesapType") # "C" OR Type("tcMusteriType") # "C")
        MessageBox("Parametre Hatası -> SQLMain, Hesap tipi.")
    CASE Pcount() = 2 AND ( Type("tcHesapType") = "C" OR Type("tcMusteriType") = "C")
        IF tcHesapType = 'Y' && Yeni Tablo oluştur.
            DO TbOlustur && Önce tabloları oluştur
            DO TbKullan  && Sonra tabloları kullan
        ENDIF
 
        IF tcHesapType = 'E'  && Hazırlanmış tabloları kullan.
            DO TbKullan 
        ENDIF
ENDCASE
 
DO GridSube 
 
lnStop = Seconds()
 
WAIT WINDOW "            Başlama Zamanı : " + TimeDetail(lnStart) + CHR(13) + ;
            "                  Bitiş Zamanı : " + TimeDetail(lnStop) + CHR(13) + ;
            "                              Süre : " + TimeDetail(lnStop - lnStart) NOWAIT
 
RETURN
 
PROCEDURE TbOlustur
 
    IF Pcount() = 0 && Parametre yok, 'O' Özelde farklı tüm firmalar;  'Y'eni data hazırla
        lcHesapType = 'Y' && YeniData
        lcMusteriType = 'O' && Müşteri
    ENDIF
 
    LOCAL ARRAY laMaxSubeNo[1,1]
    SELECT Count(Hesno) FROM Sube INTO ARRAY laMaxSubeNo
 
    LOCAL ARRAY laSubeler[laMaxSubeNo,1]
    SELECT Hesno FROM Sube INTO ARRAY laSubeler
 
    lcSipAtlCur  = "TbAdet.DBF"
    lcSipAtlType = "TABLE"
    SET TEXTMERGE TO MemVar lcSqlText NOSHOW
    SET TEXTMERGE ON
\SELECT ;
\    Sube, ;
\    ModelNo, ;
\    Sum(Adet) As Adet, ;
\    Sum(CikanAdet) As CikanAdet,;
\    Sum(Miktar) As Miktar, ;
\    Sum(CikanMikt) As CikanMikt ;
\FROM ;
\     Adetli;
\ WHERE  !Adetli.ModelNo == '' AND ( Adet > 0 OR SATKIME NOT IN(SELECT HesAdi FROM Hesplan WHERE Kod = '<<m.lcMusteriType>>' )) ;
\ GROUP BY Modelno, Sube ;
\ ORDER BY Modelno ;
\ INTO <<m.lcSipAtlType>> <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
\    IF File('<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>') && CDX File Sil
\        DELETE FILE '<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>'
\    ENDIF
\
\Index On ModelNo Tag ModelNo Of <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
    lcSipAtlCur  = "TbSipAtl.DBF"
    lcSipAtlType = "TABLE"
\SELECT ;
\    Sipislb.Kod AS ModelNo, ;
\    SUM(Sipislb.adet) AS AtSipAdet, ;
\    SUM(Sipislb.hadet) AS AtHazAdet, ;
\    (SUM(Sipislb.adet) - SUM(Sipislb.hadet)) AS AtKaladet ;
\FROM ;
\    Sipislb ;
\WHERE !(Sipislb.Kod == '') ;
\GROUP BY Sipislb.kod ;
\ORDER BY Sipislb.kod ;
\ INTO <<m.lcSipAtlType>> <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
\    IF File('<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>') && CDX File Sil
\        DELETE FILE '<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>'
\    ENDIF
\
\Index On ModelNo Tag ModelNo Of <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
    lcSipAtlCur  = "TbSipMus.DBF"
    lcSipAtlType = "TABLE"
\SELECT ;
\    Sipisl.Kod AS ModelNo, ;
\    SUM(Sipisl.adet) AS MuSipAdet, ;
\    SUM(Sipisl.hadet) AS MuHazAdet, ;
\    (SUM(Sipisl.adet) - SUM(Sipisl.hadet)) AS MuKaladet ;
\FROM ;
\    Sipisl ;
\WHERE !( Kod == '') ;
\GROUP BY Sipisl.kod ;
\ORDER BY Sipisl.kod ;
\ INTO <<m.lcSipAtlType>> <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
\    IF File('<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>') && CDX File Sil
\        DELETE FILE '<<(Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4))+".CDX">>'
\    ENDIF
\
\Index On ModelNo Tag ModelNo Of <<Substr(m.lcSipAtlCur,1,Len(m.lcSipAtlCur)-4)>>
\
*!*    Bolum = U_PirModel -> SADE, Monte vs.
*!*    Aktifmi = U_PirDevam -> Dinleniyor, Bloke, Çalışılmıyor vs.
\SELECT ;
\    Amodel.Kod AS ModelNo, ;
\    Substr(Amodel.OzKod1,1,10) AS Fabrika, ;
\    Substr(Amodel.OzKod2,1,17) AS TakimNo, ;
\    Substr(Amodel.OzKod3,1,15) AS TakimGrup, ;
\    Cast(Nvl(Amodel.KrAdet,0) As Int) AS TakimAdet, ;
\    Cast(0 As Int) AS TakAdetEl, ;
\    Space(10) AS TakGrupEl, ;
\      Amodel.Kapi1  AS Marka, ;
\      Amodel.Kapi2  AS MarkaNot, ;
\      Substr(Amodel.Kapi3,1,10) AS Bolum, ;
\    Substr(Amodel.Kapi4,1,10) AS Aktifmi, ;
\      Amodel.miktar     AS Miktar, ;
\    Amodel.Cikisc     AS Cikisc, ;
\    Amodel.IscBirim AS IscBirim, ;
\    Amodel.Turkod     AS Turkod, ;
\      Amodel.Adttur     AS Adttur, ;
\    Amodel.Cinkod     AS Cinkod, ;
\    Amodel.SonTarih    AS SonTarih, ;
\    Amodel.OzKod5    AS Orjin, ;
\    Amodel.Hesno    AS Uretici, ;
\      Cast(Nvl(TbSipAtl.AtSipAdet,0) As Int) AS AtSipAdet,;
\      Cast(Nvl(TbSipAtl.AtHazAdet,0) As Int) AS AtHazAdet, ;
\      Cast(Nvl(TbSipAtl.AtKalAdet,0) As Int) AS AtKalAdet, ;
\      Cast(Nvl(TbSipMus.MuSipAdet,0) As Int) AS MuSipAdet, ;
\      Cast(Nvl(TbSipMus.MuHazAdet,0) As Int) AS MuHazAdet, ;
\      Cast(Nvl(TbSipMus.MuKalAdet,0) As Int) AS MuKalAdet, ;
\    Cast(0 As INT) As TopAdet, ;
\    Cast(0 As INT) As TopStAdet, ;
\    Cast(0 As B) As TopMik, ;
\    Cast(0 As B) As TopStMik, ;
FOR lni = 0 TO laMaxSubeNo[1,1] && Üstad buraya dimi ?!
    IF lni # 0
        lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
    ELSE
        lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
    ENDIF
\    Cast(Nvl(Crs<<m.lcTempMyDeg>>.Adet,0)          As Int)      As Sb<<m.lcTempMyDeg>>Adet, ;
\    Cast(Nvl(Crs<<m.lcTempMyDeg>>.CikanAdet,0)     As Int)      As Sb<<m.lcTempMyDeg>>StAdet, ;
\    Cast(Nvl(Crs<<m.lcTempMyDeg>>.Miktar,0.000)    As Currency) As Sb<<m.lcTempMyDeg>>Mik, ;
\    Cast(Nvl(Crs<<m.lcTempMyDeg>>.CikanMikt,0.000) As Currency) As Sb<<m.lcTempMyDeg>>StMik, ;
ENDFOR
\    Cast(0 AS Int) AS TempFlag ;
\ FROM ;
\     Amodel ;
\    LEFT JOIN TbSipAtl ON  Amodel.kod = TbSipAtl.ModelNo ;
\    LEFT JOIN TbSipMus ON  Amodel.kod = TbSipMus.ModelNo ;
**
FOR lni = 0 TO laMaxSubeNo[1,1] && Bu kadar mı?! ?ok
        IF lni # 0
            lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
        ELSE
            lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
        ENDIF
\    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
\                  From tbAdet ;
\                Where Sube = <<IIF(m.lni > 0, laSubeler[m.lni],0)>>) Crs<<m.lcTempMyDeg>> ;
\       ON Amodel.Kod == Crs<<m.lcTempMyDeg>>.ModelNo ;
ENDFOR
\ WHERE !(Amodel.Kod == '') ;
\ ORDER BY Amodel.kod ;
\ INTO Table TbAmodel
\
\    IF File('TbAmodel.Cdx') && CDX File Sil
\        DELETE FILE 'TbAmodel.Cdx'
\    ENDIF
\
*!*    Alt Kısım Kodun kısaltılmış halidir. Çetin Başöz uyarı smile
\ Update TbAmodel ;
\    SET ;
\        TopAdet     =
    FOR lni = 0 TO laMaxSubeNo[1,1]
        IF lni # 0
            lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
        ELSE
            lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
        ENDIF
\\ Sb<<m.lcTempMyDeg>>Adet
        IF lni # laMaxSubeNo[1,1]
\\ +
        ELSE
\\, ;
        ENDIF
    ENDFOR
\        TopStAdet     =
    FOR lni = 0 TO laMaxSubeNo[1,1]
        IF lni # 0
            lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
        ELSE
            lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
        ENDIF
\\ Sb<<m.lcTempMyDeg>>StAdet
        IF lni # laMaxSubeNo[1,1]
\\ +
        ELSE
\\, ;
        ENDIF
    ENDFOR
 
\        TopMik         =
    FOR lni = 0 TO laMaxSubeNo[1,1]
        IF lni # 0
            lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
        ELSE
            lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
        ENDIF
\\ Sb<<m.lcTempMyDeg>>Mik
        IF lni # laMaxSubeNo[1,1]
\\ +
        ELSE
\\, ;
        ENDIF
    ENDFOR
 
\        TopStMik     =
    FOR lni = 0 TO laMaxSubeNo[1,1]
        IF lni # 0
            lcTempMyDeg = Padl(Alltrim(Str(laSubeler[lni],1)),2,"0")
        ELSE
            lcTempMyDeg = Padl(Alltrim(Str(lni,1)),2,"0")
        ENDIF
\\ Sb<<m.lcTempMyDeg>>StMik
        IF lni # laMaxSubeNo[1,1]
\\ +
        ELSE
\\
        ENDIF
    ENDFOR
\
\Index On ModelNo Tag ModelNo Of TbAmodel
\
    SET TEXTMERGE TO
    SET TEXTMERGE OFF
 
    _ClipText = m.lcSqlText
 
Execscript(m.lcSqlText)
 
=CloseNonSelectedFiles("Tb",Set("Datasession"))
 
ENDPROC
 
PROCEDURE TbKullan
 
    SELECT *, (Addbs(ogU.PathResimSadeAdet)+Alltrim(ModelNo)+".JPG") As EkResim ;
        FROM TbAmodel ;
        Order By ModelNo ;
        INTO CURSOR CrsTbAmodel READWRITE
 
    INDEX On ModelNo TO Sys(2015)
 
ENDPROC
 
PROCEDURE GridSube
 
    CREATE CURSOR CrsGridSube ;
        (    SiraNo Int AutoInc, ;
            SubeNo INT, ;
            SubeAdi C(25),  ;
            Durum C(10), ;
            DurumType N(1), ;
            Adet01 INT, ;
            Adet02 INT, ;
            Esit0Flag L, ;
            Farkli0Flag L, ;
            SiraNo2 N(1), ;
            RealFlag L)
 
    INDEX On (Padl(Alltrim(Str(SubeNo)),8,"0") + Padl(Alltrim(Str(SiraNo)),8,"0") + Padl(Alltrim(Str(DurumType)),1,"0"))  TAG SiraNo OF GridSube
 
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) VALUES (0,IIF(Ogu.LangID == "TRK","Stokta","In Stock"), 0, IIF(Ogu.LangID == "TRK","Tüm Şubeler Adet","All Branches - Qtty"),.F.,.F.,.F.,0)
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) VALUES (0,IIF(Ogu.LangID == "TRK","Satılan","Sold"),1, IIF(Ogu.LangID == "TRK","Tüm Şubeler Adet","All Branches - Qtty"),.F.,.F.,.F.,1)
 
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) VALUES (0,IIF(Ogu.LangID == "TRK","Stokta","In Stock"),  0, IIF(Ogu.LangID == "TRK","Merkez Şube Adet","Head Office - Qtty"),.F.,.F.,.T.,0)
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) VALUES (0,IIF(Ogu.LangID == "TRK","Satılan","Sold"), 1, IIF(Ogu.LangID == "TRK","Merkez Şube Adet","Head Office - Qtty"),.F.,.F.,.T.,1)
 
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) Select Hesno ,IIF(Ogu.LangID == "TRK","Stokta","In Stock"),  0,  HesAdi,.F.,.F.,.T.,0 FROM Sube
    INSERT INTO CrsGridSube (SubeNo, Durum, DurumType, SubeAdi,Farkli0Flag,Esit0Flag, RealFlag, SiraNo2) Select Hesno ,IIF(Ogu.LangID == "TRK","Satılan","Sold"), 1,  HesAdi,.F.,.F.,.T.,1 FROM Sube
 
    GO TOP IN CrsGridSube
 
ENDPROC

Otomatik oluşan SQL sorgusu ise şu şekilde :

Visual Fox Pro
SELECT ;

    Sube, ;
    ModelNo, ;
    Sum(Adet) As Adet, ;
    Sum(CikanAdet) As CikanAdet,;
    Sum(Miktar) As Miktar, ;
    Sum(CikanMikt) As CikanMikt ;
FROM ;
     Adetli;
WHERE  !Adetli.ModelNo == '' AND ( Adet > 0 OR SATKIME NOT IN(SELECT HesAdi FROM Hesplan WHERE Kod = 'O' )) ;
GROUP BY Modelno, Sube ;
ORDER BY Modelno ;
INTO TABLE TbAdet
 
    IF File('TbAdet.CDX') && CDX File Sil
        DELETE FILE 'TbAdet.CDX'
    ENDIF
 
Index On ModelNo Tag ModelNo Of TbAdet
 
SELECT ;
    Sipislb.Kod AS ModelNo, ;
    SUM(Sipislb.adet) AS AtSipAdet, ;
    SUM(Sipislb.hadet) AS AtHazAdet, ;
    (SUM(Sipislb.adet) - SUM(Sipislb.hadet)) AS AtKaladet ;
FROM ;
    Sipislb ;
WHERE !(Sipislb.Kod == '') ;
GROUP BY Sipislb.kod ;
ORDER BY Sipislb.kod ;
INTO TABLE TbSipAtl
 
    IF File('TbSipAtl.CDX') && CDX File Sil
        DELETE FILE 'TbSipAtl.CDX'
    ENDIF
 
Index On ModelNo Tag ModelNo Of TbSipAtl
 
SELECT ;
    Sipisl.Kod AS ModelNo, ;
    SUM(Sipisl.adet) AS MuSipAdet, ;
    SUM(Sipisl.hadet) AS MuHazAdet, ;
    (SUM(Sipisl.adet) - SUM(Sipisl.hadet)) AS MuKaladet ;
FROM ;
    Sipisl ;
WHERE !( Kod == '') ;
GROUP BY Sipisl.kod ;
ORDER BY Sipisl.kod ;
INTO TABLE TbSipMus
 
    IF File('TbSipMus.CDX') && CDX File Sil
        DELETE FILE 'TbSipMus.CDX'
    ENDIF
 
Index On ModelNo Tag ModelNo Of TbSipMus
 
SELECT ;
    Amodel.Kod AS ModelNo, ;
    Substr(Amodel.OzKod1,1,10) AS Fabrika, ;
    Substr(Amodel.OzKod2,1,17) AS TakimNo, ;
    Substr(Amodel.OzKod3,1,15) AS TakimGrup, ;
    Cast(Nvl(Amodel.KrAdet,0) As Int) AS TakimAdet, ;
    Cast(0 As Int) AS TakAdetEl, ;
    Space(10) AS TakGrupEl, ;
      Amodel.Kapi1  AS Marka, ;
      Amodel.Kapi2  AS MarkaNot, ;
      Substr(Amodel.Kapi3,1,10) AS Bolum, ;
    Substr(Amodel.Kapi4,1,10) AS Aktifmi, ;
      Amodel.miktar     AS Miktar, ;
    Amodel.Cikisc     AS Cikisc, ;
    Amodel.IscBirim AS IscBirim, ;
    Amodel.Turkod     AS Turkod, ;
      Amodel.Adttur     AS Adttur, ;
    Amodel.Cinkod     AS Cinkod, ;
    Amodel.SonTarih    AS SonTarih, ;
    Amodel.OzKod5    AS Orjin, ;
    Amodel.Hesno    AS Uretici, ;
      Cast(Nvl(TbSipAtl.AtSipAdet,0) As Int) AS AtSipAdet,;
      Cast(Nvl(TbSipAtl.AtHazAdet,0) As Int) AS AtHazAdet, ;
      Cast(Nvl(TbSipAtl.AtKalAdet,0) As Int) AS AtKalAdet, ;
      Cast(Nvl(TbSipMus.MuSipAdet,0) As Int) AS MuSipAdet, ;
      Cast(Nvl(TbSipMus.MuHazAdet,0) As Int) AS MuHazAdet, ;
      Cast(Nvl(TbSipMus.MuKalAdet,0) As Int) AS MuKalAdet, ;
    Cast(0 As INT) As TopAdet, ;
    Cast(0 As INT) As TopStAdet, ;
    Cast(0 As B) As TopMik, ;
    Cast(0 As B) As TopStMik, ;
    Cast(Nvl(Crs00.Adet,0)          As Int)      As Sb00Adet, ;
    Cast(Nvl(Crs00.CikanAdet,0)     As Int)      As Sb00StAdet, ;
    Cast(Nvl(Crs00.Miktar,0.000)    As Currency) As Sb00Mik, ;
    Cast(Nvl(Crs00.CikanMikt,0.000) As Currency) As Sb00StMik, ;
    Cast(Nvl(Crs02.Adet,0)          As Int)      As Sb02Adet, ;
    Cast(Nvl(Crs02.CikanAdet,0)     As Int)      As Sb02StAdet, ;
    Cast(Nvl(Crs02.Miktar,0.000)    As Currency) As Sb02Mik, ;
    Cast(Nvl(Crs02.CikanMikt,0.000) As Currency) As Sb02StMik, ;
    Cast(Nvl(Crs03.Adet,0)          As Int)      As Sb03Adet, ;
    Cast(Nvl(Crs03.CikanAdet,0)     As Int)      As Sb03StAdet, ;
    Cast(Nvl(Crs03.Miktar,0.000)    As Currency) As Sb03Mik, ;
    Cast(Nvl(Crs03.CikanMikt,0.000) As Currency) As Sb03StMik, ;
    Cast(Nvl(Crs04.Adet,0)          As Int)      As Sb04Adet, ;
    Cast(Nvl(Crs04.CikanAdet,0)     As Int)      As Sb04StAdet, ;
    Cast(Nvl(Crs04.Miktar,0.000)    As Currency) As Sb04Mik, ;
    Cast(Nvl(Crs04.CikanMikt,0.000) As Currency) As Sb04StMik, ;
    Cast(Nvl(Crs05.Adet,0)          As Int)      As Sb05Adet, ;
    Cast(Nvl(Crs05.CikanAdet,0)     As Int)      As Sb05StAdet, ;
    Cast(Nvl(Crs05.Miktar,0.000)    As Currency) As Sb05Mik, ;
    Cast(Nvl(Crs05.CikanMikt,0.000) As Currency) As Sb05StMik, ;
    Cast(Nvl(Crs06.Adet,0)          As Int)      As Sb06Adet, ;
    Cast(Nvl(Crs06.CikanAdet,0)     As Int)      As Sb06StAdet, ;
    Cast(Nvl(Crs06.Miktar,0.000)    As Currency) As Sb06Mik, ;
    Cast(Nvl(Crs06.CikanMikt,0.000) As Currency) As Sb06StMik, ;
    Cast(Nvl(Crs07.Adet,0)          As Int)      As Sb07Adet, ;
    Cast(Nvl(Crs07.CikanAdet,0)     As Int)      As Sb07StAdet, ;
    Cast(Nvl(Crs07.Miktar,0.000)    As Currency) As Sb07Mik, ;
    Cast(Nvl(Crs07.CikanMikt,0.000) As Currency) As Sb07StMik, ;
    Cast(Nvl(Crs08.Adet,0)          As Int)      As Sb08Adet, ;
    Cast(Nvl(Crs08.CikanAdet,0)     As Int)      As Sb08StAdet, ;
    Cast(Nvl(Crs08.Miktar,0.000)    As Currency) As Sb08Mik, ;
    Cast(Nvl(Crs08.CikanMikt,0.000) As Currency) As Sb08StMik, ;
    Cast(0 AS Int) AS TempFlag ;
FROM ;
     Amodel ;
    LEFT JOIN TbSipAtl ON  Amodel.kod = TbSipAtl.ModelNo ;
    LEFT JOIN TbSipMus ON  Amodel.kod = TbSipMus.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 0) Crs00 ;
       ON Amodel.Kod == Crs00.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 2) Crs02 ;
       ON Amodel.Kod == Crs02.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 3) Crs03 ;
       ON Amodel.Kod == Crs03.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 4) Crs04 ;
       ON Amodel.Kod == Crs04.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 5) Crs05 ;
       ON Amodel.Kod == Crs05.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 6) Crs06 ;
       ON Amodel.Kod == Crs06.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 7) Crs07 ;
       ON Amodel.Kod == Crs07.ModelNo ;
    LEFT JOIN (Select Modelno, Adet, CikanAdet, Miktar, CikanMikt ;
                  From tbAdet ;
                Where Sube = 8) Crs08 ;
       ON Amodel.Kod == Crs08.ModelNo ;
WHERE !(Amodel.Kod == '') ;
ORDER BY Amodel.kod ;
INTO Table TbAmodel
 
    IF File('TbAmodel.Cdx') && CDX File Sil
        DELETE FILE 'TbAmodel.Cdx'
    ENDIF
 
Update TbAmodel ;
    SET ;
        TopAdet     =  Sb00Adet + Sb02Adet + Sb03Adet + Sb04Adet + Sb05Adet + Sb06Adet + Sb07Adet + Sb08Adet, ;
        TopStAdet     =  Sb00StAdet + Sb02StAdet + Sb03StAdet + Sb04StAdet + Sb05StAdet + Sb06StAdet + Sb07StAdet + Sb08StAdet, ;
        TopMik         =  Sb00Mik + Sb02Mik + Sb03Mik + Sb04Mik + Sb05Mik + Sb06Mik + Sb07Mik + Sb08Mik, ;
        TopStMik     =  Sb00StMik + Sb02StMik + Sb03StMik + Sb04StMik + Sb05StMik + Sb06StMik + Sb07StMik + Sb08StMik
 
Index On ModelNo Tag ModelNo Of TbAmodel
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

12

Re: cursor'e kolon ekleme

Hepinize çok teşekkürler.