AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen conari »

Benim bildiğim kadarı ile Olmazsa olmaz değildir.

Otomatik Index daha hızlı raporlamayı sağlar.
işlemlerde PK olduğu için daha basit where kullanılabilir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen CiTiZEN »

Çok teşekkür ederim hocam peki başka görüşü olan arkadaş var mı yazarsanız sevinirim çünkü ben bugune kadarki hiçbir yazılımımda autoinc alan kullanmadım ve bu konu oldukca önemli
UWESIS CORPORATION
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen shochan »

evet katılıyorum oldukça önemli olduğuna :D aslangeri hocam dediklerinizi uyguladım fakat hala aynı sorun devam etmekte çıldırmak üzereyim sanırım bu gidişle tekrar paradoxa dönecem ama dönmekte istemiyorum okumadığım konu kalmadı ne yaptıysam olmadı bi türlü anlam veremedim :S

CiTiZEN arkadaşım senin soruna gelince autoinc alan otomatik artırımlar yaparsın sayısal olarak yani şöyle söliim mesela yaptın programda müşteri numarası verirsin ilişkilendirmede kullanmak için sorgularda kolayca kayda ulaşmak için pk olduğundan aynı numaraya sahip başka bi kayıt olmaz 1,2,3... diye ilerler her kayıtta 1 yada isteğine göre kaçar kaçar artırmak istiosan autoinc alanla yapabilirsin olmazsa olmaz deildir yani
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen emin_as »

Bir veritabanına satır satır kayıt girerken, bu kayıtlara hızlı ulaşmak için bir tane ana indeks kullanman gerekir Ana indeksinten sadece bir tane olmalıdır. Mesela sirano diye bir integer indeksin varsa, iki tane 5 sirano lu kayıt girişine veritabanı izin vermez. Bu sayede sen kayıtlarının iki defa girilmiş olmasını engellersin. Autoinc, kendiliginden artan bir degerdir, amacı ise kullanıcının her kayıt eklediginde bir numara verilmesidir. Kullanıcı bu numarayi vermez, veritabanı kendiliginden verir. Böylelikle kullanıcı hangi numarada kaldıgını düşünmez. Bir sonraki girişte bu numara veritabani tarafından tekrar artirilacaktir. Aksi halde ya kullanıcının son rakamı hatırlayıp, elle vermesi veya programcının veritabanına bakıp, son numarayı getirmesi gerekir. Programcının veya kullanıcının son numarayı getirmesi de tek başına yeterli olmaz, çünkü aynı anda 2-3 kişi kayıt girerse, bu kişiler aynı numarayı kullanabilirler. İşte autoinc da bu şekilde ayni numarayı kayıtlara vermez. Sayısız kullanıcı güvenle kayıt girişi yapabilir, bu hem kullanıcı hem de programcı için rahatlıktır.

Firebirdde autoinc generatorler üzerinden verilir, triggerlarla da kayıt insert edilince u generatorlerden gelen rakam, kayda eklenir.

Avantajları şunlardır:
  • Autoinc (kendiliginden artan degerler) kaydın bir benzerinin (unique) olmamasını sağlar.
    Kullanıcının ve programcının üzerinden yük alırlar.
Dezavantajları ise:
  • Genelde autoinc tanımlanan alana kullanıcı müdahale edemez. Örnegin 15 sıranolu kayıt silinince bu 15 rakamı başka bir kayıt için kullanılmaz, bazı kullanıcılar bunu sorun yapabiliyor.
    Sadece integer alanlarda kullanılabilirler.
Autoinc paradoks dosyalarında otomatik verilir, firebird için ise generator oluşturulup, kayıt eklemede trigger ile verilmesi gerekir.
En son emin_as tarafından 26 Ara 2008 07:35 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen CiTiZEN »

saolun hocam olsada iyi olur gibi sanki en kısa sürede sorunuzunuzun çözülmesi dileğimle kolay gelsin.
UWESIS CORPORATION
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen aslangeri »

