1

Konu: tablodan tabloya veri atmak

2 tablom var şimdi bir tabloda fbno hanesi dolu diğerinde boş ikisindede sskno dolu ben fbnoları boş olana nasıl gönderirim sskno karşılıklı olacak şekilde
butona basınca

2

Re: tablodan tabloya veri atmak

Visual Fox Pro
repl syedek.fbno with verifbno in "syedek"

bu kodda data type mismatch hatası veriyor nedenkine

3

Re: tablodan tabloya veri atmak

buldum fbnoyu yazdırmayı denedim ancak bu sefer şöyle bir sorun var attığı fbnoların hepsi 0 ve birde sonsuz döngüye girdi anlayamadım

4

Re: tablodan tabloya veri atmak

Söyle bir program yazsan ;

Visual Fox Pro
select tablo2  &&fbno bos olan tablo

set order to sskno
 
Select tablo1  &&fbno dolu olan tablo
Go Top
Do While !eof()
     d_sskno =sskno
     d_fbno = fbno
     select  tablo2
      if seek(d_sskno)
         select tablo1
         replace fbno with d_fbno
     endif
select tablo1
skip
enddo

5 Son düzenleyen, moderom (14.01.2011 18:10:35)

Re: tablodan tabloya veri atmak

bu kod atmadı neden bilmiyorum ama

Visual Fox Pro
select syedek &&fbno bos olan tablo

set order to sskno
Select personel  &&fbno dolu olan tablo
Go Top
Do While !eof()
     d_sskno =personel.sskno
     d_fbno = personel.fbno &&bu iki satırda hangi dataya ait olduğunu belirtmem doğru olmazmı
     select  personel
      if seek(STR(d_sskno)) &&böyle yapmadan data type mismatch hatası verdi alltrim denedim olmadı
         select syedek
         replace syedek.fbno with d_fbno
     endif
select syedek
skip
enddo

6 Son düzenleyen, moderom (14.01.2011 18:18:31)

Re: tablodan tabloya veri atmak

ben böyle bir kod yazdım olmazmı

Visual Fox Pro
SELE personel

SET order to sskno
SELECT CNT(*) from personel into array sayim
FOR sayici=1 to sayim
    SELE personel
    SET order to sskno
    GO m.sayici
    arama=personel.sskno
    verfbno=personel.fbno
    SELE syedek
    SET order to sskno
    SELECT CNT(*) from syedek into array sayper
    FOR sayiper=1 to sayper
        SELE syedek
        SET order to sskno
        GO m.sayiper
        IF arama=syedek.sskno
            REPL syedek.fbno WITH verfbno IN "SYEDEK"
            =tableupdate(1,.t.,"syedek")
        ENDIF
        IF sayiper=sayper
            EXIT
        ENDIF
    NEXT
    IF sayici=sayim
        EXIT
    ENDIF
NEXT

ama bu öyle zaman alıyorki
yaklaşık 4  -  5 dakika

7

Re: tablodan tabloya veri atmak

birde şöyle bir sorunum var programın içerisinde

use syedek
dele all
diye yazdım ancak kayıtlar hala var exclusive  on
program içinde pack nasıl yaptırrırım yada o kayıtlar nasıl gider

yani syedek her bilgi girişinden önce boşalacak sonra bilgiler yazılacak ancak kayıtlar birike birike dosya büyüdü.

8 Son düzenleyen, konuka (15.01.2011 05:35:06)

Re: tablodan tabloya veri atmak

dosyayı pack ile küçülürken exclusive açmak için programın main bölümüne veya formun dataenviroment.beforeopentables ine koyulacak

Visual Fox Pro
*IF DAY(DATE())%5=0   && 5 günde bir yapsın

Xftp=SYS(5)+SYS(2003)+'\irsdata\irsdata1\işlemler.fpt&&pack edilecek dosya
=ADIR(geçici,Xftp)
IF geçici[1,2]>5000000   && veya 5 MB büyükse yapsın
  Xdbf=SYS(5)+SYS(2003)+'\irsdata\irsdata1\işlemler.dbf&&pack edilecek dosya
  hFile = FOPEN(Xdbf, 12)  && KONTROL ET
  IF (hFile > 0) && Not used
    FCLOSE(hFile)
    USE (Xdbf) EXCL
    PACK
    USE
  ENDI
ENDI
VFP9 SP2

9 Son düzenleyen, konuka (15.01.2011 05:36:24)

Re: tablodan tabloya veri atmak

sevgili moderom, gücenme ama soru sorarken biraz daha özen göstermek gerekiyor galiba, sorunu yanıtlar arasında anlamayı bile tam olarak becerebildiğim şüpheli..

dosyaların herhangi biri ortak alan ssk üzerinden indeksli ise:

Visual Fox Pro
sele dosya1

set rela to dosya2 into ssk IN dosya1
scan
  repl dosya2.xAlan with dosya1.xAlan IN dosya2
  repl dosya1.yAlan with dosya2.yAlan IN dosya1
ends


veya

Visual Fox Pro
SELE ..., dosya1.yAlan, dosya2.xAlan, ... ;

FROM dosya1 LEFT JOIN dosya2 ON dosya1.ssk=dosya2.ssk;
INTO DBF yenidosya


sürenin milyon kayıt için saniyeler ile ölçüleceğini düşünüyorum

VFP9 SP2

10 Son düzenleyen, ugurlu2001 (15.01.2011 11:05:36)

Re: tablodan tabloya veri atmak

Ben daha kısa bir yol söyliyim :

Visual Fox Pro
UPDATE Syedek ;

        SET syedek.fbno = personel.fbno ;
    From Syedek ;
    Join Personel On Syedek.SSKNo == Personel.SSKNo

Eğer fbno tipleri farklı ise ( INT ve String olduğunu varsayalım )   

Visual Fox Pro
UPDATE Syedek ;

        SET syedek.fbno = CAST(personel.fbno As Int)) ;
    From Syedek ;
    Join Personel On Syedek.SSKNo == Personel.SSKNo

   
   
Bence bir şekilde VFP9 a geçmelisin .... VFP6 da yukarıdaki update komutları çalışmaz.

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ü

11

Re: tablodan tabloya veri atmak

moderom yazdı:

bu kod atmadı neden bilmiyorum ama

Visual Fox Pro
select syedek &&fbno bos olan tablo

set order to sskno
Select personel  &&fbno dolu olan tablo
Go Top
Do While !eof()
     d_sskno =personel.sskno
     d_fbno = personel.fbno &&bu iki satırda hangi dataya ait olduğunu belirtmem doğru olmazmı
     select  personel
      if seek(STR(d_sskno)) &&böyle yapmadan data type mismatch hatası verdi alltrim denedim olmadı
         select syedek
         replace syedek.fbno with d_fbno
     endif
select syedek
skip
enddo


Her iki tablodaki sskno alan tiplerin farklı oldğu için bu hatayı almışsın. Burada hata verdiğine göre personel tablosundaki sskno alanı int veya numeric, syedek tablosunda ise muhtemelen charecter ... Bunların aynı alan tipi olması gerekiyor.
Birde Select personel ile tabloyu seçtikten sonra oradaki bir alanı değişkene aktarmak için d_sskno = personel.sskno demene gerek yok d_sskno=sskno yeterli olur.

12

Re: tablodan tabloya veri atmak

Şimdi iki data tablom var birisi
personel
diğeri ise
syedek
ikisindede indekste sskno fbno seçili
sonra ikisindede sskno alanı numeric 13 fbno numeric 5
ayarladım

13 Son düzenleyen, moderom (16.01.2011 23:17:48)

Re: tablodan tabloya veri atmak

EĞER HİÇ KAYIT YOKSA

