Interbase 7'de 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ı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Interbase 7'de kayıt problemi ?

Mesaj gönderen macsonfor »

Bir Tüp Takip programı yazarak müşterime teslim ettim ve sonra aynı günün akşamı telafon geldi :

------------------------------------------------------------------------------------
Müşteri ; Nasılsın...
Ben ; Sağol sen nasılsın...
Müşteri ; Abi Bir sorun var ya...
Ben ; Neymiş Sorun...
Müşteri ; 72 Tane abone kaydettim ama abone listesinde 32 tane görünüyor...
Ben ; Nasıl Olur Abi böyle bişeyin olması gerçekten şaşırtıtcı
Müşteri ; Evet bende katııyorum yanlız şunu da söyleyim programı açıp kattığımda yeni bir abone kaydettiğimda abone numarası 73 olarak görünüyor kapatıp açtığımda da abone yine yok kayıt sayısı 32
Ben ; Tamam Abi Ben seni sonra ararım dedim.
------------------------------------------------------------------------------------


Bende hemen projeyi açtım ve kontrol ettim kayıt kodu şöyle

Kod: Tümünü seç

procedure TYENIABONE1.dxButton2Click(Sender: TObject);
begin
if (DATA1.ABONE.Locate('ADI',Edit2.Text,[]))
and(DATA1.ABONE.Locate('SOYADI',Edit3.Text,[]))and(DATA1.ABONE.Locate('EVADRESI',Edit4.Text,[])) then
Application.MessageBox('Bu Kayıt Daha Önce Girilmiş','Uyarı',MB_OK)
else
if (Edit2.Text='')or(Edit3.Text='')or(Edit4.Text='')
or(Edit5.Text='')or(ComboBox1.Text='')or(ComboBox2.Text='')
or(Edit1.Text='') then
begin
ShowMessage('Abone Kaydı İçin Bilgiler Yetersiz');
Edit2.SetFocus;
end else begin
     DATA1.ABONE.Insert;
     DATA1.ABONE.Edit;
     DBGrid1.Columns.Grid.Fields[0].Text:=Edit2.Text;
     DBGrid1.Columns.Grid.Fields[1].Text:=Edit3.Text;
     DBGrid1.Columns.Grid.Fields[2].Text:=ComboBox1.Text;
     DBGrid1.Columns.Grid.Fields[3].Text:=ComboBox2.Text;
     DBGrid1.Columns.Grid.Fields[4].Text:=Edit4.Text;
     DBGrid1.Columns.Grid.Fields[5].Text:=Edit5.Text;
     DBGrid1.Columns.Grid.Fields[6].Text:=Edit6.Text;
     DBGrid1.Columns.Grid.Fields[7].Text:=Edit7.Text;
     DBGrid1.Columns.Grid.Fields[8].Text:=Edit8.Text;
     DBGrid1.Columns.Grid.Fields[9].Text:=Edit9.Text;
     DBGrid1.Columns.Grid.Fields[10].Text:=Edit10.Text;
     DBGrid1.Columns.Grid.Fields[11].Text:=Label7.Caption;
     DBGrid1.Columns.Grid.Fields[12].Text:=Edit1.Text;
     DATA1.ABONE.Post;
     DATA1.ABONE.Refresh;
     JvWaitingProgress1.Visible := True;
     JvWaitingProgress1.Active := True;
     ShowMessage('Abone Kaydı Başarılı');
     JvWaitingProgress1.Visible := False;
     Edit2.Text := '';
     Edit3.Text := '';
     ComboBox1.Text := '';
     ComboBox2.Text := '';
     Edit4.Text := '';
     Edit5.Text := '';
     Edit6.Text := '';
     Edit7.Text := '';
     Edit8.Text := '';
     Edit9.Text := '';
     Edit10.Text := '';
     Edit1.Text := '';
     Edit2.SetFocus;
    end;
end;
Diyeceksiniz transactionlar nerde onlarıda denedim fakat sonuç aynı
Abone Tablosunun After postuna

Kod: Tümünü seç

1 - )
Data1.Abone.Transaction.Commitretaining;
olmadı

