Tablo Update Etmek Hk. Yardım
-
- Üye
- Mesajlar: 21
- Kayıt: 02 Oca 2008 09:35
Tablo Update Etmek Hk. Yardım
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.
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.
Re: Tablo Update Etmek Hk. Yardım
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.
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.
Re: Tablo Update Etmek Hk. Yardım
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.
@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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Tablo Update Etmek Hk. Yardım
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...
-
- Üye
- Mesajlar: 21
- Kayıt: 02 Oca 2008 09:35
Re: Tablo Update Etmek Hk. Yardım
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.
-
- Üye
- Mesajlar: 21
- Kayıt: 02 Oca 2008 09:35
Re: Tablo Update Etmek Hk. Yardım
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?
firebird sql maneger da sql ile deneme yapıyorum yukarıdaki sorgu çalışmıyor. neden olabilir acaba?
Re: Tablo Update Etmek Hk. Yardım
alter table xxxx add deneme varchar(30)
şeklinde dener misin?
şeklinde dener misin?
Re: Tablo Update Etmek Hk. Yardım
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.
ç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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 21
- Kayıt: 02 Oca 2008 09:35
Re: Tablo Update Etmek Hk. Yardım
Kod: Tümünü seç
QARA.Close;
Qupdate.SQL.Clear;
Qupdate.SQL.Add('ALTER TABLE TABLEUPDATE ADD YENIKOLON VARCHAR(25)');
Qupdate.ExecSQL;
qupdate.Open;
Re: Tablo Update Etmek Hk. Yardım
s.a.
kontrol için vt ye tabloda bu alan varmı diye sorman lazım.
iki şekilde yaparsın.
biri .
gelen tabloda fieldsdeflistten alan adlarını kontrol edersin.
diğeride
burdan gelen değer 1 ise alan vardır 0 ise alan yoktur.
syntaxda hata olabilir test etmeden yazdım.
kolay gelsin.
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"
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
- sadettinpolat
- Moderator
- Mesajlar: 2130
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
-
- Üye
- Mesajlar: 21
- Kayıt: 02 Oca 2008 09:35
Re: Tablo Update Etmek Hk. Yardım
çok teşekkür ederim aradığım tam da buydu çok sağol.