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.
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
fox4um » Veritabanı, Tablo, View, Index ve SQL Syntax » 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.
Ö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.
4-5 tablodan Select-SQL ile derleyip oluşturduğum cursor'daki çok sayıda field'lara bir kaç field daha eklemek istemiştim.
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....
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
Ali Abi, verdiğin örnekteki gibi sadece 2 satırı bile command prompt'ta çalıştırsam oluyor.
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.
Bir yerde okudum. 10 karakterden uzun field adı varsa bu hatayı veriyormuş.
ALTER TABLE ALIAS("kat") ADD COLUMN sayi n(8)
olacak
Ozcan'in soyledigi dogru. Eger 10 karakterden uzun oland alan adin var ise bu hatayi alacaksin. Cozumu Ugur'un dedigi gibi bastan eklemek:
select *, cast( 0 as int ) as Sayi, {} as Tarih, cast('' as m) as Notlar from (_samples+'data\customer') into cursor ornek readwrite
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:
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:
SELECT * FROM biz INTO CURSOR xxx readwr
ALTER TABLE xxx ADD COLUMN Xekle N(8)
BROWSE
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:)
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):
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
Sevgili Özcan;
Kodunu görünce, öyle tatlı gülümsedim ki
Ö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:
*!* 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ı
\ 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 :
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
Hepinize çok teşekkürler.
fox4um » Veritabanı, Tablo, View, Index ve SQL Syntax » cursor'e kolon ekleme