s.a.
shochan yazdı: aslangeri hocam dediklerinizi uyguladım fakat hala aynı sorun devam etmekte...
aynı sorun derken
Cannot focus a disabled or invisible window
mesajından bahsediyorsanız ben size hangi yolla çözeceğinizi gösterdim. setfocus yapmak istediğiniz bileşene focus olamıyor bileşen seçilemez bir durumda (ya visible ı false dır. ya önünde başka bir pencere vardır. ya disable olmuştur vb.) hangi setfocus dan dolayı yaptığını bilemem. prosedürün başına "F5" ile breakpoint koy. sonra adım adım ("F8") ile kodları satır satır çalıştır. hangi satırda hata veriyorsa demekki o satırla ilgili yapılan işlemlerde bir hata var. ordaki kodları kontrol edeceksin. eğer hata veren satır başka bir prosedür ve ya fonksiyon ise "F7" ile o prosedürün içine girebilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen shochan »

Evet biliyorum hocam yardımlarınız için tşk ederim ama ne yaptıysam olmadı forumda okumadığım konu kalmadı sizin dediğinizide yaptım yok olmuyo. Tamam profesyonel değilizde bi autoinc içinde bukadar uğraşılmazki aralık 23 te açmışım konuyu bugün 27si 4 gündür bi hatayı çözemedim paradox kullanıyordum daha önce ve paradoxun eksik yanları olmasına rağmen hiç böyle bi sorunum olmuyordu tamm firebird ii güzel ama bi artan alan için bukadar zorun olacaksa kimse yanlış anlamasın hata firebirdde delphide interbasede demiyorum elbette bende ama ben paradoxa geri dönerim 4 gündür yani bu hatayı aldığımdan beri programda bi ilerleme kaydedemedim öyle duruyo paradoxla yapıyo olsaydım ne trigger ne sp hiç biriyle uğraşmıyacaktım tablo oluştururken autoinc olacak alana arkadaş sen artan alansın dediğimde bitiyodu hiç bi şekilde trigger sp v.b bişey yapmıyordum benden pas

comeback paradox :( :cry:
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen emin_as »

Hata mesajın Cannot focus a disabled or invisible window ise bunun firebird veya autoinc ile uzaktan yakından ilgisi yok. Hata vcl yani görsel bileşenlerle ilgili, henuz görünür yapılmamış bir bileşene setfocus ile focus aktarmaya çalışıyorsun. Bunu sen kodlamış olabilirsin veya kullandıgın rbir component yapıyor olabilir. Yazdıgın kodların içinde setfocus geçiyorsa, basitçe bir if control u ekleyerek, sorunu aşabilirsin.

Kod: Tümünü seç

if visible then
   dbEdit1.SetFocus;
Eger sorunlu bir component kullanıyorsan, ondan vazgeçip, başka bir component kullanabilirsin.

Paradox tek kullanıcılı kullanımlarda rahat ve hızlı görünür, ama çok sayıda kayıt girince ve çok kullanıcılı yapmaya çalışınca çok baş agrıtır. Tavsiyem hatanın oldugu bölümü bulup ve düzeltmeye çalış, programcılıgın %20 si kod yazma, %80 ise hata ayıklamadır.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen aslangeri »

@shochan; sondurum nedir.
istenilenler
1.Amac: Hangi amaca hizmet ediyorsun. Yapmak istediğin şey tam olarak nedir.
2.Yapılanlar: Neler karıştırdın bakalım. Amac ının elde etmek için neler yaptın. veritabanında generator ve triger oluşturuldumu? hangi bileşeni kullanıyorsun(ibtable,ibquery,ibdataset). Kodlar.
3.Sonuç: Elimizde ne var. Hata veren bir program mı? yoksa istediğimiz işi yapmayan bir program mı?
eğer hata veriyorsa verdiği hata mesajı nedir. istediğimiz yapmıyorsa peki ne yapıyor bu meret.
Güzelcene bi açıklayıverirsen bizde yardımcı olmaya çalışalım.
birde anlattıklarımızı yeni oluşturacağın bir veri tabanı ve yeni bir proje üzerinde den dene.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen shochan »

Hocam Allah sizden razı olsun gerçekten ilgi ve alakanıza minnettarım sorularınızı tek tek cevaplayım.

1- Amacım bir otomasyon programı yapmak bilgisaar sektöründe çalışıyorum hem iş yerinde kullanıcam hemde ufak çağlı işletmeler isterse vermeyi düşünüyorum.
2- Veritabanımda generator ve trigger var sitede çok güzel açıklamalar buldum o konularda anlatılanların hepsini uyguladım ve CARI tablomdaki MUSTERI_NO alanım normal bi şekilde işlevini yapıp her yeni kayıtta 1 artıo burasıyla ilgili bi sorunum yok. Kullandığım bileşen IBTable.
3- Sonuç olarak ikiside var yani hem hata veriyo bu nedenlede dediğim işi yapmıyor. verdiği hata ise şu:
---------------------------
Debugger Exception Notification
---------------------------
Project SoS.exe raised exception class EInvalidOperation with message 'Cannot focus a disabled or invisible window'. Process stopped. Use Step or Run to continue.
---------------------------
Bu hatayı şu şekilde alıyorum bikaçtane cari kaydettim bi sorun yok sonra servis kayıta tıklıyorum form4 açılıor cari listesinin olduğu form önce cariyi seçip tamam butonuna bastığımda servis kaydı formum açılıyo burdada bi sorun yok ama servis kaydı formunda gerekli alanları doldurup kaydet diyorum kaydediyo ama servis kayıtlarının listelendiği dbgridde o kayıt görünmüyor.IBexpertten servis tabloma bakıyorum o kayıt orda var ama programda görünmüyo
daha sonra programı hiç kapatmadan yada kapatıp açıyım hiç fark etmiyor caha önce seçtiğim cariyi tekrar seçtiğimde yukardaki hatayı alıyorum yani aynı cariyi seçip 2. kez servis kaydı girmeme izin vermiyo ve dediğiniz gibi aynı şey benimde aklıma geldi yeni bi vt ve projede denedim yine aynı oluo neden oluyo neyi eksik yada yanlış yapıyorum anlamadım.

Kullandığım kodlar:

yeni servis kaydına tıkladığımda form4 açılması için
Form4.Show;

Carli listesinden cariyi seçip tamam butonunda kullandığım kod (burda kullandığım setfocusla alakalı değil hata onu belirteyim)
form2.Show;
form4.Close;
form2.IBTable2.Append;
form2.takvim.SetFocus;
form2.durum.ItemIndex:=0;

Servis kayıt formunda kaydet butonunda kullandığım kod:
ibtable2.Post;
form2.close;
form7.Show;

Hocam biraz armut piş ağzıma düş gibi olacak ama eğer isterseniz programı komple göndereyim bakın bi yoksa önemli değil.
Tekrardan ilgi ve alakanız için tşk ederim
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen aslangeri »

s.a.
kodları yazarken code tagını kullanırsanız daha okunaklı olur.
anladığım kadarı ile birbirini çağıran formlar kullanıyorsunuz. hata verdiğinde çağırdığınız form daha önce açılmış ve arkada kalmış. modal olarak çağırdığınız form varsa modal formu kapatmadan altında kalan formları tekrar açamazsınız.
listede son eklediğiniz kaydın görünmesi için listeyi kapatıp açmanız gerekmekte sanırım. transaction ın ayarlarının da read commited olmasına dikkat edin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen shochan »

Pardon hocam kod tagına dikkat etmemiştim anlattıklarınıza gelince mesela bir formu çağırırken o formun arkada açık kalması gibi bir durum olmaması lazım çünkü o form ile işim bittiğinde close yapıyorum eğer dediğiniz buysaki ben onu anladım birde programı kapatıp açtığımda bile formun arkada açık kalması gibi bir durum söz konusu ise dediğinizde haklısınız ama programı kapatıp açtığımdada aynı hatayı veriyo
transaction ın ayarlarının da read commited olmasına dikkat edin.


demişiniz ona dikkat ettim hocam read commited işaretli ama işte dediğim gibi biyerde hata yapıyorum ama nerde _? Şunu söylemek istiyorum bence hata büyük ihtimal ondan kaynaklanıyo ama onuda denedim olmamıştı birde size sorayım Fatih hocamın bu autoinc ve triggerları anlattığı bir konuda en altta şunu eklemiş
Not : Trigger Kullandıysanız Otomatik artan alan Not Null olarak ayarlanmışsa ( Not Null olduğuna eminim çünkü otomatik artan alanlar Primary key için kullanılır. ) Delphi'den IBTABLE,IBQUERY,IBDATASET datasetiniz her neyse Çift tıklayıp Fields Editörden Otomatik artan alanınızı seçip Object inspector'dan Required özelliğini false yapın. aksi taktirde tek kayıt işleyemezsiniz tabloya. Ayrıca Master Detail Tablolarda Detail Tabloya Kayıt Girmeden önce Master Tabloyu Kapatıp açın
detail tabloya kayıt girmeden önce master tabloyu kapatıp açın bu nasıl olacak onu tam anlayamadım denedim olmamıştı. Birde şöyle bi durum söz konusu diyelimki cariyi seçip servis kayıt formunu açtım gerekli alanları doldurdum kaydet butonunda master tabloyu kapatıp açarsam hata veriyo cariyi seçip tamm butonuna bastığımda kapatıp açarsamda tablodaki ilk kayda konumlanıyo. Yani burda Fatih hocam ne demek istedi ya ben yanlış anladım yada doğru anladım ama uygulamam yanlış bu konuda aydınlatırsanız sevinirim. Sanırım sorunda bundan dolayı oluyo.

Saygılarımla.
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen emin_as »

Tablo açıp, kapama farklı transactionlar kullanıyorsan gereklidir. Onun dışında transactionlar ortaksa, detail table a bilgi girmeden önce master table edit ve insert durumunda ise post etmen gereklidir. Detail table in before insert kısmına

Kod: Tümünü seç

if mastertable.state in [dsEdit,dsInsert] then
   mastertable.post;
yazman yeterlidir.

Bu arada kullanmak istedigin formları sen mi create ediyorsun, yoksa autocreate mi kullanıyorsun. Eger bir formu kapattıysan, tekrar göstermen sorun olabilir. Ya elle sen create et veya close yerine hide kullan. Dogru yaklaşım formları gerektiginde oluşturup, gerekmediginde free ile hafızadan tamamen silmektir.

Kod: Tümünü seç

with TForm2.Create(Self) do
try
  ShowModal;
finally
  Free;
end; 
Bir şeye daha dikkat et, form2 gibi delphi adlandırmaları yerine kendin isim ver. Programın daha okunaklı olur. Form2 yerine diyelim carikayit olsun. Carikayit.Show komutu daha okunaklıdır.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen aslangeri »

s.a.
@shochan; hangi bileşenleri kullanıyorsun (IBTable, IBDataset, IBQuery) birini seç.
ona göre devam edeceğim.
hata verdiği düğmedeki prosedürde beginin altındaki satıra gel "F5" ile break point koy. PRogramı çalıştır. breakpoint koyduğun yere gelince program duracaktır. orda "F8" ile satır satır çalıştrı. hata verdiği satırı gör. sonra o prosedürü ve hata verdiği satırı hata mesajı ile buraya yaz.
Bu setfocus hatası içindi.
Anladığım kadarı ile diğer bir problemin tablodaki ıd alanının değerini görmek le alakalı.
Bunun için yukardaki soruya vereceğin cevap önemli.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma

Mesaj gönderen conari »

Servis tablosunda ki Müşteri No alanı PK olmuş sanırım.
FK olmalı.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla