foreign key tanımlayamıyorum sebebi ne olabilir???

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

foreign key tanımlayamıyorum sebebi ne olabilir???

Mesaj gönderen burakb44 »

arkadaşlar merhaba,
herzamanki gibi iki tane tablo var

master tablo

Kod: Tümünü seç

CREATE TABLE TBL_BANKA (
    SAYAC       INTEGER NOT NULL,
    BANKA_KODU  VARCHAR(10) NOT NULL,
    BANKA_ADI   VARCHAR(50) NOT NULL,
    SUBE_KODU   VARCHAR(10) NOT NULL,
    HESAP_NO    VARCHAR(30) NOT NULL,
    KUR_TIPI    VARCHAR(15),
    BAKIYE      DOUBLE PRECISION,
);

ALTER TABLE TBL_BANKA ADD PRIMARY KEY (SAYAC, BANKA_KODU, BANKA_ADI, SUBE_KODU, HESAP_NO);

detail tablom da

Kod: Tümünü seç

CREATE TABLE TBL_BANKA_HAREKET (
    SAYAC         INTEGER NOT NULL,
    BANKA_KODU    VARCHAR(10) NOT NULL,
    BANKA_ADI     VARCHAR(50) NOT NULL,
    SUBE_KODU     VARCHAR(10) NOT NULL,
    HESAP_NO      VARCHAR(30) NOT NULL,
    KUR_TIPI      VARCHAR(15),
    ISLEM_TUTARI  DOUBLE PRECISION,
    ISLEM_TIPI    VARCHAR(15),
    ACIKLAMA      VARCHAR(50),
    ISLEM_TARIHI  DATE
);


ALTER TABLE TBL_BANKA_HAREKET ADD PRIMARY KEY (SAYAC, BANKA_KODU, BANKA_ADI, SUBE_KODU, HESAP_NO);
şeklinde şimdi ben foregin key tanımlamak istiyorum
iki tablodada primary key var
BANKA_KODU alanından foregin key tanımlamak istiyorum fakat aşağıdaki hatayı veriyor

Kod: Tümünü seç

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
foreign.

acaba problem nerede yardımlarınızı bekliyorum

Burak BİTİKÇİ
Malatya
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Mesaj gönderen burakb44 »

foregein key oluşturma kodları aşağıdaki gibi

Kod: Tümünü seç

alter table TBL_BANKA_HAREKET
add constraint 
foreign key (BANKA_KODU)
references TBL_BANKA_HAREKET(BANKA_KODU)
on update CASCADE
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Mesaj gönderen burakb44 »

foregein key oluşturma kodları aşağıdaki gibi

Kod: Tümünü seç

alter table TBL_BANKA_HAREKET
add constraint 
foreign key (BANKA_KODU)
references TBL_BANKA_HAREKET(BANKA_KODU)
on update CASCADE
Kullanıcı avatarı
spoke25
Üye
Mesajlar: 434
Kayıt: 16 May 2005 04:06
Konum: Bolu

umarim isine yarar

Mesaj gönderen spoke25 »

burakb44 yazdı:foregein key oluşturma kodları aşağıdaki gibi

Kod: Tümünü seç

alter table TBL_BANKA_HAREKET
add constraint 
foreign key (BANKA_KODU)
references TBL_BANKA_HAREKET(BANKA_KODU)
on update CASCADE
şimdi Faring key Bir tablonun primary keyni bir baskaya cagırman demek.. Bunun icin sen burada Banka Kodlarını Primary key olarak tanımlaman lazım..

Neyse Hatan aynı tablodan primary key ve farinkey almışşsın reference tbl_banka olacak dogrusu asağıda

Kod: Tümünü seç

alter table TBL_BANKA_HAREKET
add constraint 
foreign key (BANKA_KODU)
references TBL_BANKA(BANKA_KODU)
Başlayan Herşey Birgün Bitmek Zorundadır.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

CONSTRAINT den sonra bir isim vermelisin veya CONSTRAINT hiç yazmamalısın.

Ayrıca FOREIGN KEY tanımlayabilmen için karşı tabloda o key alan veya alanlarının UNIQUE veya PRIMARY KEY olması lazım.

İyi çalışmalar.
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Mesaj gönderen burakb44 »

arkadaşlar merhaba dünden beri foregein key ile uğraşıyorum ama bir türlü çözemedim
bu konu ile ilgili detaylı bilgi verirseniz sevinirim..


Burak BİTİKÇİ
MALATYA
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Ben aşağıdaki gibi bir şeyler yapmıştım. çalışmıştı. Bir inceleyin isterseniz.
Ana dosya

Kod: Tümünü seç

CREATE TABLE MUSTERI (
    SIRA_NO  INTEGER NOT NULL,
    ADI      VARCHAR(20),
    SOYADI   VARCHAR(20)
);




/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE MUSTERI ADD CONSTRAINT PK_MUSTERI PRIMARY KEY (SIRA_NO);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX MUSTERI_IDX1 ON MUSTERI (ADI, SOYADI);






Detay dosya

Kod: Tümünü seç

CREATE TABLE SATIS (
    SRNO       INTEGER NOT NULL,
    FOREGNKEY  INTEGER NOT NULL,
    ALDIGI     VARCHAR(30),
    FIYATI     DECIMAL(15,2)
);




/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE SATIS ADD CONSTRAINT PK_SATIS PRIMARY KEY (SRNO);


/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE SATIS ADD CONSTRAINT FK_SATIS_1 FOREIGN KEY (FOREGNKEY) REFERENCES MUSTERI (SIRA_NO) ON DELETE CASCADE ON UPDATE CASCADE;


Ayrıca ben bunu @FAOsoft hocamızın makalasine bakarak. yapmıştım.

Linki viewtopic.php?t=9848

İsterseniz siz önce ona göre bir şeyler yapın sonra kendi programınıza uyarlayın.

Bir de ana detaile elle veri girdiğinizde herzaman commit edin yoksa benim gibi unutursanız bazen hata verebiliyor.
Yani ana bölüme müşteri kodu adı girip commit etmeden detaya müşterinin id sini yazdığınızda hata veriyor.


Kolay gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Sanırım CONSTRAINT ten sonra Constraint Name i tanımlamamışsınız. Ben de FK_SATIS_1 dir sizde o kısımda bir şey yok.

Foreign key güzel bir şey. Çünkü siz ana tablodan müşteriyi siliyorsunuz. Detay tabloda o müşteriye ait kaç kayıt var onun hepsini sil diye bir derdiniz yok. Kendisi size hemen siliyor.

Kolay gelsin.
Cevapla