firebird kayıt problemi

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
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

firebird kayıt problemi

Mesaj gönderen ozsal »

s.a Kolay gelsin arkadaslar.

Dah önceden sql server kullanıyordum. sql server enterprise manager ile de tüm istediklerimi yapıyordum.

En sonunda firebirde geçmeye karar verdim korkaraktan. ve ilk dakika da korktuğum bşıma geldi.
başlangıç sorularımı sormaya başlıyorum . Yardımcı olabilecek arkadaslara da şimdididen çok tşkler.


firebirdün de sql gibi kullanılması geçiş için bir kolaylık. Forumda yaptığım aramada bir arkadasımıda benimle aynı sorunu yaşamış fakat çözüm üretilememiş.Tekrar arayıp linki bulabilirsem eklerim

sql serverde ki gibi ;
datamodule ibdatabase ve ib transaction koyuyorum. ki sqlserva transaction a gerek yoktu.


gerekli bağlantıları yapıyorum. ibexpert ( ki 15 günü kaldı. ondan sonra ne olacak bilemiyorum ) ile database oluşturdum


forma bir adet button koydum.
bir adetde dbrid
onclick i database e bir kayıt eklemek.

buraya kadar her şey normal çalışıyor. ilginç olanı ise

buttona her tıkladığımda sadece son kayıdı gösteriyor. ya da bir önceki.
artı
ib expert te tabloyu incelemek istediğimde tablonun boş oldugunu görüyorum sorunun transaction da bir yerde olduğunu tahmin ediyorum . ama bilmiyorum. Bu sorunu nasıl çözebilirm.

( Daha önce hiç trans action kullanmadım ) .
teşekkürler ii çalışmalar.
zyildiz
Üye
Mesajlar: 115
Kayıt: 09 Mar 2004 01:22
Konum: Adapazarı

Mesaj gönderen zyildiz »

formun üzerine bir ibdatabase, bir ibtransaction, bir ibdataset ve bir de datasource ekleyin.

ibdatabase
propertiesinde default transaction kısmına ibtransaction1 i seçin,
sonra ibdatabase'in üzerine sag tıklayıp database editor kısmından da ibexpert (yada benzer programlara) olustrudugunuz database baglantınızı yapın. yine bu ekranda en alt kısımdaki login promt taki check işaretini kaldırın.
propertiesinde connected kısmını true yapın.

ibtransaction
propertiesinde default database kısmına ibdatabase1 i seçin ve aktive kısmını true yapın.

ibtadaset
propertiesinde database kısmına ibdatabase1 iseçin, selectsql kısmını tıklayın (acılan pencerede tablolarınızı görebilmeniz lazım) buradan baglanmak istediğiniz tablonuzu seçin ve oluşan sql cumleciğinin dogrulugunu kontrol edin. (select * from TABLO_ADI). active kısmını true yapın.

datasource
propertiesinden dataset kısmına ibdataset1 i seçin

foruma datacontrol sekmesinden bir dbgrid ve bir navigator ekleyelim. ve her ikisininde datasource kısmını datasource1 yapalım.

simdi tablodaki bilgilerinizi gridde görebilirsiniz ancak navigatörün + butonu pasiftir. yani kayıt yapamazsınız.

burası önemli

kayıt yapabilmek için anahtar alanların ayarlanması gerekmektedir. bunun için ibdataset1 in üzerine sağ tıklanır oradan dataset editor secilir. gettable fields tusuna basılır ve gorulen her iki ekrandaki kayıtlarda seçili duruma gelir key fields alanında adındanda anlaşılacagı gibi tablomuzdaki anahtar alanlar seçilir. update field alanının ise tamamı seçili olmalıdır. generete sql butonuna basılır. ok denir çıkılır dataset tekrar aktif true yapılır. artık kayıt yapabiliriz.

transaction
kayıt işlemini yaptıktan sonra kaydın aktif olması için transaction nın commit edilmesi gerekmektedir. bu işlemi ise ibdataset1 in afterpost olayına

Kod: Tümünü seç

ibdataset1.transaction.commit;
ibdataset.open ;


yazdıgımızda yaptıgımız kayıt veritabanına işlenmiştir. ibexpert benzeri programlarla kayıtlarımızı görebiliriz.

daha detaylı bilgi için

Kod: Tümünü seç

 http://www.delphiturkiye.com/index.php?page=ibxgiris.htm
http://www.delphiturkiye.com/forum/viewtopic.php?t=5800 
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

KAYIT SORUNLARI HALA HALLOLMADI

Mesaj gönderen baloglurecep »

Arkadaşlar ustalarım selam ve saygılar....
Hala kayıt sorununu gideremedim. Şöyleki oluşturulan tablolarda artan sayı olacak id alanı pk kısmı işaretli değilse ne yaparsam yapayım kayıt gitmiyor ve program kapatılıp açlılınca kayıtlar kaboluyor. ama pk alanı id fieldi oluşturulurken işaretlenmişse kaytta sıkıntı olmuyor. Ama bir sürü tablo yaptım Id alanları pk kısmlar işartli değil. nasıl yapabliirm? kayıtın bu pk alanı ile ilişkisi nedir? benim tablo yapışım da mı bir hata var?
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

yanlıs hatırlamıyorsam datasetin sql ayarlarında pk belitrmedigin için database defaults yapınca hiç birini seçmiyor.
bütün fieldleri kaldırıp tekrar ekledikten sonra datasetin sql ayarlarında pk olarak kullanmak istediğin fieldi seçip generate swl yaptığım zaman çözdüm diye hatırlıyorum. ama sadece hatırlıyorum. çünkü daha firebirdden vazgeçeli çok oldu. umarım doğru hatırlamışımdır
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

olmadı

Mesaj gönderen baloglurecep »

ozsal arkadaşım dediğini yaptım yine olmadı. anlamadım gitti ya.... siz neden vazgeçtiniz firibirdden.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Tahminim otomatik sayı üretme problemi var.Eğer öyle ise ;

Ibexbert kullanıyorsan :Diyelimki tablede Sıra_No alanın PK olarak belirlensin bu alan otomatik sayı üreteceği için buna bir Genarators atayacaksın Genarators sekmesine gelip sağa tıklayarak new genarators deyin
Name : örneğin GEN_SIRA olsun
Value : 0 olarak kalsın
commit edin veritabanındaki isimiz bitmiş olacak Ibexbert i kapatabilirsiniz

delphiyi açın
IBDataSet kullanıyorsanız ve gerekli sql ve bağlantılarınız tamam ise Genaratorfieldı seçtiğinizde Genarotor bölümünde GEN_SIRA yı göreceksiniz(combada),Fields bölümüde hangi alanımız PK olarak ayarlanmış ise ki ben burda Sıra_No olarak belirlemiştim onu seçiyorsunuz.On new rekord ayrı seçili kalsın tamam deyin artık yeni kayıt eklemelerinde otomatik sayınız üretilecektir

kaydetmek için

Kod: Tümünü seç

IBDataSet1.post;
 IBTransaction1.CommitRetaining;
şeklinde kullanabilirsiniz.
Cevapla