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ı
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 »

S.a usura bakmayın bikaç gündür nete giremiyorum hemen sölediklerinize bakıp sonuç hakkında bilgilendiricem sizi aslangeri hocam kullandığım bileşen IBTable
  • 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 »

Peki ibtable bileşeninde ID değerini sen mi veriyorsun yoksa trigerin verdiği değeri görmek için tabloyu close open mi yapıyorsun?
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 »

Hyr ID değerini ben vermiyorum triggerın verdiği değeri görmek için close open yapıyorum triggerda bi sorun yok gibi çünkü normal bir şekilde çalışıyor sorun daha öncede söylediğim gibi dbgridden bir cari seçtiğimde oluyor ama seçtiğim cariyi daha önce seçip servis kaydı girmişsem ozaman hata veriyo daha önceden seçipte servis kaydı girmediklerimde bi rosun oluyo. Geçenlerde emin_as hocam bir kod vermiş dediği gibi o kodu kullanınca düzeldi kaydı girdim daha sonra aynı kaydı seçtim hata vermedi fakat bu seferde master detail bozuldu sanki girdiğim serviskaydını hangi cariye olduğunu göstermiyo daha sonra bi kaç değişiklik yaptım yine aynı sorun çıktı yaptığım değişiklikleri geri alıyorum yok yinede düzelmiyo neden olduğunu anlamış değilim projeyi kapatıp açtım yani yapılan değişiklikleride kaydetmedim ama yine aynı hatayı vermeye başladı :S
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
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 »

seçtiğim cariyi daha önce seçip servis kaydı girmişsem ozaman hata veriyo daha önceden seçipte servis kaydı girmediklerimde bi rosun oluyo.
conari yazdı:Servis tablosunda ki Müşteri No alanı PK olmuş sanırım.
FK olmalı.
Bu dediğimi bir incelermisiniz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
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 »

Haklısınız hocam yanlışlıkla servis tablosundaki MUSTERI_NO alanınıda pk yapmışım fakat şöyle bi sorunum var ibexpert ilkkez kullandığımdandır sanırım MUSTERI_NO alanını fk yapmak istediğimde

Kod: Tümünü seç

This operation is not defined for system tables.
unsuccessful metadata update.
could not find UNIQUE INDEX with specified columns.
Böyle bir hata veriyo ve commit edemiyorum. ibexpertte fk alan oluşturmayı anlatırmısınız size zahmet.
Resim
Yani bu alanlarda hangi tablodan MUSTERI_NO seçicem fln çünkü benim yaptığımda yukarda yazmış olduğum hatayı alıyorum.
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
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 »

İnterbase(firebird) ile ilgili çok fazla bilgim yok açıkçası. Ama gösterdiğin ekrana bakılır ise;
On Fielda MUSTERI_NO
FK tabloya : müşteri tablon
FK fielda :Müşteri tablosundaki MUSTERI_NO
alanını seçmelisin sanırım.

ayrıca servis tablosunda MUSTERI_NO alanında, musteri tablonda olmayan kayıtlar var ise onları düzeltip dene.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
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 »

Yok hocam olmadı zaten denemiştin önceden sizin dediğiniz gibiyine yaptım olmadı aynı hatayı veriyor. Bu hatalarda hep beni mi bulur anlamadım ki hata hata üstüne
  • 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.
musteriler tablonda id alanını unique index tanımlamalısın.
On Fielda MUSTERI_NO
FK tabloya : müşteri tablon
FK fielda :ID (musteriler tabosunun id si fk tabloya musteriyi seçtiysen zaten onun id si gelir.)
IB table kullandığına göre id alanına trigerin verdiği değeri görmek için taboyu close open yapmıyorsun. eğer close open yapmazsan id alanınında değer olmayacağı için bu müşteriye yaptığın servislerin musterino alanlarındada başka değerler vardır muhtemelen.( fk tanımlamadan önce servisler tablosunun içini boşalt. büyük ihtimalle bunu yapmazsan fk oluşturamazsın. çünkü musteri no su hatalı olan kayıtlar vardır.)
IBTable i close open yapmadan ıd alanını değerini görmek için
ibtable in yanına birtane ibquery (ben adına qgenerator diyeceğim) koy
database ve transaction u ayarladıktan sonra sql özelliğine

Kod: Tümünü seç

select gen_id(gen_tabloadi_id,1) from rdb$database
sonra
ibtable in onnewrecord veya afterinsert olayına aşağıdaki kodu yaz.

Kod: Tümünü seç

procedure xxxxxxxxx(dataset:TDataset);
Begin
qgenerator.open;
dataset['ID']:=qgenerator.fields[0].asinteger;
qgenerator.open;
end;
bu kod ile artık tabloyu close open yapmana gerek kalmadı.
Ne Yaptık: Generatorden değeri okuyup ibtabledeki ID alanına biz değer verdik. Kaydı post ettiğimiz zaman firebirddeki triger

Kod: Tümünü seç

 if new.id is null...