Kod: Tümünü seç

2 - )
Data1.IbTransaction1.Commitretaining;
olmadı

Kod: Tümünü seç

3 - )
Data1.IbTransaction1.commit;
yaptım olmadı ben ne yapacağımı şaşırdım valla bu sorunla sanırım forumda 1 veya iki kişi karşılaşmış onlarda nasıl yapmışlar anlayamadım neyse benim sorun bu ben içinden çıkamad düşündüm interbase serverde mi hata var yoksa IBX bileşenlerindemi yoksa veritabanında mı hata var ama interbase serverde hata olsa Ibexpert'te de kayıt yapmazdı ki yapıyor o zaman bu değil. IBX bileşenlerine bakıyorum Delphi 7 Enterprise kullanıyorum ki delphi 7 'de IBX bileşenleri herhalde ki güncel versiyonlar burda kesin bir karar alamadım. Veritabanında Hata olabilirmi onuda çıkartamadım gitti. Neyse umarım yeterince açıklayıcı olabilmişimdir.
Kolay Gelsin...
Bilgi Paylaşıldıkça Çoğalır
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Interbase 7'de kayıt problemi ?

Mesaj gönderen sadettinpolat »

macsonfor yazdı:

Kod: Tümünü seç

procedure TYENIABONE1.dxButton2Click(Sender: TObject);
begin
if (DATA1.ABONE.Locate('ADI',Edit2.Text,[]))
and(DATA1.ABONE.Locate('SOYADI',Edit3.Text,[]))and(DATA1.ABONE.Locate('EVADRESI',Edit4.Text,[])) then
Application.MessageBox('Bu Kayıt Daha Önce Girilmiş','Uyarı',MB_OK)
locate kullanmaktan mümkün olduğu kadar uzak durun. mümkünse hiç kullanmayın. bunun yerine query ile işlemlerinizi yapın.

macsonfor yazdı:

Kod: Tümünü seç

else
     DATA1.ABONE.Insert;
     DATA1.ABONE.Edit;



insertten sonra edit demenize gerek yok.
macsonfor yazdı:

Kod: Tümünü seç



     DBGrid1.Columns.Grid.Fields[0].Text:=Edit2.Text;
     DBGrid1.Columns.Grid.Fields[1].Text:=Edit3.Text;
     DBGrid1.Columns.Grid.Fields[2].Text:=ComboBox1.Text;
     DBGrid1.Columns.Grid.Fields[3].Text:=ComboBox2.Text;
     DBGrid1.Columns.Grid.Fields[4].Text:=Edit4.Text;
     DBGrid1.Columns.Grid.Fields[5].Text:=Edit5.Text;
     DBGrid1.Columns.Grid.Fields[6].Text:=Edit6.Text;
     DBGrid1.Columns.Grid.Fields[7].Text:=Edit7.Text;
     DBGrid1.Columns.Grid.Fields[8].Text:=Edit8.Text;
     DBGrid1.Columns.Grid.Fields[9].Text:=Edit9.Text;
     DBGrid1.Columns.Grid.Fields[10].Text:=Edit10.Text;
     DBGrid1.Columns.Grid.Fields[11].Text:=Label7.Caption;
     DBGrid1.Columns.Grid.Fields[12].Text:=Edit1.Text;

bu şekilde atama yerine DATA1.ABONEAdi.Asstring :='aaa'; gibi ifadeleri kullanırsan daha iyi olur.

macsonfor yazdı:

Kod: Tümünü seç



     DATA1.ABONE.Post;

post komutundan hemen sonra Data1.IbTransaction1.Commitretaining; kullanabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
csyasar
Üye
Mesajlar: 646
Kayıt: 25 Şub 2004 10:14
Konum: Tokat

Mesaj gönderen csyasar »

sadettin polat'a katılıyorum. ama bir nokta var:

projenizde locate kullandığınız tabloda eğer query kullanıysanız sadettinpolatın tavsiyesine uyup kesinlikle locate kullanmayın... ama yok table kullanıyorsanız o zaman locate en iyisi.

