1 Son düzenleyen, astronot (06.03.2007 17:54:32)

Konu: nasıl bir sorgulama olmalı?

benim şöyle bir sorgu yapmam gerek.
her sınıfın branşına göre alması gereken dersler ve saatleri var.

bransders dosyası                                               
sınıf     brans        ders         saat         DERSGÜNLERİ
A9       SAYISAL   MAT1          5          SALI,CUMA,PAZAR
A9       SAYISAL   GEO.           4          SALI,CUMA,PAZAR         
A9       SAYISAL   TÜRKÇE      3          SALI,CUMA,PAZAR
.
.
.
C12     SÖZEL      EDEBİYAT    5          salı,CUMA
C12     SÖZEL      COĞRAFYA  4           salı,CUMA
C12     SÖZEL      MAT1          2           SALI,CUMA
.
.
.
.

Bununla birlikte öğretmen dosyası

öğradsoyad         branş                    girebileceği günler                  sınıflar
ahmet taş            matematik1           salı,cuma,pazar                     A9,C12
mehmet kaya      geometri                salı,cuma                              A9
.
.
.
.

Beniğm istediğim bu dosyaları birleştirerek haftalık bir proogram çıkarabilmek
öğretmen ad soyad            pazartesi                    salı                    cuma                      PAZAR
                                1   2  3  4  5  6  7    1   2  3  4  5  6  7      1  2  3  4  5  6  7   1   2  3  4  5  6  7
ahmet taş                                                  A9 C12          A9   C12      A9        A9                  A9
MEHMET KAYA          A9          A9                                                 A9          A9
..
.
.
.


SINIFLARIN GELDİKLERİ GÜNLER İLE ÖĞRETMENLER GİRECEKLERİ GÜNLER VE DERS SAATLERİ BİRBİRİNİ TUTMALI.
burada takıldım kaldım.
yardımcı olursanız sevinirim. şimdiden teşekkürler...

2

Re: nasıl bir sorgulama olmalı?

bu dediğini yapmak başlı başına programı baştan yapmakla aynı şey , çok zaman ve emek harcatacak bir olaya benziyor. yardımcı olamadığım için özür dilerim sad

3 Son düzenleyen, foxman (07.03.2007 14:28:28)

Re: nasıl bir sorgulama olmalı?

Aşağıdaki program ile istediğin işlemi yapabilirsin, fazla vakit ayıramadığım için doğru çalışıp çalışmadığını çok detaylı kontrol etmedim ama bu iş için en iyi yöntemlerden biri bu, sen daha detaylı kontrol edersen iyi olur.

Table structure ları ile içerikleri ve program aşağıda.
**********
BRANS.DBF

Field  Field Name      Type                Width    Dec   Index   Collate Nulls    Next    Step
    1  SINIF           Character               3                             No
    2  BRANS           Character              10                             No
    3  DERS            Character              10                             No
    4  SAAT            Character               1                             No
    5  DERSGUN         Character              50                             No

sinif,brans,ders,saat,dersgun
"A9","SAYISAL","MAT1","5","SALI,CUMA,PAZAR"
"A9","SAYISAL","GEO","4","SALI,CUMA,PAZAR"
"A9","SAYISAL","TÜRKÇE","3","SALI,CUMA,PAZAR"
"C12","SÖZEL","EDEBİYAT","5","SALI,CUMA"
"C12","SÖZEL","COĞRAFYA","4","SALI,CUMA"
"C12","SÖZEL","MAT1","2","SALI,CUMA"
"C13","SAYISAL","MAT1","1","PAZARTESI"
**********
OGRETMEN.DBF

Field  Field Name      Type                Width    Dec   Index   Collate Nulls    Next    Step
    1  OGRNAME         Character              20                             No
    2  DERS            Character              10                             No
    3  GUNLER          Character              50                             No
    4  SINIFLAR        Character              20                             No

ogrname,ders,gunler,siniflar
"Ahmet Taş","MAT1","SALI,CUMA,PAZAR,PAZARTESI","A9,C12,C13"
"Mehmet Kaya","GEO","SALI,CUMA,PAZARTESI","A9"
**********

Visual Fox Pro
gunler=",PAZARTESI,SALI,CARSAMBA,PERSEMBE,CUMA,CUMARTESI,PAZAR,"

 
Use ogretmen In 0
Use brans In 0
 
Create Cursor dprogram ( ogrname c(20),;
    pzt1 c(3),pzt2 c(3),pzt3 c(3),pzt4 c(3),pzt5 c(3),pzt6 c(3),pzt7 c(3),;
    sal1 c(3),sal2 c(3),sal3 c(3),sal4 c(3),sal5 c(3),sal6 c(3),sal7 c(3),;
    car1 c(3),car2 c(3),car3 c(3),car4 c(3),car5 c(3),car6 c(3),car7 c(3),;
    per1 c(3),per2 c(3),per3 c(3),per4 c(3),per5 c(3),per6 c(3),per7 c(3),;
    cum1 c(3),cum2 c(3),cum3 c(3),cum4 c(3),cum5 c(3),cum6 c(3),cum7 c(3),;
    cmt1 c(3),cmt2 c(3),cmt3 c(3),cmt4 c(3),cmt5 c(3),cmt6 c(3),cmt7 c(3),;
    paz1 c(3),paz2 c(3),paz3 c(3),paz4 c(3),paz5 c(3),paz6 c(3),paz7 c(3) );
 
