IBQuery Boolean Firebird

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

IBQuery Boolean Firebird

Mesaj gönderen Commandx »

Arkadaşlar bir tablom var
Bu tabloda ödeme yapılıp yapılmadığını boolean sorgu ile belirlediğim Odendi adında bir sütunum var
IBQuery ile mesela

Kod: Tümünü seç

procedure TForm2.RadioButton1Click(Sender: TObject);
begin
IBquery1S.Close;
IBquery1S.SQL.Clear;
IBquery1S.SQL.Add('select * From ICRA Where  ODENDI Like '''+'True'+'%'''  );
IBquery1S.Open;
end;

Ödendileri görüntüleyebiliyorum fakat False yaptığım zaman görüntülenmiyor
hatta kodu alttaki şekilde düzenledim boolean geri dönmüyor

Kod: Tümünü seç

procedure TForm2.RadioButton2Click(Sender: TObject);
begin
IBquery1S.Close;
IBquery1S.SQL.Clear;
IBquery1S.SQL.Add('select * From ICRA Where  ODENDI Like '''+'False'+'%'''  );
IBquery1S.Open;
end;

Dikkatimi çekti Firebird kullanıyorum interbase, MS Access mdb veritabanına hiç benzemiyor.
SQL yapısı Accessteki ile aynı zannetmiştim fakat çok kötü
Burada takıldım.

Sütunlar VARCHAR olmak zorunda kaldı, Düşündüm bunu integer yapıp DBcheckbox larla veri girişi yaparken False/True değilde 1 ve 0 gibi yapayım dedim ama True False döndürmek istiyorum
Şaşırdım kaldım, bir sürü tablo var hepsini değiştirmek istemiyorum.


Boolean sorgusu cümlesini bilen varsa bi zahmet yazarsa sevinirim.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: IBQuery Boolean Firebird

Mesaj gönderen ertank »

Merhaba,

Kullandığınız FirebirdSQL sürümü nedir? ICRA tablosunda ODENDI kolonu tanımı nasıl yapıldı? "CREATE TABLE ICRA" ile başlayan komutta ODENDI alanı için hangi ifade yazıyor?
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: IBQuery Boolean Firebird

Mesaj gönderen Commandx »

ertank yazdı: 24 Ağu 2018 07:04 Merhaba,

Kullandığınız FirebirdSQL sürümü nedir? ICRA tablosunda ODENDI kolonu tanımı nasıl yapıldı? "CREATE TABLE ICRA" ile başlayan komutta ODENDI alanı için hangi ifade yazıyor?
Firebird 2.5 kullanıyorum, daha önce Firebird 2.0 kullanmıştım böyle hatalar hiç yoktu.
FireBird 2.0 a hatta Firebird 1,5 a geri dönmeyi düşünüyorum maalesef, Firebird Gittikçe cıvıklaşmaya başladı.
True ve False text olarak yazıyor, zaten yazmıştım VARCHAR sabit belli uzunlukta Null, fakat içeriğindeki karakterler değişken text bu belli değeri aşamayan alan Variabled Char'ın kısaltılmışı.
Bu alanları tek tek char,varchar,integer,blob,date,time,decimal,numeric,float,bigint,double precision,numeric,time stamp gibi alanlarda kullanıp dbcheckboxlardan 1 ve 0 yaptığımda bütün alanlarda hata verdi sadece VARCHAR alanında hata vermedi.
True false değerlerini DBcheckbox ile kullandığım VARCHAR alanına yazdırıyorum , İB Expert alanına yazmış mı diye bakıyorum evet true false bulunuyor.

Yapmak istediğim IBQuery ile sorgulamamda ilk mesajımdaki yukarıdaki kodlar true yi döndürüyor true alanlar listeleniyor fakat false alanlar listelenmiyor, tuhaf
Interbase güzel hoş ama maalesef Ado bileşenleri kadar etkili özellikli değil, AdoQuery üzerinden kayıt yapılabilindiği halde IBQuery üzerinden kayıt yapamıyorsun, sadece sorgulatabiliyorsun. AdoQuery Sorgu ve kayıt özelliği mevcut IBQuery de sadece Sorgu özelliği var.

Bildiğiniz Adam gibi nitelikli interbase bileşen komponentleri var mı, illa da interbase Firebird kullanmak niyetim, MYSQL, MYDAC çok ilkel kalıyor.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: IBQuery Boolean Firebird

Mesaj gönderen ertank »

Commandx yazdı: 28 Ağu 2018 02:54 Firebird 2.5 kullanıyorum.
Boolean desteği Firebird 3.0 ile geldi. 2016-04-19 tarihinde resmi olarak yayınlandı. Eğer en son 3.0 sürüme yükseltir ve kolon veri türünü BOOLEAN yaparsanız aşağıdaki şekilde bir sorgu ile istediğiniz sonucu alabilirsiniz.

Kod: Tümünü seç

IBquery1S.Close();
IBquery1S.SQL.Text := 'select * From ICRA Where ODENDI';
IBquery1S.Open();
Mevcut tablonuzdaki verileri incelemeden bir öneride bulunmak mümkün değil maalesef. Farklı bilgileri kaydetmiş olma ihtimaliniz var. "True" yerine "TRUE" kaydedilmiş dahi olsa sorgu doğru cevap çevirmeyecektir.

