Tabloda Alan Var mı?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Tabloda Alan Var mı?
selam arkadaşlar....Güncelleme işlemi yapacağım. ancak veri tabanıma yeni iki alan ekledim. alter table komutu ile alanları ekliyorum. ekleme işini de datamodul cretatinde yapıyorum .ilk açılışta alanlar eklediği için diğer açılışlarda bu alanlar zaten var diye hata veriyor. Tabloda alanların varlığını nasıl kontrol edeceğim. bilen varsa yardımcı olurmu?selam ve saygılar....
Çok basit boş bir SQL sorgusu yap. örneğin
gibi anlamsız olsun. Bu sorgu boş sonuç döndürür ancak alan isimlerin gelir. Sonra da bu Query'nin şeklinde yorumlarsınız..
Kod: Tümünü seç
SELECT * FROM Tablo WHERE 1=0
Kod: Tümünü seç
If SorguQuery.FieldList.IndexOf('hangialan') < 0 then (oluştur) else (zaten var)
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
TEŞEKKÜR
arman hocam çok teşekkür ederim dediğinizi yaptım ve oldu. bir soru daha sorabilirmiyim. çoklu alan kontrolunu nasıl yapayım. her alanı tek tek mi kontrol edeyim.
- Her projemde tablolar ve veri alanlarını ilgili proje içinden otomatik üretilmesini sağladığımdan bu üretilecek SQL kodunu şöyle oluşturuyorum. Aynı zamanda tek merkezden çalışıyorum. Yani yazılım içerisinde farklı farklı yerlerde aynı koddan yok.
- Bu örneği şunun için verdim, göreceğin gibi her satırda bir alanın adı ve tanımı var. Bu procedure ile KomutListesi isimli TStringList'e bu text üretiliyor.
- Şimdi programının herhangi bir yerinde bu SQL kodunu üreten bu procedure çağrıldığında elde ettiğim listeyi Copy, Delete gibi string operasyonlarla alan isimleri, tip ve uzunluğu şeklinde çekebiliyorum. Böylece olması gerekenlerin alan isimlerini elde ediyorum.
- Bu listeyi dilediğim her yerde kullanıyorum. Yeni bir alanı bu yapıya ekledim diyelim. Program açıldığında veritabanı tablosu mevcut değilsetümüyle bu kodu SQL kodu olaraj işletiyorum tablo create ediliyor. Tablo var ise bu sefer listedeki alan isimlerinin var olup olmadığını döngü ile kontrol ediyorum. Yoksa Alter Table için gerekenleri buradaki ilgili eksik olduğu tespit edilmiş alanın bilgilerinden faydalanmasını sağlıyorum.
- Şahsen şöyle bir otomatik sistem kurdum hep bunu uyguluyorum. Ben gidiyorum sadece bu yapı içindeki değişikliği yapıyorum, program bir dahaki çalışmasında bu değişikliği tabloya otomatik uyguluyor...
- Umarım kafanı karıştırmadım...
Kod: Tümünü seç
Procedure StrucOlustur_Tablo1(KomutListesi : TStringList);
Const
FieldTanimi = '%s %s(%d),';
FieldTanimiDate = '%s %s,';
begin
{ --- Table Structure --- }
With KomutListesi do
begin
Clear;
Add( 'CREATE TABLE Tablo1 (');
Add( Format(FieldTanimiDate, ['S_KaySiraNo' ,'AutoIncrement', 0 ] ) );
Add( Format(FieldTanimiDate, ['S_SerieId' ,'Numeric', 0 ] ) );
Add( Format(FieldTanimiDate, ['S_MovieId' ,'Numeric', 0 ] ) );
Add( Format(FieldTanimi, ['S_Ses' ,'Text', 3 ] ) );
Add( Format(FieldTanimi, ['S_EpNum' ,'Text', 3 ] ) );
Add( Format(FieldTanimi, ['S_EpName' ,'Text', 100 ] ) );
KomutListesi[KomutListesi.Count-1] := Copy(KomutListesi[KomutListesi.Count-1], 1, Length(KomutListesi[KomutListesi.Count-1])-1); // Son Virgülü Attık
Add( ')');
end;
end;
- Şimdi programının herhangi bir yerinde bu SQL kodunu üreten bu procedure çağrıldığında elde ettiğim listeyi Copy, Delete gibi string operasyonlarla alan isimleri, tip ve uzunluğu şeklinde çekebiliyorum. Böylece olması gerekenlerin alan isimlerini elde ediyorum.
- Bu listeyi dilediğim her yerde kullanıyorum. Yeni bir alanı bu yapıya ekledim diyelim. Program açıldığında veritabanı tablosu mevcut değilsetümüyle bu kodu SQL kodu olaraj işletiyorum tablo create ediliyor. Tablo var ise bu sefer listedeki alan isimlerinin var olup olmadığını döngü ile kontrol ediyorum. Yoksa Alter Table için gerekenleri buradaki ilgili eksik olduğu tespit edilmiş alanın bilgilerinden faydalanmasını sağlıyorum.
- Şahsen şöyle bir otomatik sistem kurdum hep bunu uyguluyorum. Ben gidiyorum sadece bu yapı içindeki değişikliği yapıyorum, program bir dahaki çalışmasında bu değişikliği tabloya otomatik uyguluyor...
- Umarım kafanı karıştırmadım...
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
teşekkür
hocam bilgilerinie beyni sağlık. dediğini anladım benim çok işimi görecek. acizane fikirlerini almak isterim. sitemdeki programlara bakarmısınız. http://www.balogluyazilim.com
slm mrmarman hocam birinci bölümde verdiğiniz kodlamayı firebird için nasıl düzenleyebiliriz.
açıklamanız şeklinde bir şey yapmak istiyorum bir buton aracılığı ile firebird de Create ve alter table yöntemi ile table yada alan eklemesi yapıyorum fakat yazdığınız Procedure firebird için nasıl kullanabiliriz yani
butonumuzdaki
döngü ile tablo var mı yokmu kontrol ettirip varsa alanlarının bizim yazacağımız kod ile kontrol ettirip alan ve/veya typ ını düzenlemeği nasıl sağlayabiliriz bu alanları sağlarken özellikle FK (foreign key) tanımlası nasıl elde edilir.
Kodlarınızın kullanım şeklini biraz açabilirseniz çok sevinirim (Procedure delphide kullanımı).
Bu listeyi dilediğim her yerde kullanıyorum. Yeni bir alanı bu yapıya ekledim diyelim. Program açıldığında veritabanı tablosu mevcut değilsetümüyle bu kodu SQL kodu olaraj işletiyorum tablo create ediliyor. Tablo var ise bu sefer listedeki alan isimlerinin var olup olmadığını döngü ile kontrol ediyorum. Yoksa Alter Table için gerekenleri buradaki ilgili eksik olduğu tespit edilmiş alanın bilgilerinden faydalanmasını sağlıyorum.
açıklamanız şeklinde bir şey yapmak istiyorum bir buton aracılığı ile firebird de Create ve alter table yöntemi ile table yada alan eklemesi yapıyorum fakat yazdığınız Procedure firebird için nasıl kullanabiliriz yani
butonumuzdaki
döngü ile tablo var mı yokmu kontrol ettirip varsa alanlarının bizim yazacağımız kod ile kontrol ettirip alan ve/veya typ ını düzenlemeği nasıl sağlayabiliriz bu alanları sağlarken özellikle FK (foreign key) tanımlası nasıl elde edilir.
Kodlarınızın kullanım şeklini biraz açabilirseniz çok sevinirim (Procedure delphide kullanımı).
@haydarxxx,
Firebird kullanıyorsanız IBExpert kesin vardır. IBExpert'de alan oluştururken, değiştirirken vs. vs. önce SQL oluşturur, kullanıcıya gösterir ve biz de 'commit' deriz, değişiklik gerçekleşir.
Yani bu tür işlemler için gerekli SQL cümleciklerini IBExpert'den öğrenebilirsiniz.
Ayrıca herhangi bir tabloyu açıp, DDL sekmesine tıkladığınızda da o tabloyu 0'dan üretmek için gereken cümlecikleri görebilirsiniz (index vs. için).
IBDatabase'in GetTables ve GetFields prosedürleri de tablo ve alan isimlerini almak için daha kolay bir yöntem olur.
Kolay gelsin...
Firebird kullanıyorsanız IBExpert kesin vardır. IBExpert'de alan oluştururken, değiştirirken vs. vs. önce SQL oluşturur, kullanıcıya gösterir ve biz de 'commit' deriz, değişiklik gerçekleşir.
Yani bu tür işlemler için gerekli SQL cümleciklerini IBExpert'den öğrenebilirsiniz.
Ayrıca herhangi bir tabloyu açıp, DDL sekmesine tıkladığınızda da o tabloyu 0'dan üretmek için gereken cümlecikleri görebilirsiniz (index vs. için).
IBDatabase'in GetTables ve GetFields prosedürleri de tablo ve alan isimlerini almak için daha kolay bir yöntem olur.
Kolay gelsin...
ulu coder teşekkür ediyorum dediğiniz gibi hepsi IBExpert te varmış sağolasın
Örneğin
Tablo isimlerini bir listbox a döngüye sokarakmı alıyoruz.(nasıl) Diyelim ki Listbox1 e A,B,C isimli tabloları aldık (veri tabanında mevcut olan).
Başka bir listboxt2 stringde tanımlı A,B,C,D isimleri var
Ama listboxt1 de D tablosu yok.Eğer D tablosu yoksa ekle diyeceğiz böyle bir yöntem ile mi tablo kontrolü yaptırılıp olmayan tablo ekletiliyor.Örnek verebilirseniz çok menun olurum.
Burada Z alanı yoksa ekleme yapıyoruz bu şekilde tablo ve alanları bir döngü yada mrmarman hocamın yazdığı Procedure ile tablo yoksa ekle alan yoksa ekle şekline getirme nasıl olur.
nasıl kullanılıyor.Biraz açarmısınız.IBDatabase'in GetTables ve GetFields prosedürleri
Örneğin
Tablo isimlerini bir listbox a döngüye sokarakmı alıyoruz.(nasıl) Diyelim ki Listbox1 e A,B,C isimli tabloları aldık (veri tabanında mevcut olan).
Başka bir listboxt2 stringde tanımlı A,B,C,D isimleri var
Ama listboxt1 de D tablosu yok.Eğer D tablosu yoksa ekle diyeceğiz böyle bir yöntem ile mi tablo kontrolü yaptırılıp olmayan tablo ekletiliyor.Örnek verebilirseniz çok menun olurum.
Kod: Tümünü seç
If DataModule1.IBDataSet_STOK.FieldList.IndexOf('Z') < 0 then
begin
DataModule1.IBQuery2.Close;
DataModule1.IBQuery2.SQL.Clear;
DataModule1.IBQuery2.SQL.Add('ALTER TABLE TBL_STOK ADD Z INTEGER') ;
DataModule1.IBQuery2.ExecSQL;
SHOWMESSAGE('ALAN EKLENDİ')
end
else
SHOWMESSAGE('ZATEN VAR');
end
Makaleler kısmında hazırlık yaptım inceleyebilirsiniz.
bkz.
viewtopic.php?t=21162&start=0&postdays= ... highlight=
bkz.
viewtopic.php?t=21162&start=0&postdays= ... highlight=