Tablo Update Etmek Hk. Yardım

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
beyaztilki
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 09:35

Tablo Update Etmek Hk. Yardım

Mesaj gönderen beyaztilki »

Merhaba kolay gelsin. bu konuyu tam olarak nerede yazacağıma karar veremediğim için buraya yazdım. şayet hatalıysam şimdiden özür dilerim. ben elimdeki proje için firebird veritabanı kullanmaktayım. bu zamana kadar güzel bir yere geldim. şimdi ise bir soru takıldı aklıma. bu konuda çalışma yapmış arkadaşlarımdan yardım bekiyorum.

sıkıntı şu. proje kulanıma geçti. ancak içinde yapılması gereken bir ekleme meydana geldi. kullanıcıyı yormadan yapılan değişikliği nasıl projeye aktarırız. yani mevcut tablomda ve mevcut exem de değişiklik olduğunu varsayarsak exe yi kopyalamak yeterli olacaktır. ancak mevcut tabloda bu alan olmadığı için hata verecektir. bunu exe çalıştığı anda nasıl bir yol ile kontrol edip yoksa oluşturalacak bir sql sorgusu oluşturmalıyım.

ikincisi bir soru değil aslında bu tarz çalışma yapan arkadaşların fikrini almak. Elimde kullanıcı kayıtlarının tutulduğu bir alan var ve ben biraz daha ileriye giderek her kullanıcın yetkilerini tanımlayacağım bir tablo yapmak istiyorum. şöyleki x kullanıcısı kayıt girebilir ancak kayıt silemez. bunu firebirde yaptırmak kolay ancak malum sebelerden dolayı yeniden kurulduğu anda veya bilen biri tarafından açıldığı zaman yetkilerle oynaya bilir. bunun için aklıma açılışda paralo kontrolünden sonra sql sorguları yardımıyla yetkilendirme geldi. ne varki bu şekilde hiç çalışmadığım için olurmu olmaz mı olursa sıkıntısı ne olur bunun hakkında bilgi verirseniz sevinirim açıkcası. şimdiden teşekkür ederim.
mehmetcan
Üye
Mesajlar: 63
Kayıt: 14 Tem 2008 05:19

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen mehmetcan »

Veritabanı degişikligi sık sık olur ve bunları müşteriye sorunsuz aktarmak her zaman biraz problemlidir. Sıfırdan müşteriye bilgileri gir deyip, sadizm doruklarına çıkmak mümkünse de, bu yaklaşımın ticari sonucu felakettir. Kimse her degişiklikte yeniden bilgileri girmek zorunda oldugu bir programı satın almaz :)

Bu işin yapmanın en kolay yolu şudur:
- Tablolarda kullandıgın alanları dinamik tanımla, permanent fieldlar oluşturma.
- Program başlarken gereksiz tablolar açıp, buralardan bilgi alma. Mesela sadece kullanıcı tablosunu ve basit bazı tanımları oku.
- Programın içine database güncelle diye bir bölüm ekle, bu basitçe veritabanın metadatasını internetteki bir adresten indirsin.
- Metadata indirilince bu metadatayı kullanıp, yeni bir veritabanına restore et. IBX bileşenlerinde restore özelligi var.
- Eski veritabanına baglanıp, eski veritabanındaki tablolardan, yenisine aktarma yap. Aktarma kısmında basitçe eski tablolardaki alanların yenitablolarda olup olmamadıgını findfield ile kontrol et ve sonra buradaki datayı assign ile yeni veritabanına aktar. Basit bir tablo aktarımı yaz ve hangi tablolar aktarılacaksa hepsi için bu procedure tek tek çagır.
- Veritabanında eger autoinc alanlar varsa, set generator ile bunlara max degerlerini ver. Yoksa ilk insert te program hata verir.
- Bazı triggerler veritabanı aktarımı sırasında sorun çıkarabilir, bu nedenle bunlar alter trigger xxxx inactive yap, aktarım sonrası tekrar active hale getir.

Tüm işlemler sorunsuz bittiyse, eski veritabanini rename et ve yeniveritabanina eski veritabani ismini ver, kullanıcının tekrar baglanmasını sagla.

Biraz ugrastirici görünüyor, ama bu yöntem son derece basit ve sonuç veriyor. İnternet üzerinden database güncellemesi yaptırabilirsin bu şekilde.

Veritabanı dosyasına erişim müşterinin kontrolunda olan bir durumdur. Genelde bu veritabanı dosyasının açılıp, bilgilerin okumansı kolaydır ama pekçok uygulama için bu önemli degildir. Müşterilerin açacagı dosyalardaki bilgiler çokta önemli degildir. Çok yüksek düzeyde koruma istiyorsa özel bir dosya yaratıp, kullanıcı bilgilerini şifreleyip bu dosyada tutabilirsin. Clientdataset bu işleri görür, ama dedigim gibi eger bilgiler çok önemli degilse, ekstra ugraşmanın fazla bir anlamı yok ve o ayrı dosya kaybolursa müşteriyi de seni de epey ugraştırır.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen aslangeri »

