AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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 ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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 ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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.
Bu dediğimi bir incelermisiniz.conari yazdı:Servis tablosunda ki Müşteri No alanı PK olmuş sanırım.
FK olmalı.
Bir kelimenin anlamını öğretsen bile yeter..



Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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
Böyle bir hata veriyo ve commit edemiyorum. ibexpertte fk alan oluşturmayı anlatırmısınız size zahmet.

Yani bu alanlarda hangi tablodan MUSTERI_NO seçicem fln çünkü benim yaptığımda yukarda yazmış olduğum hatayı alıyorum.
Kod: Tümünü seç
This operation is not defined for system tables.
unsuccessful metadata update.
could not find UNIQUE INDEX with specified columns.

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 ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
İ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.
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..



Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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 ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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
sonra
ibtable in onnewrecord veya afterinsert olayına aşağıdaki kodu yaz.
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 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.
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
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;
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...
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
Eline sağlık hocam gayet güzel anlatmışın olayı hemen uygulamaya geçiyorum.

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

- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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 :
Bu hatayı veriyo o setfocus hatası yine aynı şekilde devam ediyo. şimdi bu hata neden olmuş olabilir_? Yaptıklarım ise:
Saygılarımla.
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.
---------------------------
- 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
- Cari kayıtta bir sorun yok tam istediğim gibi çalışıyor
Hata sayısı 2 oldu bunlarKod: 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. ---------------------------
ş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 oluyorKod: 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. ---------------------------
Saygılarımla.
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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.
Prosedurleri yaz burada.
ama bu kadar uzamaması lazım bu işin.
Bir kelimenin anlamını öğretsen bile yeter..



Re: AutoInc Alan ve Programı İstediğimiz Dizinde Çalıştırma
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
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.
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);
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim