Firebird database.ini kontrollü update işlemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Firebird database.ini kontrollü update işlemi

Mesaj gönderen onclick_lik »

S.a arkadaslar projemde Firebird veritabanını kullanmaktayım.VT de kullandığım alanlarımı bir ini dosyasında saklamaktayım.Net üzerinde bulunan bir ini dosyasıyla programımda bulunan ini dosyasını karşılaştırarak, netteki ini dosyasındaki yeni eklenmiş tablo ve alanları programımdaki VT ye eklemek istiyorum.Kısaca Update işlemi.Asıl sorun VT de 30 a yakın tablo ve her tablonun en azından 20 şerde alanı bulunmaktadır.

Kod: Tümünü seç

[TABLE_1]
NAME=CUSTOMER
FIELD_1_NAME=ID
FIELD_1_TYPE=INTEGER
FIELD_1_LENGTH=4

FIELD_2_NAME=CUS_ID
FIELD_2_TYPE=VARCHAR
FIELD_2_LENGTH=20
FIELD_2_CHARSET=WIN1254
FIELD_2_COLLATION=PXW_TURK

FIELD_3_NAME=CUS_FIRM
FIELD_3_TYPE=VARCHAR
FIELD_3_LENGTH=50
FIELD_3_CHARSET=WIN1254
FIELD_3_COLLATION=PXW_TURK

FIELD_4_NAME=CUS_NAME
FIELD_4_TYPE=VARCHAR
FIELD_4_LENGTH=50
FIELD_4_CHARSET=WIN1254
FIELD_4_COLLATION=PXW_TURK
...
...
...
...

Kod: Tümünü seç

[TABLE_2]
NAME=CUSTOMER_PRICE
FIELD_1_NAME=ID
FIELD_1_TYPE=INTEGER
FIELD_1_LENGTH=4

FIELD_2_NAME=CUSTOMER
FIELD_2_TYPE=VARCHAR
FIELD_2_LENGTH=20
FIELD_2_CHARSET=WIN1254
FIELD_2_COLLATION=PXW_TURK

FIELD_3_NAME=PRODUCT_ID
FIELD_3_TYPE=INTEGER
FIELD_3_LENGTH=4

FIELD_4_NAME=PRICE
FIELD_4_TYPE=DOUBLE
FIELD_4_LENGTH=8

FIELD_5_NAME=SEL
FIELD_5_TYPE=INTEGER
FIELD_5_LENGTH=4
...
...
...
yukarıdaki gibi tablo ve onlara ait alanlarım var.İnileri kontrol edecem kontrolde yeni eklenmiş tablo ve alanları tespit ederek gerekli yerlere SQL ile ekleme yapacam.
Örneğin 1.tabloma yeni bir alan eklendi ben bunu kontrol ederek SQL ile

Kod: Tümünü seç

alter table TABLE_1 add yeni_alan varchar (25);
veya

Kod: Tümünü seç

create table TABLE_32
gibi ekleme yapacam.
Tablolarım ve onlara ait alan cok olunca işim biraz zorlanıyo :cry: Nasıl bir sistem önerirsiniz bu konu hakkında? İni dosyalarını hızlı bir şekilde kontrol etmem lazım.

viewtopic.php?t=21162&highlight=firebird buradaki sayın @mrmarman hocamızın ADO ile yapmış olduğu işleme baktım ama 2 gündür bu işle uğraşınca onuda pek anlayamadım :roll:
Bu konuda bilgisi olan arkadaşlardan , üstadlarımdan allah şimdiden razı olsun..
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

vt içinde versiyon diye yeni bir tablo açın ve her uygulamada buna versiyonu girin. programın içindede bir sabite bir değer verin. uygulama açıldığında bu sabitin değeri db den büyük ise db de update gerekiyor demektir. her sürüm için gerekli alter işlemlerini sıra ile yapan bir kodunuz olur. işlem bitince kontrolü yeniden başlatırsınız böylece gereken bütün updateler yapılmış olur. bu denenmiş bir işlemdir. gayet iyi sonuç verir.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Üstad benim sorumu biraz yanlış anladın heralde..Ben programı zaten bi şekilde kontrol ederek update işlemi yapıyorum..Bazı durumlarda VT ye yeni tablolar ve alanlar eklemem gerekiyo ben bu tablo ve alanları SQL ile programdaki VT ye eklemek için nasıl bi yol izlemeliyim. İni dosyalarına bakacam ve duruma göre VT ye ekliyecem..Dediğiniz şekilde olmaz.yani burda amacım sadece VT ye alan veya tablo eklemek..
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Şimdi veri tabanlarını sürüm sürüm gruplandır ve her bir veri tabanının sürümünü bir künye tablosunda tut. Örneğin 1. sürümü bir kenara koy ve istediğin kadar değişiklik yap. Sonra değişiklik yaptığın veri tabanının sürüm numarasını 2 olarak künyesinden değiştir. IBExpert i aç ve Database comparer ı kullaran eski veri tabanını yeni veri tabanına dönüştürecek scripti otamatik olarak al.

Uygulama çalıştığında eğer veri tabanı 1. süründe ise biraz önce elde ettiğin scripti çalıştırarak 2. sürümüne güncelleyebilir. Böylece manuel bir işlem yapmadığın için hata şansın çok düşük olur. INIler ile hiç uğraşma.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

ikutluay yazdı:vt içinde versiyon diye yeni bir tablo açın ve her uygulamada buna versiyonu girin. programın içindede bir sabite bir değer verin. uygulama açıldığında bu sabitin değeri db den büyük ise db de update gerekiyor demektir. her sürüm için gerekli alter işlemlerini sıra ile yapan bir kodunuz olur. işlem bitince kontrolü yeniden başlatırsınız böylece gereken bütün updateler yapılmış olur. bu denenmiş bir işlemdir. gayet iyi sonuç verir.
aynen söylenilen yöntemi uyguluyorum.
Programımın ilk sürümünden bu yana DB en az 7-8 kez değişti.
Ama bu yöntem ile hangi sürüm veritabanı olursa olsun sorun olmadam dbyi güncelleyebiliyorum
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Bunun yanında bu çok profösyönelce olmasa da şu yolu da izleyebilirsin.
Tabloloardaki sütun sayısına oranlı bir şekilde METIN1, METIN2, METIN3, SAYI1, SAYI2, TARIH1, TARIH2... şeklinde alanlar oluştur ve eğer minör bir tablo değişikliği yapman gerekiyorsa bu alanları kullan. Tabi söylediğim gibi bu çok profösyönelce değil ancak kimi zaman çok pratik oluyor.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

onclick_lik yazdı:Üstad benim sorumu biraz yanlış anladın heralde..Ben programı zaten bi şekilde kontrol ederek update işlemi yapıyorum..Bazı durumlarda VT ye yeni tablolar ve alanlar eklemem gerekiyo ben bu tablo ve alanları SQL ile programdaki VT ye eklemek için nasıl bi yol izlemeliyim. İni dosyalarına bakacam ve duruma göre VT ye ekliyecem..Dediğiniz şekilde olmaz.yani burda amacım sadece VT ye alan veya tablo eklemek..
Merhaba

Hayır sorunu tam ve doğru olarak anladım.

Benim önerdiğim yöntemde; nete olan bağımlılığın vs ortadan kaldırıyor hız vs sorunda olmauyor. üstelik, case blogu içinde gir çık yapıyorsun ve diyelimki database 3 sürüm geri sıra ile gereken bütün updateler yapılmış oluyor bu durumda. diğer arkadaşları okursan onlardanda dediğim yöntemi kullananlar olduğunu görüyorsun. bence yol yakınken buna dön.

Web den data kullan ama oda ne için olur. exe güncellemek için + program lisans kontrolü için.

saygılar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Arkadaşlar dediğiniz yöntemler cok güzel ama benim inilerle yapmaktan başka şansım yok...Bilgisayardaki ve serverda ki İNİ leri karşılaştıracam yeni alan ne var veya yeni eklenmiş table ne? kontrol edip ona göre bilgisayardaki VT ye eklemem lazım..Herşey Serverdeki İNİ dosyasına eklenen bilgilere bağlı..
Bu İNİleri kontrol etmem için bi öneriniz varmı? Faststring componentini kullanarak biraz bişiler yaptım tablo ve alan sayısı cok olduğu için biraz zorlanıyorum :duvar: hem bilgisayardaki hem serverdeki İNİleri tek tek kontrol etmem lazım.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

dediğin şekilde yapacaksan tek önerim virtual treeview in ini eklentili bir komponenti vardı onu kullanman. ama ordan bile çok bir verim bekleme. çünkü sonuçta iş senin netten indirme hızına bağlı.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Netin hızı benim için şu an pek önemli değil..Ben netten İNİ dosyasını cekiyom ve bilgisayardaki ile karşılaştırma yapacam karşılaştırmada farklı bişi görürsem ona göre SQL komutlarıyla VT ye alan veya tablo ekleyecem.
Virtual Treeview'e bakıyım sonucu bildiririm..Teşekkürler
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

virtual treeview delphi ide de filanda kullanılıyor. çoğuluk yerde assembly ile filanda optimize edildiğinden diğer rakiplerine göre bir kaç gömlek üstün. üstüne ini ve xml içinde eklentiler yazılmıştı benim hatırladığım kadarı ile.

başarılar sana
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Yok üstad virtualİNİ treeview de olmadı :( ...Benim her iki İNİyi de tek tek kontrol ederek ona göre ekleme yapmam lazım.Bunuda faststring componenti ile düşünüyorum..Sizce nasıl bişey önerirsiniz aramada? (30 tane kadar tablom ve her tabloya ait 20-25 alan var)
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Bize söyleyecek tek şey kaldı sanırım.. Allah yardımcın, zihnin açık olsun:)
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Amin cümlemizin yar ve yardımcısı olsun...İnşallah iyi bi sonucla bitiririz.
drbastem
Üye
Mesajlar: 15
Kayıt: 03 Oca 2008 10:17
İletişim:

Mesaj gönderen drbastem »

CleverComponet Diye bir database karşılatırma ve update componeti var. ama üçretli. bu componette 2 database(firebird. Mysql, Mssql,Oracle vb) database ler karşılatrıma yapılmakta ve istenmesi halinde asıl databasedeki table ,triger, st. procedure vs. gibi tüm database elemanları ile karşılaştırme yapacağın databasedeki alan,triger,procedure vs karşılatırıp değişikliği yapmaktadır. delphi içinde de kullanılma imkanı var. ayrıca sizin ını file içine yazacağınız kodlar uzantısı sql olacak şekilde kayıt yaparsznı dediğiniz değişiklikler anında yapılabilir. deneme sürümü aşağıdak adresde bulabilirisiniz.
http://www.bastem.com.tr/frbastem.RAR
Burada master kısmı düzügün database,target ise değişiklik yapmak istedipiniz data base.
Cevapla