Boolean Kullanımı !!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Boolean Kullanımı !!
Arkadaşlar Merhaba;
Ben Form9 üzerine 1 tane CheckBox1 yerleştirdim ve bunu Tablo ya kaydettiriyorum Tablo da True veya False olarak yazıyor form9 a girerken tabloda true ise işaretli değilse işaretsiz nasıl kontrol ettirebilirim?
Ben Form9 üzerine 1 tane CheckBox1 yerleştirdim ve bunu Tablo ya kaydettiriyorum Tablo da True veya False olarak yazıyor form9 a girerken tabloda true ise işaretli değilse işaretsiz nasıl kontrol ettirebilirim?
Re: Boolean Kullanımı !!
Merhaba.
- Siz Tabloda derken DBGrid'de demek istediğinizi değerlendiriyorum.
- DBGrid'in baktığı DataSource'un DataSet'i hangisi ise onun OnAfterScroll eventine söylenen kodu yazın. Yazarken de ilgili Tablo'nun boş küme ile dönüp dönmediğini mutlaka sorgulayın yoksa Exception alırsınız.
Örneğin şöyle yazın :
bir de ek olarak tabloyu ilk defa açtığınızda OnAfterScroll eventi tetiklenmez. Bunun için Open veya Active := True; dediğin satırın hemen altına da
şeklinde bir ekleme yaparak gelen ilk kaydın değerlendirmeye alınmasını sağlamalısınız.
- Siz Tabloda derken DBGrid'de demek istediğinizi değerlendiriyorum.
- DBGrid'in baktığı DataSource'un DataSet'i hangisi ise onun OnAfterScroll eventine söylenen kodu yazın. Yazarken de ilgili Tablo'nun boş küme ile dönüp dönmediğini mutlaka sorgulayın yoksa Exception alırsınız.
Örneğin şöyle yazın :
Kod: Tümünü seç
if Query.RecordCount > 0
then Checkbox1.Checked := Query.FieldByName('EPARAM_1').AsBoolean
else Checkbox1.checked := false; // işaretli kalmasın diye...
Kod: Tümünü seç
Checkbox1.Checked := Query.FieldByName('EPARAM_1').AsBoolean;
Re: Boolean Kullanımı !!
mrmarman çok teşekkür ederim bilgileriniz için bu işlemi yaptım ama şimdi esas işlem görmesi gereken yere bir kod yazdım ama bu sefer Form9 daki CheckBox1 etkiliyor ;
bunu nasıl çözebilirim?
Kod: Tümünü seç
procedure TForm2.FormActivate(Sender: TObject);
begin
IF FORM9.Checkbox1.Checked = Form9.EPARAMQ.FieldByName('EPARAM_1').AsBoolean Then
begin
DBEdit3.ReadOnly:=True;
end
else
begin
DBEdit3.ReadOnly:=False;
end;
end;
Re: Boolean Kullanımı !!
Merhaba...
- Zaten verdiğim şekilde bir uygulama yapmamışsınız... Önce onu belirteyim... Başlığı okuyanlar yanlış anlamasın diye bunu yazdım...
- Burada bence bir hata var. Yazar ne demek istedi diye sorarız ya ?!
- Siz sorunuzda veritabanınızdaki True veya False olma durumuna göre Form9'daki checkbox Checked olsun veya olmasın diye sormuştunuz. O sorunuzla bağlantılı olarak burada çapraz bir anlam kayması görüyorum.
- Verdiğiniz kodda şöyle bir cümle kuruyorum:
Eğer Form9'daki CheckBox1 ile veritabanınızdaki EPARAM_1 alanı aynı ise ( bu true=true da olabilir false=false da olabilir ) o zaman DBEdit3'e erişim YAPILAMASIN yani ReadOnly olsun... Aksi ise yani veritabanında True iken CheckBox1 false ise ya da veritabanında False iken CheckBox1 true ise o zaman DBEdit3'ün erişimi serbest bırakılsın... Demişsiniz.
Bu durumda ne yapmak istediğinizi söylerseniz o mihmalde cevap verelim...
- Zaten verdiğim şekilde bir uygulama yapmamışsınız... Önce onu belirteyim... Başlığı okuyanlar yanlış anlamasın diye bunu yazdım...
Kod: Tümünü seç
IF FORM9.Checkbox1.Checked = Form9.EPARAMQ.FieldByName('EPARAM_1').AsBoolean Then

