Merhaba Arkadaşlar,
Borland C++ Builder (Turbo C++ Explorer 2006) dbGo bileşenlerini kullanarak MSSQL Server 2005 Management Studio Express'de oluşturduğum tablolarla işlem yapmaya çalışıyorum.
Ancak, tablolarda "bit" veri olarak tanımladığım alanlara "Default Value or Binding" bölümünde verdiğim değer ne olursa olsun (ister 0 ister 1), programda bu alana karşılık gelen TDBCheckBox değeri daima 1 oluyor (checked). Paradox tablo oluştururken kolayca başardığım default değer verme işlemini burada başaramadım.
Yardımlarınızı bekliyorum!
Saygılarımla!
MSSQL 2005 Server'da default değer alma
Selamlar,
Default verdiğiniz (DB Üzerinde verdiğiniz Default Değeri) Siz herhangi bir INSERT yaptığınız sırada değerini mi almıyor? Biryerlerde bir Event olmasın? Kontrolleriniz tamam mı?
Ayrıca, Oracle Forms'dan biliyorum belki şöyle bir özelliği vardır, Checkbox'larda, Checked Değer, Unchecked Değer, bunların dışında bir değerle karşılaşırsa Checkbox Nasıl Davransın (Checked mi, unchecked mi, yoksa Grayed mi) gibi bir uygulaması var.
Sizin bileşende de buna benzer bir şey olabilir mi?
Kolay Gelsin
Default verdiğiniz (DB Üzerinde verdiğiniz Default Değeri) Siz herhangi bir INSERT yaptığınız sırada değerini mi almıyor? Biryerlerde bir Event olmasın? Kontrolleriniz tamam mı?
Ayrıca, Oracle Forms'dan biliyorum belki şöyle bir özelliği vardır, Checkbox'larda, Checked Değer, Unchecked Değer, bunların dışında bir değerle karşılaşırsa Checkbox Nasıl Davransın (Checked mi, unchecked mi, yoksa Grayed mi) gibi bir uygulaması var.
Sizin bileşende de buna benzer bir şey olabilir mi?
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Selamlar Kuri_YJ,
Nazik cevabınız için öncelikle teşekkür ederim.
Doğrudur. INSERT işlemi uyguladığımda DBCheckBox default değerleri veritabanından almıyor. Default değerlerin veritabanından okunması için Insert() komutunun peşinden Refresh() komutu kullanmak zorunda kalıyorum:
DBNavigatorMain->DataSource->DataSet->Insert();
DBNavigatorMain->DataSource->DataSet->Refresh();
Ayrıca, belirttiğiniz gibi, BeforeInsert veya AfterInsert event'lerini kullanarak default değerleri tek tek atamakta bir çözüm olabilir ama doğru çözüm olduğu konusunda (pratik olmadığı için) tereddütlerim var.
Bildiğim kadarıyla, TDBCheckBox'ın sizin tanımladığınız koşulları taşıyan bir özelliği yok. Sadece ValueChecked ve ValueUnchecked olmak üzere işaretlendiğinde ve işaretlenmediğinde alacağı değerleri belirleyen 2 özelliği var.
Bir de yardım dosyasında aşağıdaki gibi bir ifade var:
If the DataField of the database check box is a logical field, the check box is always checked if the contents of the field is true, and it is always unchecked if the contents of the field is false. The values of the ValueChecked and ValueUnchecked properties have no affect on logical fields.
Saygılarımla!
Nazik cevabınız için öncelikle teşekkür ederim.
Doğrudur. INSERT işlemi uyguladığımda DBCheckBox default değerleri veritabanından almıyor. Default değerlerin veritabanından okunması için Insert() komutunun peşinden Refresh() komutu kullanmak zorunda kalıyorum:
DBNavigatorMain->DataSource->DataSet->Insert();
DBNavigatorMain->DataSource->DataSet->Refresh();
Ayrıca, belirttiğiniz gibi, BeforeInsert veya AfterInsert event'lerini kullanarak default değerleri tek tek atamakta bir çözüm olabilir ama doğru çözüm olduğu konusunda (pratik olmadığı için) tereddütlerim var.
Bildiğim kadarıyla, TDBCheckBox'ın sizin tanımladığınız koşulları taşıyan bir özelliği yok. Sadece ValueChecked ve ValueUnchecked olmak üzere işaretlendiğinde ve işaretlenmediğinde alacağı değerleri belirleyen 2 özelliği var.
Bir de yardım dosyasında aşağıdaki gibi bir ifade var:
If the DataField of the database check box is a logical field, the check box is always checked if the contents of the field is true, and it is always unchecked if the contents of the field is false. The values of the ValueChecked and ValueUnchecked properties have no affect on logical fields.
Saygılarımla!
Selamlar,
Aslında düşününce Default Değerler (DB'de Table'lara tanımlanan Default Değerler) Insert sırasında değer alırlar.
Yani, INSERT cümlesi yolladığınızda SERVER'a eğer siz o FIELD'lar için bir değer SET etmediyseniz FIELD o durumda nasıl bir değer ile doldurulup kaydolunması gerektiğini belirtmiş oluyorsunuz.
REFRESH zorunluluğu da burada geliyor. Ben genelde bu tür durumlardan uzak dururum ve şöyle bir mantık izlerim. Daha önceden benzer sorunlarla karşılaştığım için LOGICAL FIELD kullanmam. Onun yerine INTEGER bir FIELD'a 0 veya 1 Değerlerini vererek kontrollerimi sağlarım. Ayrıca Delphi ile yazarken kullandığım bileşenlerin de değerlerini ValueChecked = 1 ve ValueUnchecked = 0 olacak şekilde düzenlerim.
Belki siz de böyle bir yöntem uygulayabilirsiniz. Bu bir çok sıkıntıyı da ortadan kaldırır diye düşünüyorum. Deneyin bakalım olacak mı?
Kolay Gelsin
Aslında düşününce Default Değerler (DB'de Table'lara tanımlanan Default Değerler) Insert sırasında değer alırlar.
Yani, INSERT cümlesi yolladığınızda SERVER'a eğer siz o FIELD'lar için bir değer SET etmediyseniz FIELD o durumda nasıl bir değer ile doldurulup kaydolunması gerektiğini belirtmiş oluyorsunuz.
REFRESH zorunluluğu da burada geliyor. Ben genelde bu tür durumlardan uzak dururum ve şöyle bir mantık izlerim. Daha önceden benzer sorunlarla karşılaştığım için LOGICAL FIELD kullanmam. Onun yerine INTEGER bir FIELD'a 0 veya 1 Değerlerini vererek kontrollerimi sağlarım. Ayrıca Delphi ile yazarken kullandığım bileşenlerin de değerlerini ValueChecked = 1 ve ValueUnchecked = 0 olacak şekilde düzenlerim.
Belki siz de böyle bir yöntem uygulayabilirsiniz. Bu bir çok sıkıntıyı da ortadan kaldırır diye düşünüyorum. Deneyin bakalım olacak mı?
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
bende kendi çabımda veri tabanı programları yazıyorum. bencede çözüm en sancısız olduğu şekilde bu after inser olayında alana değer atamak.CLMan yazdı: Ayrıca, belirttiğiniz gibi, BeforeInsert veya AfterInsert event'lerini kullanarak default değerleri tek tek atamakta bir çözüm olabilir ama doğru çözüm olduğu konusunda (pratik olmadığı için) tereddütlerim var.
Saygılarımla!
sorunun sizden gizli bir tarafı daha var. örneğin tabloyu alter ettiniz ve default değeride unuttunuz. yandı gülüm keten helva işte.
Kuri usta nın iki öneriside uygulanabilir ancak ben hazır gelecek bütün değerler için after insert i kullanırım.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Veritabanında tanımlı bir integer alana atadığım default değerde maalesef bileşenler tarafından okunmuyor.REFRESH zorunluluğu da burada geliyor. Ben genelde bu tür durumlardan uzak dururum ve şöyle bir mantık izlerim. Daha önceden benzer sorunlarla karşılaştığım için LOGICAL FIELD kullanmam. Onun yerine INTEGER bir FIELD'a 0 veya 1 Değerlerini vererek kontrollerimi sağlarım. Ayrıca Delphi ile yazarken kullandığım bileşenlerin de değerlerini ValueChecked = 1 ve ValueUnchecked = 0 olacak şekilde düzenlerim.
Belki siz de böyle bir yöntem uygulayabilirsiniz. Bu bir çok sıkıntıyı da ortadan kaldırır diye düşünüyorum. Deneyin bakalım olacak mı?
En son çözüm olarak (içime sinmese de) şimdilik, OnNewRecord event içinde default alan değerlerini tek tek atamayı seçtim.
Saygılarımla!