Visual Fox Pro
UPDATE SIGORTA2 ;

            SET SIGORTA2.fbno = SYEDEK.fbno ,;
            SET SIGORTA2.SSKNO = SYEDEK.SSKNO ,;
            SET SIGORTA2.YIL = SYEDEK.YIL ,;
            SET SIGORTA2.GUN01 = SYEDEK.GUN ,;
            SET SIGORTA2.UCR01 = SYEDEK.UCRET ,;
            SET SIGORTA2.IKR01 = SYEDEK.IKRAMIYE ;
            From SIGORTA2 ;
        Join SYEDEK

VARSA

Visual Fox Pro
UPDATE SIGORTA2 ;

            SET SIGORTA2.fbno = SYEDEK.fbno ,;
            SET SIGORTA2.SSKNO = SYEDEK.SSKNO ,;
            SET SIGORTA2.YIL = SYEDEK.YIL ,;
            SET SIGORTA2.GUN01 = SYEDEK.GUN +SIGORTA2.GUN01,;
            SET SIGORTA2.UCR01 = SYEDEK.UCRET +SIGORTA2.UCR01,;
            SET SIGORTA2.IKR01 = SYEDEK.IKRAMIYE+SIGORTA2.IKR01 ;
            From SIGORTA2 ;
        Join SYEDEK ON SIGORTA2.SSKNO==SYEDEK.SSKNO AND SIGORTA2.YIL==SYEDEK.YIL

BU KOD NEDEN HATA VERİYOR. 1. UPDATE DE

14

Re: tablodan tabloya veri atmak

LEFT JOIN ON   dosya1.ortakalan = dosya2.ortakalan

2. tablo ile 1e1 değil ise bazı 2. tablo değerleri null döner, 1. tablo nulları kabul ediyor mu ?

VFP9 SP2

15

Re: tablodan tabloya veri atmak

o dediğim olayı uğur beyin

Visual Fox Pro
UPDATE Syedek ;

        SET syedek.fbno = CAST(personel.fbno As Int)) ;
    From Syedek ;
    Join Personel On Syedek.SSKNo == Personel.SSKNo

kodu ile hallettim
bu ayrı
EĞER HİÇ KAYIT YOKSA

Visual Fox Pro
UPDATE SIGORTA2 ;

            SET SIGORTA2.fbno = SYEDEK.fbno ,;
            SET SIGORTA2.SSKNO = SYEDEK.SSKNO ,;
            SET SIGORTA2.YIL = SYEDEK.YIL ,;
            SET SIGORTA2.GUN01 = SYEDEK.GUN ,;
            SET SIGORTA2.UCR01 = SYEDEK.UCRET ,;
            SET SIGORTA2.IKR01 = SYEDEK.IKRAMIYE ;
            From SIGORTA2 ;
        Join SYEDEK


VARSA

Visual Fox Pro
UPDATE SIGORTA2 ;

            SET SIGORTA2.fbno = SYEDEK.fbno ,;
            SET SIGORTA2.SSKNO = SYEDEK.SSKNO ,;
            SET SIGORTA2.YIL = SYEDEK.YIL ,;
            SET SIGORTA2.GUN01 = SYEDEK.GUN +SIGORTA2.GUN01,;
            SET SIGORTA2.UCR01 = SYEDEK.UCRET +SIGORTA2.UCR01,;
            SET SIGORTA2.IKR01 = SYEDEK.IKRAMIYE+SIGORTA2.IKR01 ;
            From SIGORTA2 ;
        Join SYEDEK ON SIGORTA2.SSKNO==SYEDEK.SSKNO AND SIGORTA2.YIL==SYEDEK.YIL


BU KOD NEDEN HATA VERİYOR. 1. UPDATE DE

16

Re: tablodan tabloya veri atmak

Moderom;

Hiç kayıt yoksa neden güncelleme yapıyorsun ki? Anlamadım smile