- Siz sorunuzda veritabanınızdaki True veya False olma durumuna göre Form9'daki checkbox Checked olsun veya olmasın diye sormuştunuz. O sorunuzla bağlantılı olarak burada çapraz bir anlam kayması görüyorum.

- Verdiğiniz kodda şöyle bir cümle kuruyorum:

Eğer Form9'daki CheckBox1 ile veritabanınızdaki EPARAM_1 alanı aynı ise ( bu true=true da olabilir false=false da olabilir ) o zaman DBEdit3'e erişim YAPILAMASIN yani ReadOnly olsun... Aksi ise yani veritabanında True iken CheckBox1 false ise ya da veritabanında False iken CheckBox1 true ise o zaman DBEdit3'ün erişimi serbest bırakılsın... Demişsiniz.

Bu durumda ne yapmak istediğinizi söylerseniz o mihmalde cevap verelim...

Re: Boolean Kullanımı !!
evet aynen doğru anlaşıldı.
Ben Form9 daki checkbox1 tabloda ki EPARAM_1 e true veya false olarak yazıyorum bu durumda Form2 deki DBEdit3 alanını true veya false göre ayarlamak istiyorum
Ben Form9 daki checkbox1 tabloda ki EPARAM_1 e true veya false olarak yazıyorum bu durumda Form2 deki DBEdit3 alanını true veya false göre ayarlamak istiyorum
Re: Boolean Kullanımı !!
Form9 daki CheckBox1 İşaretliyse veri tabanına True olarak yazıyor False İse False yazıyor o değişmez yani CheckBox1 İşaretli veritabanı işaretsiz olma ihtimali yok.
Re: Boolean Kullanımı !!
Merhaba.
- Sunduğun veri yetersiz, bu kadarlık açıklamaya cevap yazamıyorum. Yazdığın cümleyi kendin bir daha okur musun ? Soru biraz yere bassın lütfen...
- Detay: Sen bir (A) Query'si üzerinden kod ile CheckBox1'deki değişimi sağlıyorsan, başka formdan bu aynı (A) query'sini kullanırsan hatalı davranmış olursun. O formda da başka bir (B) Query'si kullanacaksın. Tersi durumda bilinçli bir şema oluşturup Form2'de (A) Query'sini kullandığında CheckBox'ların da dizginlerini ele alacaksın. Bu kadar basit.
2. Form2'deki DBEdit3 alanı; hangi Query'nin / hangi Tablonun /hangi Alanına Bakıyor ?! Bunu müneccim olan anlar, ben değil
- Detay: Çok zeki olabilirsin. Beyninde sorular dönüp durur ama bunu karşı tarafa aktarırken şahsım için konuşayım, zeka seviyesi düşük birisine anlatır gibi anlat.
Sorunu şu şekilde sor : Şöyle bir (A) tablom ve şöyle bir (B) tablom var. (A) Tablosundaki EPARAM_1 isimli alan boolean bir alandır. Veri girişi yaparken bu boolean alanı CheckBox1 isimli bir işaret kutusunda göstermek istiyorum. Ancak Checkbox1 FORM9 isimli bir forma aittir. Form2'de şu şu şartları oluşturduğumda Form9'daki CheckBox1 de değişiyor ve ben bunu istemiyorum. Araştırdım; şu örneğini verdiğim kod bloğunda şunu yaptığımda bu olumsuzluk karşıma çıkıyor. Bu olumsuzluğu önlemek için şöyle bir kod ile çözüm aradım ancak sonuç alamadım. Yardımınızı istiyorum.
Bak senaryo oturdu değil mi ?!
- Bu her platformda geçerlidir. Soruları yarım sormak çözümden uzaklaştırır, herkes için zaman kaybı doğurur. Bu da 1 cevap 2 cevap 3'den sonra cevap alamamak şeklinde döner.
- Şimdi sorularını yeniden değerlendirip tekrar sor.
- Sunduğun veri yetersiz, bu kadarlık açıklamaya cevap yazamıyorum. Yazdığın cümleyi kendin bir daha okur musun ? Soru biraz yere bassın lütfen...
1. Form9'daki CheckBox1, hangi Query'deki EPARAM_1'den tetiklenerek kendiliğinden TRUE veya FALSE oluyor ?! Bunu bir kenara yaz...@ozcank yazdı:evet aynen doğru anlaşıldı.
Ben Form9 daki checkbox1 tabloda ki EPARAM_1 e true veya false olarak yazıyorum bu durumda Form2 deki DBEdit3 alanını true veya false göre ayarlamak istiyorum
- Detay: Sen bir (A) Query'si üzerinden kod ile CheckBox1'deki değişimi sağlıyorsan, başka formdan bu aynı (A) query'sini kullanırsan hatalı davranmış olursun. O formda da başka bir (B) Query'si kullanacaksın. Tersi durumda bilinçli bir şema oluşturup Form2'de (A) Query'sini kullandığında CheckBox'ların da dizginlerini ele alacaksın. Bu kadar basit.
2. Form2'deki DBEdit3 alanı; hangi Query'nin / hangi Tablonun /hangi Alanına Bakıyor ?! Bunu müneccim olan anlar, ben değil

