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
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 tanesini seçiniz.

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

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
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

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, metin (15.02.2010 12:13:37)

Re: update komutu

Visual Fox Pro
update tablo1 set tablo1.ad= (select ad from tablo2 where id=tablo1.id)
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
Update tablo1 ;

    set tablo1.ad=tablo2.ad ;
    From tablo2 ;
    where tablo1.id=tablo2.id

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
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 Son düzenleyen, cetinbasoz (15.02.2010 17:43:50)

Re: update komutu

VBFP9 oncesi ise klasik yontemi kullan:

Visual Fox Pro
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
Update tablo1 ;

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

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
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