Visual Fox Pro
UPDATE SIGORTA2 ;

            SET SIGORTA2.fbno = SYEDEK.fbno ,;
            SET SIGORTA2.SSKNO = SYEDEK.SSKNO ,;
            SET SIGORTA2.YIL = SYEDEK.YIL ,;
            SET SIGORTA2.GUN01 = SYEDEK.GUN ,;
            SET SIGORTA2.UCR01 = SYEDEK.UCRET ,;
            SET SIGORTA2.IKR01 = SYEDEK.IKRAMIYE ;
            From SIGORTA2 ;
        Join SYEDEK && Eğer join belirttiysen; koşulda belirtmek zorundasın.
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ü

17

Re: tablodan tabloya veri atmak

nasıl yapıcam ozaman.

18

Re: tablodan tabloya veri atmak

direk nasıl yüklerim ordan oraya
ikinci komutta join belirttiğim yerde and kullanım şeklim doğrumu.

19

Re: tablodan tabloya veri atmak

peki vfp6 da hangi komutları kullanırım evime 9 temin ettim üniversitenin programcılarından aldım ancak işyerimde bilgisayarlara dıştan program kurulmuyor....

20

Re: tablodan tabloya veri atmak

Anladığım kadarı ile  hiç kayıt yok ise bununlar syedek deki kayıtları sigorta2 (2 table alanlari birbirinin ayni ise) ye aktarabilirsin.

Visual Fox Pro
Insert Into SIGORTA2  Select * From SYEDEK
Bilmediğin Neyse Yanıldığındır.

21 Son düzenleyen, moderom (18.01.2011 13:57:54)

Re: tablodan tabloya veri atmak

evet yapmak istediğim bu peki burada koşul koyabilirmiyim mesela syedek içerisindeki ssknumaralarının personel tablosunda olma koşulu ozaman

Visual Fox Pro
Insert Into SIGORTA2  Select * From SYEDEK where syedek.sskno= personel.sskno


mu diyeceğim
yoksa

Visual Fox Pro
Insert Into SIGORTA2  Select * From SYEDEK where syedek.sskno= personel.sskno

birde kayıtları atarken tablodaki istediğim alanı istediğim yere atacağım
örnek
syedek tablo alanları //// sskno *  fbno  * yil * gun * ucret *  ikramiye
personelde //// sskno *  fbno
sigorta2 //// sskno * fbno *  yil *gun01 * ucr01 * ikr01

bu dosyayı nasıl aktarırım oraya sigorta2 ye girecek her türlü kayıt yeni olsun yani personel boş olsada olmasada personelde olup olmadığı kontrol edilecek
personelde varsa ilgili ssknosuna ait daha öncede o yılda işlem varmı yani yil haneside atılmak istenene eşitmi kontrol edecek
eğer oda varsa o yili kaydının o ayina kaydi yazacak.

mrduyar bey birde facede sizi gördüm galiba ama denk gelmedi konuşmak nasip olmadı bir ara konuşalım. ben vfp de yeniyim...

22

Re: tablodan tabloya veri atmak

Moderom koşul koyabilirsin ama yazdığın şekilde değil. Join + Where i birlikte kullanman lazım. Biraz SQL çalışmalısın ...

http://rapidshare.com/files/443239087/S … lgiler.zip

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ü

23 Son düzenleyen, moderom (19.01.2011 11:08:20)

Re: tablodan tabloya veri atmak

projenin her yerinde kullanılabilecek bir değişken nasıl tanımlanır.onun değerine göre işlemler yapmak istiyorum

24 Son düzenleyen, mrduyar (19.01.2011 11:33:29)

Re: tablodan tabloya veri atmak

moderom yazdı:


mrduyar bey birde facede sizi gördüm galiba ama denk gelmedi konuşmak nasip olmadı bir ara konuşalım. ben vfp de yeniyim...

Telefonum sende var aramanı bekliyorum.  Telefonunu mail ile gönder arayayım.

Bilmediğin Neyse Yanıldığındır.

25

Re: tablodan tabloya veri atmak

telefon facede yazıyormu... işyerinde tel yasak ancak evden