Select ogretmen
Go Top
Do While Not Eof()
    Insert Into dprogram (ogrname) Values (ogretmen.ogrname)
 
    Select brans
    For i=1 To 7
        cgun=Strextract(gunler,",",",",i)
        For j=1 To 7
            csaat=Transform(j,"#")
            Locate For brans.ders=ogretmen.ders And cgun$brans.dersgun And brans.saat=csaat
            If Found()
                If Alltrim(brans.sinif)$ogretmen.siniflar And cgun$ogretmen.gunler
                    cfield=Strextract(",pzt,sal,car,per,cum,cmt,paz,",",",",",i)+csaat
                    Replace dprogram.&cfield With brans.sinif
                Endif
            Endif
        Endfor
    Endfor
 
    Select ogretmen
    Skip
Enddo

4

Re: nasıl bir sorgulama olmalı?

Datani once normalize ederek ise basla. Bu sekildeki bir datadan istedigin tabloyu elde etmek pek de anlamli degil. Hataya acik.
Bir tek alanda virgulle ayrilmis sekilde bircok degeri tutmak yapabilecegin en kotu seylerden birisi.

ogrid gun
------ ----
1       2
1       5
1       7
2       2
2       5

ogrid sinif
------ ----
1       A9
1       C12
2       A9

sinif gun
----- ----
A9      2
A9      5
A9      7
C12    2
C12    5


vs gibi datani normalize edersen sonucta:

ogrid sinif gun
------ ---- ----
1       A9    2
1       A9    5
1       A9    7
1       C12  2
1       C12  5
2       A9    2
2       A9    5


elde etmek kolay olur. Bu da rahatca Xtab edilir ve son goruntu alinir. Unutma veri tabanlari yatay degil (satir) dusey olarak (kolon) daha efektif calisan sistemler. Satir bazli islemler ve tek alanda bircok degerin tutlmasi demek bir suru hesabin satir basina yapiliyor olmasi demek. Sana lazim olan detaydan ozet elde etmek ama sen ozetlerle baslamissin. Once onlari detaya cevirme derdin var:( Bu kadar az datada problemi farketmen de cok zor ve oluyormus gibi gelir.

5

Re: nasıl bir sorgulama olmalı?

cevaplarınız için teşekkürler. programı denedim.sadece şöyle bir sıkıntı var. sınıfları yerleştirirken saat kısmını yanlış algılıyor.
yani o hafta a9 sınıfına 5 saat vermesi gerekirken 5.saate yerleştiriyor. veya c12 ye 2 saat vermesi gerekirken 2.saatlere yerleştiriyor.

6 Son düzenleyen, foxman (08.03.2007 09:54:46)

Re: nasıl bir sorgulama olmalı?

Ben sorudaki haftalık program ifadesinden ve en alttaki cetvelden 1.ders,2.ders.....7.ders şeklinde öğretmenleri ders saatlerine atamak şeklinde anladım. Programı ogretmen,gün,sınıf,saat kolonlarına data getirecek şekilde değiştirdim, birtakım toplamlara ihtiyacın olursa oluşan cursor'dan oluşturabilirsin. Umarım işine yarar.

Visual Fox Pro
gunler=",PAZARTESI,SALI,CARSAMBA,PERSEMBE,CUMA,CUMARTESI,PAZAR,"

 
Use ogretmen In 0
Use brans In 0
 
Create Cursor dprogram (ogrname c(20),gun c(10),sinif c(3),saat n(5))
Select ogretmen
Go Top
Do While Not Eof()
 
    Select brans
    For i=1 To 7
        cgun=Strextract(gunler,",",",",i)
        For j=1 To 7
            csaat=Transform(j,"#")
            Locate For brans.ders=ogretmen.ders And cgun$brans.dersgun And brans.saat=csaat
            If Found()
                If Alltrim(brans.sinif)$ogretmen.siniflar And cgun$ogretmen.gunler
                    Insert Into dprogram (ogrname,gun,sinif,saat) Values (ogretmen.ogrname,cgun,brans.sinif,VAL(brans.saat))
                Endif
            Endif
        Endfor
    Endfor
 
    Select ogretmen
    Skip
Enddo

7

Re: nasıl bir sorgulama olmalı?

teşekkürler. kodlarınızdan da yeni komutlar öğrendim. sanırım bu işimi biraz kolaylaştıracak.