Konu: table field sınırı
arkadaşlar table field sınırı yetmiyor nası bir çözüm üretebiliriz bilmiyorum aynı table içinde 320 fielda ihtiyacım var
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
arkadaşlar table field sınırı yetmiyor nası bir çözüm üretebiliriz bilmiyorum aynı table içinde 320 fielda ihtiyacım var
VFP tablolariyla, tek tablo seklinde bir cozumu yok. SQL server tablosu kullanirsan yapabilirsin. VFP tablolariyla, 2 adet tabloyu 1'e 1 baglayarak yapabilirsin:
tablo1: primaryKey, f1,f2,f3...f160
tablo2: primaryKey, f161,f162,f163...f320
gibi.
Bu 320 alana gerecekten ihtiyacin var mi onu da gozden gecir. Belki de soyle bir cozum de olabilir:
rowNo, fieldNo, Deger
Mesela uygulama parametreleri tablosu. 320 parametre var ise (ki yarin mutlaka 321 ve fazlasi olur) 320 alanli tablo yerine yukaridaki gibi 3 alanli tablo yeterli.
Antepli;
Çetin Hocanın dediği gibi 320 fielda gerçekten ihtiyacın var mı?
Bence bu tip bir data yapısına geçmeden önce bir kez daha düşün. Hatta bir çok kez düşün. İnternet üzerinde database normalizasyonu olarak konuyu araştır. Fırsat bulursam sana detaylı olarak açıklama yapmaya çalışıcam.
SQL server tablosu kullanirsan yapabilirsin.
.....
SQL tablosu 255den fazla ise VFP sorgulamasında text (memofield) olarak dönüyor.
Aşağıdaki linklerde temel olarak normalizasyon kuralları var :
http://www.verivizyon.com/kitapoku.asp?catid=48
http://www.kodaman.org/yazi/relational- … ani-yapisi
http://www.frmtr.com/database-programla … llari.html
cetinbasoz yazdı:SQL server tablosu kullanirsan yapabilirsin.
.....
SQL tablosu 255den fazla ise VFP sorgulamasında text (memofield) olarak dönüyor.
255 tek bir alanin içeriğinin boyutu. Alan saysı 1-2 bile olsa o kısıtlama var.
tabiki tablolara bölerek yapabilirim ama raporlarda sıkıntı oluyor bir kişiye ait 1 raporun içerisinde 320 farklı bilgivar işlemleri yaparken zaten bölünmüş konumda 4 tabloda raporda birleştiremedim o bilgileri tek bir raporda göstermemlazım konuyu birazdaha açıklamış olayım
tabiki tablolara bölerek yapabilirim ama raporlarda sıkıntı oluyor bir kişiye ait 1 raporun içerisinde 320 farklı bilgivar işlemleri yaparken zaten bölünmüş konumda 4 tabloda raporda birleştiremedim o bilgileri tek bir raporda göstermemlazım konuyu birazdaha açıklamış olayım
raporlarda DataEnvironment Kullaniyorsan oyle yapma Select SQL ile joinlerle raporu nu cursor olarak olustur oyle kullan ayrica rapor uzerinde 1 den fazla cursor un alanlarini da gostermen mumkun
galiba sevgili anteplinin ihtiyacı
raporda "data grouping" - "Çıktıda bir satıra sığmayan alanlar altalta konması" gibi ayarlamalar !
antepli yazdı:tabiki tablolara bölerek yapabilirim ama raporlarda sıkıntı oluyor bir kişiye ait 1 raporun içerisinde 320 farklı bilgivar işlemleri yaparken zaten bölünmüş konumda 4 tabloda raporda birleştiremedim o bilgileri tek bir raporda göstermemlazım konuyu birazdaha açıklamış olayım
raporlarda DataEnvironment Kullaniyorsan oyle yapma Select SQL ile joinlerle raporu nu cursor olarak olustur oyle kullan ayrica rapor uzerinde 1 den fazla cursor un alanlarini da gostermen mumkun
soykan bende 4 tablo var fieldlar tablo1 kodu , a1, a2, a3.... a253 tablo2 kodu, a255, a256, a300.... tablo3 kodu, a455, a456, a500.... gibi devam edip gidiyor
raporda tek satırda dediğin şekliyle nasıl birleştirecem bir örnek verebilirmisin kardeş
4 tablonun da 1 e 1 fieldlarinin eslenerek tek satirda olmasini mi istiyorsun ?
tablo1.f1 = tablo2.f256
tablo3.f513 = tablo4.f768
vs gibi mi
onu anlatabilirsen ona gore bir SQL yazabilelim , ayarica bu 4 tablonun birbiri ile iliskisi hangi alanla saglaniyor ?
4 tablonun da 1 e 1 fieldlarinin eslenerek tek satirda olmasini mi istiyorsun ?
tablo1.f1 = tablo2.f256
tablo3.f513 = tablo4.f768
vs gibi mionu anlatabilirsen ona gore bir SQL yazabilelim , ayarica bu 4 tablonun birbiri ile iliskisi hangi alanla saglaniyor ?
hayır kardeş
önce hepsinde ki ortak alan kodu
tablo1 içindeki alanlar
kodu , a1, a2, a3.... a253
tablo2 içindeki alanlar
kodu, a255, a256, a300....
tablo3 içindeki alanlar
kodu, a455, a456, a500
tablo4 içindeki alanlar
kodu, a600, a601, a700
şimdi tablo1 de a1 den a253 e kadar alanı tablo2 den a255, a256, a300 alnı tablo3 a455, a456, a500 alanı ve tablo4 a600, a601, a700 e kadar alanı kodu örnegin 1 olanları almak istiyorum buda toplamda 320 tane alan ediyor kodu dahil 320 alandaki bilgiyi bir satırda göstermem lazım
ornek data gorebilsek daha iyi olacak
asagidaki SampleDataAsText.prg kodu nu VFP altina SampleDataAsText.prg olarak kaydet
modi comm la bos bir .prg dosyasi ac
do home()+"SampleDataAsText" with "tablo1,0"
paste ile .prg dosyasi icine yapistir
do home()+"SampleDataAsText" with "tablo2,0"
paste ile .prg dosyasi icine yapistir
do home()+"SampleDataAsText" with "tablo3,0"
paste ile .prg dosyasi icine yapistir
do home()+"SampleDataAsText" with "tablo4,0"
paste ile .prg dosyasi icine yapistir
sonra bu .prg icindeki kodlari buraya foruma koy ornek datana gore sana gereken en uygun cozumu uretebilelim
* SampleDataAsText.prg
*- Author Cetin BASOZ
Lparameters tcInfo
LOCAL loCloseTemp, ix
loCloseTemp = CREATEOBJECT('CloseTemp')
LOCAL ARRAY laInfo[1]
Create Cursor crsSampler (procedureName m, procedureCode m)
For ix = 1 To ALINES(laInfo,m.tcInfo,1+4,',',CHR(13),CHR(10)) STEP 2
GetProcedureCode(laInfo[m.ix],VAL(laInfo[m.ix+1]))
Endfor
DataCreationCodeToClip()
MESSAGEBOX('Data creation is copied to clipboard',0,'Sample Data',3000)
Procedure DataCreationCodeToClip
Local Array aProcCode[1]
Local lcTemp1,lcTemp2
lcTemp1 = Sys(2015)+'.tmp'
lcTemp2 = Sys(2015)+'.tmp'
Select crsSampler
Scan
Strtofile(procedureName,m.lcTemp1,.T.)
Strtofile(procedureCode,m.lcTemp2,.T.)
Endscan
_Cliptext = Filetostr(m.lcTemp1) + Filetostr(m.lcTemp2)
Erase (m.lcTemp1)
Erase (m.lcTemp2)
Endproc
Procedure GetProcedureCode(tcAlias,tnRecords)
Local lcTemp, ix, lcData, lcRetVal
lcTemp = Sys(2015)+'.tmp'
If !Used(m.tcAlias)
Select * From (m.tcAlias) Into Cursor crsSampling nofilter
lcCursorName = Juststem(m.tcAlias)
Else
Select (m.tcAlias)
lcCursorName = Alias()
Endif
Locate
If Empty(m.tnRecords)
Copy To (m.lcTemp) Type Delimited
Else
Copy To (m.lcTemp) Type Delimited Next m.tnRecords
Endif
lcData = Filetostr(m.lcTemp)
Erase (m.lcTemp)
Set Textmerge Delimiters To '%%','%%'
Set Textmerge To (m.lcTemp) Noshow
Set Textmerge On
\
\ Procedure CreateCursor_%%m.lcCursorName%%
\ LOCAL lcData, lcTemp
\ lcTemp = SYS(2015)+'.tmp'
\ TEXT TO m.lcData noshow
\ %%m.lcData%%
\ ENDTEXT
\
\ STRTOFILE(m.lcData,m.lcTemp)
\
\ create CURSOR %%m.lcCursorName%% ;
\ ( ;
For ix=1 To Afields(aStruc)
\ %%IIF(m.ix > 1,',','')%%
\\%%aStruc[m.ix,1]%% %%aStruc[m.ix,2]%%(%%aStruc[m.ix,3]%%,%%aStruc[m.ix,4]%%)
\\ %%IIF(aStruc[m.ix,5],'',' NOT ')%% NULL
\\ %%IIF(aStruc[m.ix,6],'NOCPTRANS','')%% ;
Endfor
\ )
\
\ APPEND FROM (m.lcTemp) TYPE delimited
\ ERASE (m.lcTemp)
\ endproc
Set Textmerge To
Set Textmerge Off
Insert Into crsSampler Values ( Textmerge('CreateCursor_%%m.lcCursorName%%()%%CHR(13)+CHR(10)%%'), Filetostr(m.lcTemp) )
Set Textmerge Delimiters
Erase (m.lcTemp)
ENDPROC
** Class to close any cursors created after it was instantiated
** Author: Dragan Nedeljkovich
Define Class CloseTemp As Custom
Dimension a1[1]
nFiles=0
Procedure Init
This.nFiles=Aused(atemp)
If This.nFiles > 0
Acopy(atemp, This.a1)
Else
This.a1=""
Endif
endproc
Procedure Destroy
For i=1 To Aused(aNow)
If Ascan(This.a1, aNow[i,1],-1,-1,1,2+4)=0
Use In aNow[i,1]
Endif
Endfor
endproc
Enddefine
antepli yazdı:tabiki tablolara bölerek yapabilirim ama raporlarda sıkıntı oluyor bir kişiye ait 1 raporun içerisinde 320 farklı bilgivar işlemleri yaparken zaten bölünmüş konumda 4 tabloda raporda birleştiremedim o bilgileri tek bir raporda göstermemlazım konuyu birazdaha açıklamış olayım
raporlarda DataEnvironment Kullaniyorsan oyle yapma Select SQL ile joinlerle raporu nu cursor olarak olustur oyle kullan ayrica rapor uzerinde 1 den fazla cursor un alanlarini da gostermen mumkun
soykan Select SQL oluşturulan cursor de field sınırı varmı ?
evet var sana raporda 255 ten fazla sutun lazimsa html rapor dusunebilirsin boylece sutun sorunun kalmaz
1) Tablolar arasinda relation kullan. O zaman tek cursorde olamalari gerekmez
2) Raporda array kullan. Tek satirin degerlerini arraye koy, raporda da array goster. Cursorda ise sadece kodu alanini tutsan yeter. Bir function yazarsin satir basina arraye degerleri alir.
Çetin bey ;
"Bir function yazarsin satir basina arraye degerleri alir."
fpw26 da dediginizi eskiden beri uyguluyorum ama vfp reportunda nasıl uygularım bilmiyorum fpw26 da rapora bir değişken koyup içine =islem() yazıp islem prg yi çalıştırıyor ve arraya bilgi aldırıp raporda gösteriyordum vfp da beceremedim
Vazgectim array lafindan:) Relation kur, o daha kolay.