1

Konu: sql iki tablo arası eşitlik sağlamak

2 tablom var
birincisi vergiler
ikincisi personel

birincide 1950 kişi var
ikincide yıl içerisinde personellerim emekli olduğu için 1720 kişi var

sene başı olduğu için ben vergideki fazlalık personelimin vergi bilgilerini silmek ve vergi deki bilgilerimi top matrah ve toplam vergi bilgilerini silmek isitiyorum

yani birincide sadece ikinci tabloda olan personeller kalacak ve diğer veriler gidecek ben şu şekilde yaptım

Visual Fox Pro
copy to d:\eski

select 2
use d:\eski
modı stru *fbno için indeks işaretledim
set order to fbno
select 1
delete all
set rela to fbno into b
brow fiel fbno,b->fbno

2

Re: sql iki tablo arası eşitlik sağlamak

burdan sonra tıkandım personelden kod fbno adi soyadi bilgisi olan 1720 kişiyi buraya nasıl geçirebilirim

3

Re: sql iki tablo arası eşitlik sağlamak

Visual Fox Pro
Delete  From Vergiler Where PersonelNo Not IN( Select PersonelNo From Personel )
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ü

4 Son düzenleyen, moderom (04.01.2011 15:57:09)

Re: sql iki tablo arası eşitlik sağlamak

ugur bey dediğinizi yaptım ancak olmadı siliyor gib yapıyor ancak sonra baktığımda tekrar 1925 kayıt var neden ki
birşeyler siliniyor ama

açıklama yapmak gerekirse

personel tablom-----------------------------------vergi tablom
adi---------soyadi----------fbno---------adi----------soyadi----------fbno----------vermat----------top_ver
ali----------cem-------------1-------------ali------------cem        1    1    6
veli---------cum-------------2-------------hasan------can        3    5    7
hasan-----can--------------3-------------sen---------con        4    9    11
hüsen-----con--------------4-------------veli----------cum        2    9    11
----------------------------------------------kamil--------kur        5    8    12
----------------------------------------------ayse--------tun        7    0    0

ben vergi tablomun
adi     soyadi    fbno    vermat     top_ver
ali    cem    1    0    0
veli    cum    2    0    0
hasan    can    3    0    0
hüsen    con    4    0    0


yani karşılaştıracak ve kamille ayşeyi atacak silecek
diğer herşey aynı kalacak

5 Son düzenleyen, ugurlu2001 (04.01.2011 16:13:20)

Re: sql iki tablo arası eşitlik sağlamak

Visual Fox Pro
Delete  From Vergiler Where fbo Not IN( Select fbno From Personel )

? "Silinen Kayıt Sayısı : "
?? ALLTRIM(STR( _Tally ))
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ü

6

Re: sql iki tablo arası eşitlik sağlamak

ben bu işi bir türlü çözemedim galiba
running query diye çalışıyor
sonra brow dediğimde olmayan yani silinmesi gereken kayıtları işaretliyor baş taraf siyah tabloda ancak o kayıtları nasıl ortadan kaldırabilirim hala görünüyorlar.

7 Son düzenleyen, ugurlu2001 (04.01.2011 16:42:40)

Re: sql iki tablo arası eşitlik sağlamak

Moderom,

Baş tarafta gördüğün o SİYAH işaretler; kayıtların zaten silinmiş oldğunu gösterir. VFP Tablolarında silinen kayıtlar fiziksel olarak table dan silinmez. Onun yerine bir "DELETED MARK" konur.

Eğer Programında yada çalışan EXE kodunda "SET DELETED ON" komutunu verirsen, o silinen kayıtları görünmez yaparsın. SET DELETED OFF komutunu verirsen tekrar dan görünür olurlar ...

Sık sık silme işlemi yaptığın tablolarda bir süre sonra silinen kayıtlardan kaynaklı gereksiz büyüme/şişme yaşayabilirsin. Performans artışı için arada bir ( ne sıklıkla olduğunu sen seç ama kesinlikle sürekli değil ) PACK komutunu kullan. PACK komutunu kullandığın tabloların EXCLUSIVE ON modunda açman gerekiyor.

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ü

8

Re: sql iki tablo arası eşitlik sağlamak

sanırım oldu uğur bey sağolun çok teşekkürler. pack ve set deleted on yapınca oldu birde program serverden çalıştığı için programı kullanan biri varmış silemedim sanırım sonradan aklıma geldi ama orda bir takıntım var acaba biri kullanırken programın exe sini read only modda açması gerekli değilmiydi.

9

Re: sql iki tablo arası eşitlik sağlamak

Moderom, söylediğim gibi program içerisinde SET DELETED ON kullanman yeterli. PACK şart değil.  PACK ı çok gerektiğine emin olmadığınca kullanma. PACK yapmadan önce DBF tablosunun EXCLUSIVE mode ile açılıp açılıpmadığını ISEXCLUSIVE() fonksiyonu ile kontrol etmen gerekiyor.

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ü

10 Son düzenleyen, moderom (05.01.2011 08:56:59)

Re: sql iki tablo arası eşitlik sağlamak

anladım zaten tablomu açıp bakmaya çalıştığımda statusbarda exclusive yazmakta
pack 1 defa kullandım daha önce kullanmamıştım. zaten ayın 7-8 inden öbür ayın 7-8 ine kadar kullanılmayan bir program sadece gerektiğinde kullanılıyor. maaş programı. daha önce programı yazan abimiz emekli oldu 7 aydır pek bir değişiklik yoktu yıl başı olunca böyle şeyler çıkmaya başladı. artık yavaştan uğraşıcaz.