diye kontrol yaptığı için bizim gönderdiğimiz id null olmadığı için triger bir işlem yapmayacak. bizim verdiğimiz id değeri kullanılmış olacak. Eğer musterileri listelettiğin gridde id alanınıda gösterirsen (programın son versiyonunda kaldırısın) olayı görebilirsin.
Böylelikle tabloyu close open yapmamıza gerek kalmadı.
şimdi bu işlemleri yapıp sonucu bildir. Ona göre focus ile ilgili hataya devam edelim.
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 »

Eline sağlık hocam gayet güzel anlatmışın olayı hemen uygulamaya geçiyorum.
fk tanımlamadan önce servisler tablosunun içini boşalt. büyük ihtimalle bunu yapmazsan fk oluşturamazsın. çünkü musteri no su hatalı olan kayıtlar vardır
Bunu ben zaten yapıyorum hocam servis tablosunu hatta hata verdikten sonra cari tablosununda içini boşalttım yine hata vermişti ben yine sizin dediğiniz gibi fk ayarlarını yapıyım birde öyle deneyim hocam sonucu hemen bildiricem size sayenizde çok şey örendim ve öğreniyorum hakkınızı helala edin :)
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
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 »

S.a hocam şimdi bi hata daha oluştu dediğiniz gibi yaptım herşey normal cari kayıtta muşteri nosunu sizin dediğiniz gibi atıyo ama şimdi o setfocus hatası dışında bi hata daha vermeye başladı ve bu sizin dediklerinizi yapmak için yeni database oluşturup herşeyi yaptım dediğiniz kodları gerekli yerlere değişiklikleri yapıp yazdım şimdi verdiği hata ise şöyle mesela yeni cari kayıt diyorum alanları dolduruyorum cariyi kaydedio hemen ardından yani programı kapatmadan direk servis kayıt deyip o cariyi seçersem servis kayıt formum açılıyo ve kayıt girmeme izin veriyo program ama yeni cariyi oluşturup programı kapatıp tekrar açtığımda o cariyi seçtiğimde :

Kod: Tümünü seç

---------------------------
Debugger Exception Notification
---------------------------
Project SoS.exe raised exception class EAccessViolation with message 'Access violation at address 004036AA in module 'SoS.exe'. Read of address 00000027'. Process stopped. Use Step or Run to continue.
---------------------------
Bu hatayı veriyo o setfocus hatası yine aynı şekilde devam ediyo. şimdi bu hata neden olmuş olabilir_? Yaptıklarım ise:
  • Yeni database oluşturdum
    Oluşturduğum databasede 2 adet tablu oluşturdum CARI ve SERVIS diye
    CARI tablosundaki MUSTERI_NO alanım unique index
    SERVIS tablosundaki MUSTERI_NO alanım fk
    Kullandığım bileşenler IBDatabase, IBTransaction, IBQuery, IBTable, Datasource
    CARI ve SERVIS tabloları arasındaki master/detail ilişkisi tamam
    IBTransaction Read Commited seçili
    IBQuery ve IBTable da yazmış olduğunuz kodları ekledim dediğiniz yerlere
SONUÇ :
  • Cari kayıtta bir sorun yok tam istediğim gibi çalışıyor
    Hata sayısı 2 oldu bunlar

    Kod: Tümünü seç

    ---------------------------
    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.
    ---------------------------
    

    Kod: Tümünü seç

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project SoS.exe raised exception class EAccessViolation with message 'Access violation at address 004036B0 in module 'SoS.exe'. Read of address 4E5F492E'. Process stopped. Use Step or Run to continue.
    ---------------------------
    
    şuan bu 2 hatayı almaktayım birisi bildiğiniz gibi dbgridden daha önce servis kaydı olan bir cariyi seçtiğimde yani cannot focus hatası diğeri ise oluşturduğum yeni cariye programı kapatıp açtıktan sonra servis kaydı girmek istediğimde oluyor
İlgi ve alakanız için tekrardan teşekkür ederim
Saygılarımla.
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
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 »

2. hatayı create edilmemiş bir nesneye erişmeye çalıştığın için veriyor.

Prosedurleri yaz burada.
ama bu kadar uzamaması lazım bu işin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
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.
acces violation hatasını @conari nin dediği gibi henüz create edilmemiş bir nesneye erişmey çalıştığın için veriyordur.
muhtemelen show etmeye çalıştığın formu henüz create etmediğin için.
hata verdiği satırdaki formu show etmeden önce

Kod: Tümünü seç

if hataverenform= nit then hataverenform:=thataverenform.create(self);
dersen o hatayı vermeyecektir.
diğer hata için hata veren procedureyi tekrar gönderirsen ve satır satır çalıştırıp hata veren satırıda belirtirsen iyi olur.
Problemin setfocus dan kaynaklandığını biz tahmin ediyoruz. ancak hata veren satırı görürsek belki başka bir problem vardır.
kolay gelsin.


NOT:
ben formlarımı otomatik create ettirmiyorum. (project -> options da "Forms" sekmesinde availeable forms ve auto-create forms var. Ben sadece datamodul ve main formu otomatik create ediyorum. diğer formları ihtiyacım olduğu zaman create ediyorum. işim bitincede free ediyorum.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla