1

Konu: update komutu

tablo1        tablo2
id  ad        id    ad
1     a         1                   ahmet
2    b         2                    mehmet
3   c        3                   ayşe

update tablo1 set tablo1.ad=tablo2.ad where tablo1.id=tablo2.id

amaç tablo2 deki ad alanın bilgilerini tablo1 aktarmak
scan endscan kullanmadan, yukarıdaki  çalışmayan update komutu gibi bir satırlık kodla yapmak mümkün mü?

2

Re: update komutu

Vfp'da olurmu bilmiyorum, ama SQL ile şu komut çalışıyor:

SQL
1

UPDATE tablo1, tablo2 SET tablo1.ad = tablo2.ad WHERE tablo1.id = tablo2.id
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tane seçiniz.

3

Re: update komutu

Erdal yazdığın kod hemen hemen olmuş smile

"FROM" clause ekliyceksin , Where koşulu yerine "JOIN" Tablo2 +  "ON" kullanıcaksın

Visual Fox Pro
1

2
3
4
Update tablo1 ;

    set tablo1.ad=tablo2.ad ;
    From tablo1;
    Join tablo2 ON  tablo1.id=tablo2.id

Önemli Not :
Eğer Join bölümünde kullanacağın field CHAR ise = yerine == kullanmanı tavsiye ederim. Eğer SET EXACT değerin OFF ise "ABC" = "AB" ( .T. ) alırsın; eğer "ABC" == "AB"kullanırsan (.F.) TAM EŞİTLİK aranır. Özelikle Update From.. SQL tümcelerinde buna dikkat etmeni öneririm

Birde Join kısmında kullandığın field ların INDEX i komutun hızını çok etkiliyor. Optimizasyon için dikkat

Son düzenleyen, ugurlu2001 (15.02.2010 10:25:09)

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

Re: update komutu

Visual Fox Pro
1

update tablo1 set tablo1.ad= (select ad from tablo2 where id=tablo1.id)

Son düzenleyen, metin (15.02.2010 12:13:37)

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5

Re: update komutu

Bence Ugur'un kodu guzel. Bir benzeri:

Visual Fox Pro
1

2
3
4
Update tablo1 ;

    set tablo1.ad=tablo2.ad ;
    From tablo2 ;
    where tablo1.id=tablo2.id
Yen yaz 1907'ye yolla FB gelsin evinde yensin.
(sonra salaklar ciksin alin terine şike desin)

6

Re: update komutu

fox versiyonunun 8 olduğunu yazmayı unuttum özür dilerim
9 da sorun yok fox 8 yapamıyorum

7

Re: update komutu

Replace ile yapabilirsin. Biraz karışık gibi ama alışınca çok daha kolay

Bendeki kodun aynını koyuyorum buraya : Index mutlaka gerekli.

Visual Fox Pro
1

2
3
4
5
6
7
8
9
10
SELECT 2

USE AMODEL
SELECT 1
USE U_Tp000
INDEX ON Modelno TO U_Tp000
 
SET ORDER TO TAG AMODEL OF AMODEL.cdx IN AMODEL
SET RELATION TO MODELNO INTO AMODEL ADDITIVE
 
REPLACE ALL Amodel.Miktar WITH U_Tp000.Miktar IN U_Tp000
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: update komutu

VBFP9 oncesi ise klasik yontemi kullan:

Visual Fox Pro
1

2
3
4
5
6
select tablo2

scan
 Update tablo1 ;
    set tablo1.ad=tablo2.ad ;
    where id=tablo2.id
endscan

Ya da VFP'ye ozel (tablo2'de "index on id tag idTag" ile index yaratildigini var sayarsak):

Visual Fox Pro
1

2
3
Update tablo1 ;

 set ad = tablo2.ad ;
 where seek( tablo1.id, 'tablo2', 'idTag')

Son düzenleyen, cetinbasoz (15.02.2010 17:43:50)

Yen yaz 1907'ye yolla FB gelsin evinde yensin.
(sonra salaklar ciksin alin terine şike desin)

9

Re: update komutu

Tablo2 indexli ise relation kurmadan aşağıdaki şekildede yapılabilir.
IIF in içindeki tablo1.ad yerine "" veya başka birşeyde konulabilir.

Visual Fox Pro
1

REPLACE ALL tablo1.ad WITH IIF( SEEK(tablo1.id, 'tablo2', 'idTag'), tablo2.ad, tablo1.ad) IN tablo1

10

Re: update komutu

teşekür ederim sağolun