Alter table nasıl oluşturuluyor

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ı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Alter table nasıl oluşturuluyor

Mesaj gönderen haydarxxx »

slmlar

1.Firebird veritabı kullanıyorum veri tabanına kod ile alan eklemek istiyorum ki bu Alter table işlemi ile oluyormuş forumda bulduğum bilgilerle derleyemedim bu işi.Veritabanımda TBL_FIRMALAR adında Tablom var (C:\StokTakip\Data\Stok.fdb) bu tabloya örnegin Not diye bir alan eklemek istiyorum kodla nasıl yapabilirim örnek verirseniz çok iyi olur.

2.Yine kodla TBL_FIRMALAR tablomdaki alan adlarını denetleyerek örneğin adı,soyadı... gibi olan bölümleri var olup olmadığına bakmak bu tabloda Not diye bir alan olmadığını görmesi durumunda bu alanın eklemesi nasıl sağlanır. tabloyu açılışta kontrol ettirerek ekleme yapmatırmak istiyorum.(Fieldlerin FK,PK larınında belirlenmesi)

3.Genarators isimlerin yine 2. sorudaki gibi denetleyip olmayan Genarators ları ekleme

konusunda yardımcı olacak arkadaş varsa çok memnun olacağım.Teşekkürler
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
forumdaki bilgilerle olmayışının sebebi belkide alan isminin "not" olmasıdır.
başka bir isimle deneyin bakalım ekleyebilecekmisiniz.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

slangeri hocam
not( Field) alanını ben örnek olarak verdim alter table,table diye forumda aradım ama sql kodlarından bir şey anlamadım yapmak istediğim form açılışında tabloları be içindeki alanları kontrol ederek yoksa tablo,alan ve Genarators eklemesi yapmak istiyorum.Tabloya ekleme denemdim çünkü kodlar nereye nasıl yazılıyor bir örnek verebilirseniz sevinrim.İlginiz için teşekkürler.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
diğer sql kodlarını nereye yazıyorsan onlarıda oraya yazacaksın.
alan varmı yokmu onun kontrolunude yapabilirsin. (fields i döngüye sokarak alan isimlerini kontrol edebilirsin. Fielddeflist ide kullanabilirsin).
generator varmı yokmu bakmak içinse

Kod: Tümünü seç

select count(*)  from rdb$generator where rdb$generator_name='gen_bilmemne_id' 
sql i ile bulabilirsin. count=1 ise generator var 0 ise yok. aksi durumda zaten bi hata vardır :)
kolay geslin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,

Kod: Tümünü seç

ALTER TABLE TABLE_ADI ADD ALAN_ADI VARCHAR(20);
şeklinde yeni bir alan ekleyebilirsiniz.

Kolay gelsin..
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

If DataModule1.IBDataSet_STOK.FieldList.IndexOf('ALANADI') < 0 then
begin
DataModule1.IBQuery1.Close;
DataModule1.IBQuery1.SQL.Clear;
DataModule1.IBQuery1.SQL.Add('ALTER TABLE TBL_STOK ADD ALANADI VARCHAR(20)')  ;
DataModule1.IBQuery1.Open;
DataModule1.IBQuery1.ExecSQL;
 end
 else
 SHOWMESSAGE('ZATEN VAR');
end;
alan eklediğinde

Kod: Tümünü seç

UNSECCESSFUL METADATA UPDATE
store rdb$relatıon_filelds
attep to store duplicate value (visible to active transsactions) in unique index "rdb$ındex_15"
hatası alıyorum
mrmarman hocamın cevaplarına baktım
viewtopic.php?t=21033&highlight=alter+table
viewtopic.php?t=20993&highlight=alter+table

linklerini inceledim ama malasef :( olmadı firebird de uygulayamadım.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
eğer IBDataSet_STOK un fields editöründe stok diye bir alan eklmemişsen ordaki değer her zaman 0 döner.
fields editöründe hiç alan olmayan bir query kullan.
onun sql ine

Kod: Tümünü seç

select * from stok
yaz ve fielddeflist i kullan.

exec yapacağın zamanda önce open sonra exec deme.
select yapıyorsan open insert,update, delete, alter vs. yapıyorsan exec...
verdiği hata mesajıda zaten alanı eklmişsin önceden...
tekrar eklemeye çalışıyor..
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam doğru söylüyorsunuz dediğinizi yaptım burada bir ikisoru daha olacak

1.Alanı FOREIGN yapmak istediğimizde aşağıdaki denemeyi yaptım ama olmadı örnek olarak veriyorum

Kod: Tümünü seç

IBQuery1.SQL.Add('FOREIGN KEY(KAYIT), ConstraintName(FK_KAYITT),On Field(KATEGORIID),FKTable(TBL_KATEGORI),FKField(KATEGORIID),UpdateRule(CASCADE),DeleteRule(CASCADE),IndexName(FK_KAYITT),IndexSorting(Ascending)   ');

FOREIGN tanımı sql nasıl yazılıyor.(Master a detay tablo bağlama için)

2.If DataModule1.IBDataSet_STOK.fielddeflist.IndexOf('ALANADI') < 0 then sorgusu yerine STOK Tablosunda tüm alanaları tek tek nasıl denetletebiliriz yani STOK tablosunda ALAN1,ALAN2,ALAN3... varmı diye kontrol ettirip ALAN yoksa ekleme yaptıracağım bu öneriyi zaten bana yazmışsınız ama döngüsü nasıl olacak bilemedim örnek verirseniz sevinirm :?

3.Generator ekleme nasıl alacak alter generator mü deniliyor :oops:
Cevapla