Eğer içinde özel bilgi yok ise mevcut database yedeğini paylaşabilirseniz mevcut durum ile ilgili öneride bulunmak mümkün olabilir.
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: IBQuery Boolean Firebird

Mesaj gönderen Commandx »

Boolean desteği Firebird 3.0 ile geldi. 2016-04-19 tarihinde resmi olarak yayınlandı. Eğer en son 3.0 sürüme yükseltir ve kolon veri türünü BOOLEAN yaparsanız aşağıdaki şekilde bir sorgu ile istediğiniz sonucu alabilirsiniz.
Aradığım cevap buydu
Çok geri kalmışım :? :oops: , 2014 den beri ara vermiştim, boolean eklenmiş demekki. Bunu bilmiyordum, teşekkürler.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: IBQuery Boolean Firebird

Mesaj gönderen Commandx »

Son bir Sorum olacak.
Bu tür hatalar neden meydana geliyor, Trigger veya Generator oluşturmada sorun yaşıyorum
Trigger'imi ID adında bir sütundaki integeri arttırmasını istiyorum Aşağıdaki gibi bir hata alıyorum.
Nasıl bir yol izlemem gerek
Bu hata bazı tablolarda oluşmuyor, Hatta deneme amaçlı boş bir veritabanı açıp daha bismillah demeden ilk ID sütununu oluşturup Trigger veya Generator oluşturmaya kalktığımda çıkıyor.
https://resmim.net/f/0OTRad.jpg

Edit: FreeMan35
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: IBQuery Boolean Firebird

Mesaj gönderen ertank »

Eğer aşağıdaki komutu IBExpert içindeki "Script Executive" özelliğini kullanarak ("Use current connect" parametresi çalıştırmadan önce seçilmiş olmalıdır) çalıştırdığınız zaman hata mesajı almıyor iseniz sorun IBExpert'in kendisinde olma ihtimali var.

Kod: Tümünü seç

SET SQL DIALECT 3;

CREATE TABLE TEST (
  ID INTEGER NOT NULL PRIMARY KEY,
  ADSOYAD VARCHAR(50)
);

CREATE SEQUENCE GEN_TEST_ID;

SET TERM ^ ;
CREATE OR ALTER TRIGGER TEST_BI FOR TEST
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_TEST_ID, 1);
END
^
SET TERM ; ^
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: IBQuery Boolean Firebird Çözüldü

Mesaj gönderen Commandx »

İbdatasetin SelectSql kullanarak sıkıntıyı çözdüm
Firebirdin 1,5 versiyonlarında bile Boolean yaptırabiliyorum

Lazım olur diye ekleyeyim

Kod: Tümünü seç

/// False değeri için
   IBdataSETICRA.Close;
   IBdataSETICRA.SelectSQL.Clear;
    IBdataSETICRA.SelectSQL.Add('select * from KAYITLAR where ODENDI<>''1''');  // true olmayıp veritabanında dbcheckbox null olan alanlarıda getirir
    IBdataSETICRA.Open;

Kod: Tümünü seç

// True değeri için
   IBdataSETICRA.Close;
   IBdataSETICRA.SelectSQL.Clear;
    IBdataSETICRA.SelectSQL.Add('select * from KAYITLAR where ODENDI=''1''');  // veritabanında dbcheckbox Dolu olan alanlarıgetirir
    IBdataSETICRA.Open;
    
Ayrıca Domain de tanımlayarak da true false alan ekleyebiliyormuşuz

Kod: Tümünü seç

CREATE DOMAIN DMN_BOOLEAN as SMALLINT DEFAULT 0 NOT NULL 
CHECK ( VALUE in (0,1));
En son Commandx tarafından 27 Kas 2018 12:17 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: IBQuery Boolean Firebird Çözüldü

Mesaj gönderen ertank »

Commandx yazdı: 04 Eyl 2018 01:31 İbdatasetin SelectSql kullanarak sıkıntıyı çözdüm
Firebirdin 1,5 versiyonlarında bile Boolean yaptırabiliyorum
Merhaba,

Öncelikle artık desteklenmeyen uygulama sürümlerini kullanmamakta büyük fayda var. Birçok güvenlik açığı, uygulama hatası vb. sadece destek verilen uygulama sürümleri için düzeltilir. Bunun dışında eklenen yeniliklerden de mahrum kalmış olursunuz. FirebirdSQL için şu tarih itibariyle desteklenen sürümler 2.5 ve 3.0 sürümleridir. 2.5 sürümün de en son versiyonlarını kullanmakta fayda var. Zira FirebirdSQL 2.5.0 versiyonu çıkaralı 8 yıl kadar oluyor.

Yanlış anlamaya sebep vermemek adına, verdiğiniz örnek VARCHAR kolon türü üzerinde mantıksal kontrol yapıyor. Yoksa direk olarak BOOLEAN kolon türü kullanmıyor. Yıllar önce BOOLEAN kolon türleri desteklenmediğinde bu tür yaklaşımlar ile sorunlar çözülüyordu.
Cevapla