bir de siz dbgrin kullandığınız için galiba dbgridde görürsem kayıtlara işlenir diye düşünüyorsanız ama yanlış düşünüyorsunuz.

Eğer parametreleri tabloya atarsanız daha sağlıklı olur. çünki dbgridde adam sütünü sola veya sağa taşısa yanlış yere atama yaparsınız. ama dediğim gibi parametreyi table a atarsanız sorun çıkmaz

Şu şekilde:

1.

Kod: Tümünü seç

Table1ADI.value:=edit1.text;
2.

Kod: Tümünü seç

Table1.FieldByName('ADI').value:=Edit1.Text
tabloya insert deyince yeni kayıt eklersin. edit dersen varolan kaydı düzenlersin.

önce insert ve hemen ardından edit kullanman gereksiz, manasız ve anlamsız... yeni kayıt yapacaksan insert. eski kaydı düzenleyeceksen edit...

tamam mı güzel kardeşim. böylece sorun yaşamazsın...
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

Aslında Size katılıyorum dbgrid olayında yanlız Dbgrid1.visible:=False olduğu için adam dbgridi görmeyecek sadece editler falan var ordan aktarma yapıyorum zannedersem pekfazla bir fark yok.
Yanlız locate olayı nasıl bir etki bırakabilir vt üzerinde sen post ediyorsun
generator artıyor yanlız kayıt görünmüyor buna sebep locate olabilirmi bilmiyorum. Zaten locate olayını kriterlere uyan abone varmı yokmu diye yaptırıyorum başka yöntem varmı bilmiyorum yanlız table yerine IBDataset kullansam olurmu acaba ? hem aramayı SQL ile yaparım locate metodu da ortadan kalkmış olur. İlginizden dolayı teşekkür ediyorum.
Kolay Gelsin...
Bilgi Paylaşıldıkça Çoğalır
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

macsonfor yazdı: Yanlız locate olayı nasıl bir etki bırakabilir

locate in karşılaştığınız hatayla bir ilgisi olmaması lazım. ben sadece bilgi amaçlı söylemiştim locate kullanmayın diye. kayıt sayınız arttığı zaman sonuç pek iyi olmuyor.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Eğer CachedUpdates True yapmışsan Post'tan sonra ApplyUpdates yapman gerekiyor. Daha sonra da Transaction 'a commit yapmalısın.
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

Dediklerinizi yaptıp yanlız sorun çözülmedi yanzlı bir iki değişiklikle halloldu benim buna gülmem geldi aslında bakın:

Kod: Tümünü seç

     DBGrid1.Columns.Grid.Fields[0].Text:=Edit2.Text; 
     DBGrid1.Columns.Grid.Fields[1].Text:=Edit3.Text; 
     DBGrid1.Columns.Grid.Fields[2].Text:=ComboBox1.Text; 
     DBGrid1.Columns.Grid.Fields[3].Text:=ComboBox2.Text; 
     DBGrid1.Columns.Grid.Fields[4].Text:=Edit4.Text; 
     DBGrid1.Columns.Grid.Fields[5].Text:=Edit5.Text; 
     DBGrid1.Columns.Grid.Fields[6].Text:=Edit6.Text; 
     DBGrid1.Columns.Grid.Fields[7].Text:=Edit7.Text; 
     DBGrid1.Columns.Grid.Fields[8].Text:=Edit8.Text; 
     DBGrid1.Columns.Grid.Fields[9].Text:=Edit9.Text; 
     DBGrid1.Columns.Grid.Fields[10].Text:=Edit10.Text; 
     DBGrid1.Columns.Grid.Fields[11].Text:=Label7.Caption; 
     DBGrid1.Columns.Grid.Fields[12].Text:=Edit1.Text;
yerine

Kod: Tümünü seç

data1.abone.fieldbyname('adi').value := edit1.text bile olmadı
böyle yazmak gerekiyormuş :)

Kod: Tümünü seç

data1.aboneadi.value := edit1.text
neyse İlgilinizden dolayı hepinize teşekkür ediyorum
Kolay gelsin...[/code]
Bilgi Paylaşıldıkça Çoğalır
Cevapla