s.a.
@mehmetcan arkadaşımızın yöntemi büyük vt değişikliklerinde güzel ancak ufak güncellemeler için biraz zahmetli bir yöntem.
yeni exe dosyası ilk çalıştığında vt de istenilen tablo varmı veya tabloda istenilen alan varmı veya alanın tipi doğrumu kontrol eder ve gerekli işlemleri yapar.
bu kontrolu sürekli yapmaması için vt de bir generator(veya sabit bir tabloda) vt versiyonu tutulur. Exe nin içindede programın uyumlu olduğu vt versiyonu tutulur. açılışta vt versiyon kontrolunden sonra gerekli işlemler yapılır.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen Battosai »

yetkilendirme için kullanıcı tablonda yetkiler diye bir alan oluşturup buraya kullanıcının hangi tablolara hangi izinleri olduğunu kendine göre bir formatla kaydet. Insert,Update;FalanTAblo/ gibi...program açılışında bu yetkileri global bir değişkene yükle ve her işlemden önce yetkisi varmı yokmu diye kontrol eden bir fonksiyon yaz. Esasında oldukça basit birşey uğraşırsan yaparsın...
beyaztilki
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 09:35

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen beyaztilki »

aslangeri yazdı:s.a.
@mehmetcan arkadaşımızın yöntemi büyük vt değişikliklerinde güzel ancak ufak güncellemeler için biraz zahmetli bir yöntem.
yeni exe dosyası ilk çalıştığında vt de istenilen tablo varmı veya tabloda istenilen alan varmı veya alanın tipi doğrumu kontrol eder ve gerekli işlemleri yapar.
bu kontrolu sürekli yapmaması için vt de bir generator(veya sabit bir tabloda) vt versiyonu tutulur. Exe nin içindede programın uyumlu olduğu vt versiyonu tutulur. açılışta vt versiyon kontrolunden sonra gerekli işlemler yapılır.
kolay gelsin.

bunun için elinde ufak bir örnek veya bu tarz uygulama içinde olan bir yer varmı şimdiden teşekkürler.
beyaztilki
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 09:35

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen beyaztilki »

alter table xxxx add column deneme varcahr (30)

firebird sql maneger da sql ile deneme yapıyorum yukarıdaki sorgu çalışmıyor. neden olabilir acaba?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen Hakan Can »

alter table xxxx add deneme varchar(30)

şeklinde dener misin?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen aslangeri »

s.a.
çalışmıyor derken hata mı vermiyor yoksa mesaj vermiyor ama işlemide yapmıyor mu?
hata veriyorsa verdiği hata mesajı nedir.
yok eğer hata vermiyorsa ama işlemide yapmıyorsa o zaman başka bir sorun var demektir. (commit etmeyi unutmadığını varsayıyorum. ;)
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
beyaztilki
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 09:35

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen beyaztilki »

Kod: Tümünü seç

  QARA.Close;
  Qupdate.SQL.Clear;
  Qupdate.SQL.Add('ALTER TABLE TABLEUPDATE ADD YENIKOLON VARCHAR(25)');
  Qupdate.ExecSQL;
  qupdate.Open;
arkadaşlar tekrar merhaba. bu konuyla ilgili bir çok dökümana baktım. uğraşarak bu hale geldi. şimdi kafamın basmadığı bir olay var onu paylaşmak istedim sizlerle. buraya kadar database ime kolon ekleye biliyorum. ancak ne yaptıysam bu kolon var sa bu işlemi geç diyemedim. bu konuda yardımcı olursanız sevinirim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen aslangeri »

s.a.
kontrol için vt ye tabloda bu alan varmı diye sorman lazım.
iki şekilde yaparsın.
biri

Kod: Tümünü seç

select top (1) * from tabloadi
.
gelen tabloda fieldsdeflistten alan adlarını kontrol edersin.
diğeride

Kod: Tümünü seç

select count(*) from rdb$relation_fields where rdb$field_name="alanadi" and rdb$realtion_name="tabloadi"
burdan gelen değer 1 ise alan vardır 0 ise alan yoktur.
syntaxda hata olabilir test etmeden yazdım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen sadettinpolat »

suraya bir goz atin...

viewtopic.php?f=19&t=24047
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
beyaztilki
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 09:35

Re: Tablo Update Etmek Hk. Yardım

Mesaj gönderen beyaztilki »

sadettinpolat yazdı:suraya bir goz atin...

viewtopic.php?f=19&t=24047
çok teşekkür ederim aradığım tam da buydu çok sağol.
Cevapla