Generator sıfırlama

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
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Generator sıfırlama

Mesaj gönderen varyemez »

Bir tablonun içini sık sık boşaltmam gerektiği için SP yazdım. Ayrıca autoinc alan var ve bunu da tablo boşaltırken sıfırlamak gerekiyor.

DELETE FROM GIRIS1;
SET GENERATOR GN_GK TO 0;

SUSPEND;

şeklinde olmalı diye biliyorum ama bir türlü compile etmiyor hata veriyor. generator satırı olmadan sorunsuz şekilde çalışıyor.
Bu sıfırlama işini başka nasıl yapabilirim.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Generator sıfırlama

Mesaj gönderen emin_as »

Ben dogrudan ibscript kullanarak generator u düzenliyorum.
Aşagıdakine benzer bir kod işimi görüyor.

Kod: Tümünü seç

ibtransaction1.active:=True;
ibscript1.script.text:='set generator  xxx  to 0';
ibscript1.executescript;
ibtransaction1.commit;
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: Generator sıfırlama

Mesaj gönderen varyemez »

Çok teşekkür ederim bu acil cevabınıza @emin_as . deneyeceğim script kullanmayı da.
bu arada birşey sorayım , transaction mantığında biraz yeniyim. her kullandığımız ibdataset , ibquery için farklı transaction tanımlıyorum , bu yaptığım doğru mu ypksa gereksiz mi. Yani şimdi bu ibscript i mesela deminki GIRIS1 tablosunu düzenlemek için kullandığım datasetin transactionuna bağlayabilirmiyiz.
daha önce clientdataset kullanıyordum tablo boşaltmak için clientdataset.emptytable çok kolaylık sağlıyordu.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Generator sıfırlama

Mesaj gönderen emin_as »

Tüm baglantılar için tek transction veya her baglantı için ayrı transaction kullanmanın avantajları ve dezavantajları vardır. Tek transaction olursa, herhangi bir sorun çıkarsa commit edilmemiş diger bilgiler de geri alınacaktır. Birden fazla transaction olursa, bu durumda kullandıgın ibquerylerin yaptıkları işlemleri görmek için transactionları açıp, kapaman gerekir.

Örnegin bir yerde stok kartı ve fatura girişi pencerelerin var ve fatura girerken, yeni stok kartı tanımlaman gerekti.
- Tek transaction olursa: Stok kartını tanımlayabilir ve fatura girişine devam edebilirsin. Ortak transaction oldugundan birbirlerindeki degişikleri göreceklerdir. Fakat fatura girerken herhangi bir sorun çıkarsa, yeni açtıgın stok bilgileri de kaydedilmemiş olacaktır.
- Ayrı transaction olursa: Yeni stok kartı tanımlasan bile, fatura transactioni önceden başladıgı için stok kartıyla tanımlanan bilgileri görmeyecektir. Transaction ın açılıp, kapatılması gerekir.

Firebird kullanırken bu iki yöntem de idealden uzaktır, dogrusu okumalar ve yazmalar için ayrı transactionlar kullanmaktır. Delphi ile gelen ibx iki ayrı transactionlarla çalışma destegi vermemektedir. Daha profesyonel olan ibdac ve fibplus bileşenleri iki ayrı transactionı desteklemektedir.

http://www.devart.com/ibdac/overview.html
http://www.devrace.com/en/fibplus/
Cevapla