- Detay: Çok zeki olabilirsin. Beyninde sorular dönüp durur ama bunu karşı tarafa aktarırken şahsım için konuşayım, zeka seviyesi düşük birisine anlatır gibi anlat.
Sorunu şu şekilde sor : Şöyle bir (A) tablom ve şöyle bir (B) tablom var. (A) Tablosundaki EPARAM_1 isimli alan boolean bir alandır. Veri girişi yaparken bu boolean alanı CheckBox1 isimli bir işaret kutusunda göstermek istiyorum. Ancak Checkbox1 FORM9 isimli bir forma aittir. Form2'de şu şu şartları oluşturduğumda Form9'daki CheckBox1 de değişiyor ve ben bunu istemiyorum. Araştırdım; şu örneğini verdiğim kod bloğunda şunu yaptığımda bu olumsuzluk karşıma çıkıyor. Bu olumsuzluğu önlemek için şöyle bir kod ile çözüm aradım ancak sonuç alamadım. Yardımınızı istiyorum.
Bak senaryo oturdu değil mi ?!
- Bu her platformda geçerlidir. Soruları yarım sormak çözümden uzaklaştırır, herkes için zaman kaybı doğurur. Bu da 1 cevap 2 cevap 3'den sonra cevap alamamak şeklinde döner.
- Şimdi sorularını yeniden değerlendirip tekrar sor.
Re: Boolean Kullanımı !!
mrmarman açıklaman için çok teşekkür ediyorum. Sorumu şöyle anlatayım o zaman ;
Form9 da Checkbox1 var ve true veya false olarak TBLEMANETPARAM tablosunda EPARAM_1 ' Kaydediyorum.
Form2 de ise DBEdit3 var ve bu alanı EPARAM_1 deki true veya false göre yazılabilir yada kapalı duruma getirmek istiyorum.
bu kod Access Violation hatası veriyor yardımcı olurmusunuz?
Form9 da Checkbox1 var ve true veya false olarak TBLEMANETPARAM tablosunda EPARAM_1 ' Kaydediyorum.
Form2 de ise DBEdit3 var ve bu alanı EPARAM_1 deki true veya false göre yazılabilir yada kapalı duruma getirmek istiyorum.
Kod: Tümünü seç
procedure TForm2.FormCreate(Sender: TObject);
begin
IF Form9.EPARAMQ.FieldByName('EPARAM_1').AsBoolean = True Then
begin
DBEdit3.ReadOnly:=True;
end
else
begin
DBEdit3.ReadOnly:=False;
end;
end;
Re: Boolean Kullanımı !!
Merhaba.
- Access Violation vermesinin en yaygın sebebi henüz Create edilmemiş bir bileşeni referans almak istenmesi durumudur. Hata verdiğinde hata metninin geriye kalan kısmında bu hataya sebebiyet veren çağrınızı da yazmıştır. Bunu da ihmal etmeden okuyalım.
- Kendi yorumum şöyle;
demişsiniz ya, burada
1. Application FORM Create ORDER ( formların create edilme sıralamasıdır ) dikkate alındığında; FORM2 isimli form, FORM9 isimli formdan daha önce CREATE edildiğinden henüz FORM9 yokken buna erişim yapıyor olmanız.
2. FORM9 yokken FORM2'ye erişim yapılıyorsa bu durumda bu hatayı verir.
3. aksine FORM9 varsa ancak EPARAMQ henüz create edilmemişse bu hatayı verir,
4. FORM9 vardır ancak EPARAMQ aslında FORM9 üzerinde değil başka bir form veya datamodule üzerindedir.
- Hata konusunda yaygın karşılaşılan olarak bu yukarıda saydıklarımdan oyumu (1) nolu olana veriyorum. Tavsiyem herhangi Formun OnCreate eventini sadece o form içindeki dinamiklere atıfta bulunacak şekilde kullanınız. ( yani formdaki Edit'lerin boşaltılması, değerlerin varsayılan değerlere atanması vb. gibi )
- Diğer türdeki işlemlerinizde OnCreate yerine OnShow kullanmanız daha rasyonel bir kullanımdır. Çünkü formun Show / ShowModal komutu ile ekranda belirmesine kadar Application Form CREATE işlemleri bitmiş ve hazır olana kadar bu event işlemeyeceğinden sorun kalmayacaktır. (Show / ShowModal dedim ama siz kod içerisinden de bu eventi From1.FormShow( Form1 ); örneğindeki gibi bir komutla da işletebilirsiniz o başka bir konudur. )
- Özetle bu mihmalde ilk yapacağınız iş OnCreate eventinden OnShow eventine kodunuzu taşıyın.
- Access Violation vermesinin en yaygın sebebi henüz Create edilmemiş bir bileşeni referans almak istenmesi durumudur. Hata verdiğinde hata metninin geriye kalan kısmında bu hataya sebebiyet veren çağrınızı da yazmıştır. Bunu da ihmal etmeden okuyalım.
- Kendi yorumum şöyle;
Kod: Tümünü seç
IF Form9.EPARAMQ.FieldByName('EPARAM_1').AsBoolean = True Then
1. Application FORM Create ORDER ( formların create edilme sıralamasıdır ) dikkate alındığında; FORM2 isimli form, FORM9 isimli formdan daha önce CREATE edildiğinden henüz FORM9 yokken buna erişim yapıyor olmanız.
2. FORM9 yokken FORM2'ye erişim yapılıyorsa bu durumda bu hatayı verir.
3. aksine FORM9 varsa ancak EPARAMQ henüz create edilmemişse bu hatayı verir,
4. FORM9 vardır ancak EPARAMQ aslında FORM9 üzerinde değil başka bir form veya datamodule üzerindedir.
- Hata konusunda yaygın karşılaşılan olarak bu yukarıda saydıklarımdan oyumu (1) nolu olana veriyorum. Tavsiyem herhangi Formun OnCreate eventini sadece o form içindeki dinamiklere atıfta bulunacak şekilde kullanınız. ( yani formdaki Edit'lerin boşaltılması, değerlerin varsayılan değerlere atanması vb. gibi )
- Diğer türdeki işlemlerinizde OnCreate yerine OnShow kullanmanız daha rasyonel bir kullanımdır. Çünkü formun Show / ShowModal komutu ile ekranda belirmesine kadar Application Form CREATE işlemleri bitmiş ve hazır olana kadar bu event işlemeyeceğinden sorun kalmayacaktır. (Show / ShowModal dedim ama siz kod içerisinden de bu eventi From1.FormShow( Form1 ); örneğindeki gibi bir komutla da işletebilirsiniz o başka bir konudur. )

- Özetle bu mihmalde ilk yapacağınız iş OnCreate eventinden OnShow eventine kodunuzu taşıyın.
Re: Boolean Kullanımı !!
Mrmarman çok teşekkür ederim ilgi ve alakana. Kodu OnShow a taşıdım ama FORM9 daki CheckBox1 True yapıyor kodu başka türlü nasıl yapabilirim ?
Re: Boolean Kullanımı !!
Yine cümlenizde noktalama kullanmadığınızdan anlam kaybolmuş...
- En son OnCreate eventindeki kodu OnShow'a taşıdığınızı belirttiniz, ancak bu taşıdığınız kod FORM9'daki CheckBox1'in True/False durumuna etki etmez ki. Eşitliğin sol tarafında CheckBox1.Checked ifadesi yer almıyor.
- Sorunu başka yerde arayın.
- Mesela ne yapınca CheckBox1 True veya False oluyor...?!
- Bunu bulmak için formlardan, Form9'daki CheckBox1'in checked durumunu kod içerisinden değiştiren yerleri bir listeler misiniz ? Ama! kod örnekleriyle lütfen. Çünkü şimdi şu oluyor, önce bu oluyordu gibi havada kalmasın.

derken ?!@ozcank yazdı:Kodu OnShow a taşıdım ama FORM9 daki CheckBox1 True yapıyor kodu başka türlü nasıl yapabilirim ?
- En son OnCreate eventindeki kodu OnShow'a taşıdığınızı belirttiniz, ancak bu taşıdığınız kod FORM9'daki CheckBox1'in True/False durumuna etki etmez ki. Eşitliğin sol tarafında CheckBox1.Checked ifadesi yer almıyor.
- Sorunu başka yerde arayın.
- Mesela ne yapınca CheckBox1 True veya False oluyor...?!
- Bunu bulmak için formlardan, Form9'daki CheckBox1'in checked durumunu kod içerisinden değiştiren yerleri bir listeler misiniz ? Ama! kod örnekleriyle lütfen. Çünkü şimdi şu oluyor, önce bu oluyordu gibi havada kalmasın.

Re: Boolean Kullanımı !!
Form9 da kaydet butonunda kullandığım kod
ve Form9 a girerken CheckBox1 durumunu kontrol etmek için Form9 Onactivate de kullandığım kod;
Kod: Tümünü seç
procedure TForm9.BitBtn1Click(Sender: TObject);
begin
EMANETPRM.Active:=True;
IF EMANETPRM.Locate('EPARAM_20',Edit1.text,[loPartialKey,loCaseInsensitive]) Then
Begin
EMANETPRM.Edit;
EMANETPRM.FieldByName('EPARAM_1').Value:=CheckBox1.Checked;
EMANETPRM.FieldByName('EPARAM_20').Value:=Edit1.Text;
ShowMessage('Kayıt Düzeltilmiştir !!!');
EmanetPrm.Post;
End
Else
Begin
EMANETPRM.Append;
EMANETPRM.FieldByName('EPARAM_1').Value:=CheckBox1.Checked;
EMANETPRM.FieldByName('EPARAM_20').Value:=Edit1.Text;
EmanetPrm.Post;
ShowMessage('Yeni Kayıt Eklenmiştir !!!');
End;
End;
Kod: Tümünü seç
procedure TForm9.FormActivate(Sender: TObject);
begin
EPARAMQ.Active:=True;
if EPARAMQ.FieldByName('EPARAM_1').AsString='True' then
begin
CheckBox1.Checked:=True;
end
else
begin
CheckBox1.Checked:=False;
end;
end;
Re: Boolean Kullanımı !!
CheckBox1'in OnClick olayına, veritabanında bir hareket oluşturan kod var mı peki?
Re: Boolean Kullanımı !!
Hayır herhangi kod yok
Re: Boolean Kullanımı !!
Aslında kısaca yapmak istediğim şu;
FORM9 daki CheckBox1 e işaret koyduğumda veri tabanı TBLEMANETPARAM da EPARAM_1 e True işaretsizse False yapmak sonra Form2 deki DBEdit3 alanını bu veri tabanındaki true veya false göre aktif yada okunamaz yapmak.
FORM9 daki CheckBox1 e işaret koyduğumda veri tabanı TBLEMANETPARAM da EPARAM_1 e True işaretsizse False yapmak sonra Form2 deki DBEdit3 alanını bu veri tabanındaki true veya false göre aktif yada okunamaz yapmak.