Olasılık

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Olasılık

Mesaj gönderen pro_imaj »

Merhaba,

Yaptığım arama kriterleri için olasılık ile hesaplamam gerekiyor. sorun şöyle.

arama alanında 7 tane kriter vardı ve son bir değişiklikle 10 tane kriter olacak ve birde 10 kriterin 2lisi olacak yani şöyle

Başlangıç Bitiş
VadeTarih
Çekno
AlimTarihi
ÇekiVeren
ÇekinsonDurumu
KayitTarihi
Tutar


böyle bir arama kriterinde
ben şöyle yapıyordum

Kod: Tümünü seç

tar:=0; {vade tarihi kontol değişkeni}
tut:=0;   {tutar kontrol değişkeni}
cekno:=0;   {çek numarası kontrol değişkeni}
cektur:=0;    {çekin son işlem türü kontrol değişkeni }
if (edit1.Text <>'') or  (edit2.Text <>'') then
begin
if (edit1.Text <>'') and (edit2.Text='') then edit2.Text:=edit1.Text;
if (edit2.Text <>'') and (edit1.Text='')then edit1.Text:=edit2.Text;
tar:=1;
end;

if (edit3.Text <>'') or  (edit4.Text <>'') then
begin
if (edit3.Text <>'') and (edit4.Text='') then edit4.Text:=edit3.Text;
if (edit4.Text <>'') and (edit3.Text='') then edit3.Text:=edit4.Text;
tut:=1;
end;

if (edit5.Text <>'') or  (edit6.Text <>'') then
begin
if (edit5.Text <>'') and (edit6.Text='') then edit6.Text:=edit5.Text;
if (edit6.Text <>'') and (edit5.Text='') then edit5.Text:=edit6.Text;
cekno:=1;
end;
 if combobox1.Text<>'' then cektur:=1;

sedece tarihe göre ARAMA  ++++}
if (tar=1) and (tut=0) and (cekno=0) and (cektur=0) then
Yukarıda sadece 4kriter var birde bunun 2 lisi istenince 7 diilde 14 olacak
yani

00000000000001
00000000000010
00000000000100
00000000001000
.......................
Böyle gidecek böyle bişeyi nasıl yaparım acaba.

Saygılarımla
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

merhaba,
bende bir programımda çoklu kritere göre sorgulama yaptğımda aşağıdaaki gibi bir kod kullanırım.

Kod: Tümünü seç

DataModul.QryEvrak.Close;
DataModul.QryEvrak.SQL.Strings[0]:='select * from EVRAKS where 1=1';
if bsSkinEdit1.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[1]:='and UPPER(AS_ADI_1)='+#39+formtyaz(bsSkinEdit1.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[1]:='';
if bsSkinEdit2.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[2]:='and UPPER(AS_SOYADI_1)='+#39+formtyaz(bsSkinEdit2.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[2]:='';
if bsSkinEdit3.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[3]:='and UPPER(TESYN_PLAKA)='+#39+formtyaz(bsSkinEdit3.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[3]:='';
if bsSkinDateEdit1.Text<>'  .  .    ' Then
DataModul.QryEvrak.SQL.Strings[4]:='and SIG_BT_TARIHI>='+#39+bsSkinDateEdit1.Text+#39
Else
DataModul.QryEvrak.SQL.Strings[4]:='';
if bsSkinDateEdit2.Text<>'  .  .    ' Then
DataModul.QryEvrak.SQL.Strings[5]:='and SIG_BT_TARIHI<='+#39+bsSkinDateEdit2.Text+#39
Else
DataModul.QryEvrak.SQL.Strings[5]:='';
if bsSkinDateEdit2.Text<>'  .  .    ' Then
DataModul.QryEvrak.SQL.Strings[6]:='and UPPER(KAYDEDEN)='+#39+formtyaz(bsSkinComboBox1.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[6]:='';
if bsSkinDateEdit2.Text<>'  .  .    ' Then
DataModul.QryEvrak.SQL.Strings[7]:='and UPPER(DUZENLEYEN)='+#39+formtyaz(bsSkinComboBox2.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[7]:='';
if bsSkinRadioGroup1.ItemIndex=1 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By AS_ADI_1'
else
if bsSkinRadioGroup1.ItemIndex=0 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By BLKODU'
else
if bsSkinRadioGroup1.ItemIndex=2 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By AS_SOYADI_1'
else
if bsSkinRadioGroup1.ItemIndex=3 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By TESYN_PLAKA'
else
if bsSkinRadioGroup1.ItemIndex=4 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By SIG_BT_TARIHI';
IF bsSkinCheckRadioBox1.Checked THEN
DataModul.QryEvrak.SQL.Strings[9]:='DESC'
ELSE
DataModul.QryEvrak.SQL.Strings[9]:='ASC';
DataModul.QryEvrak.Open;
neden with do kullanmıyorsun diyenlere. ben with do sevmem sonra acces violation yapıyor :)
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

formtyaz bu kriteri büyük harfe çeviren bir fonksiyonnndur
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

FAOsoft cevapların için tşk ederim. senin mantıkta çok hoş kritere uyuyorsa onu sql koduna ekliyorsun.

ama bunun şöyle bir sakıncası olabilir.SQL kodu çok komplike olmalı
ben olma yada olmama olasılığına göre yapıyorum.

birde aslında olasılığı nasıl hesaplatırım onu öğrenmek istiyorum aklımatakılmışken yani.
Kayıt No Çekin Son Durumu Çeki Veren Vade Tarihi Alım Tarihi Tutar Son Verildiği Yer
0 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 1 0 0
0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
1 1 1 1 1 1 1

ben halen yazmaya devam ediyorum birde hata olasılığım var onun içn.
teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

oguzozturk74 hocam teşekkür ederim.

tam aradığım olaylar.

Saygıalrımla
çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

FAOsoft yazdı:merhaba,
bende bir programımda çoklu kritere göre sorgulama yaptğımda aşağıdaaki gibi bir kod kullanırım.

Kod: Tümünü seç

DataModul.QryEvrak.Close;
DataModul.QryEvrak.SQL.Strings[0]:='select * from EVRAKS where 1=1';
[/quote]

Merhaba FAOsoft arkadaşım.
Yukarıda where 1=1 niçin kullandın acaba
bende and sorunun nasıl gideririm diye düşnüyordum yani sql eklicem ama ilk başta sabir bir şart olmalı diye düşünüyorum bu yüzdenmi böyle yaptın sende 

Saygılarımla
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

evet onu AND ifadesi için yerleştirdim oraya. tabloya direk bir bağlantısı yok 1=1 olduğu için sadece olmazsa olmaz bir formalite.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,

10 kriter için toplam 2^10 tane farklı durum oluşabilir. Ama siz bunu sadece bir integer değişken kullanarak halledebilirsiniz. Her kritere 2 nin katı olacak şekilde bir sayı belirleyin.

Kod: Tümünü seç

const
 Kriter1 = 1;
 Kriter2 = 2;
 Kriter3 = 4;
 Kriter4 = 8;
 Kriter5 = 16;
 Kriter6 = 32;
 ...
var
 Filtre : Integer;
begin
  Filtre := 0;
  if (edtKriter1.Text <>'') then  Filtre := Filtre + Kriter1;
  if (edtKriter2.Text <>'') then  Filtre := Filtre + Kriter2;
  if (edtKriter3.Text <>'') then  Filtre := Filtre + Kriter3;
  if (edtKriter4.Text <>'') then  Filtre := Filtre + Kriter4;
  ...
end;
Örneğin 1. ve 3. kriterler seçilmiş olsun, o durumda Filtre değişkeninin 2 lik sistemdeki değeri 101 olacaktır. Hangi bitlerin 1 olduğunu ise and operatörü ile kontrol edebilirsiniz

Kod: Tümünü seç

 if (Filtre and Kriter1 = 1) then ....
 if (Filtre and Kriter2 = 1) then ....
 if (Filtre and Kriter3 = 1) then ....
 if (Filtre and Kriter4 = 1) then ....
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

arkadaşlar verdiğiniz cevaplar için çok tşk ederim. sorunu çözdünm sayılır.
FAOsoft arkadaşımın verdiği örnek biraz daha sanki kolay gibi.

ama bundada şöyle bir sorun var.
ben programa girerken şirket seçimi yaptırıyorum buna göre query otomatik olarak değişerek bağlanıyorum.

ben kod ekleme mantığı ile yaparsam ilk baştaki bağlamada aynı sayıda satır mı olması gerek SQL cümlesi için.
yani

Kod: Tümünü seç

Sistem.AckToplamQuery.Close;
Sistem.AckToplamQuery.Sql.Clear;////bunu yapınca çalışmıyor
Sistem.AckToplamQuery.SQL[0]:='SELECT * FROM FINSAT4'+Giris.SdkQueryKod.Text+'.ACK  Where Banka<>ugur';
Sistem.AckToplamQuery.SQL[1]:='and EvrakNo       Between '  000001'      and  '010085'';
Sistem.AckToplamQuery.SQL[2]:='and SonIslemTip   Between '0'             and  '120'';
Sistem.AckToplamQuery.SQL[3]:='and Veren         Between '12034050'      and  '1203500200'';
Sistem.AckToplamQuery.SQL[4]:='and VadeTarih     Between '3'             and  '38497''
Sistem.AckToplamQuery.SQL[5]:='and AlimTarih     Between '3'             and  '38488''
Sistem.AckToplamQuery.SQL[6]:='and CekNo         Between '0240559'       and  '7000298''
Sistem.AckToplamQuery.SQL[7]:='and Tutar         Between '11'            and  '1177.9900000000''
Sistem.AckToplamQuery.SQL[8]:='and SonIslemCHK   Between '1020'          and  '1020100200'';
Sistem.AckToplamQuery.SQL[9]:='and AlimTarih <='38353''

Sistem.AckToplamQuery.Open;
Sistem.PortfoyeGirisEdit.text:=(FormatFloat('#,##0.00', (Sistem.AckToplamQuery.Fields[0].Value)));
Yukarıdaki şekilde yapmam için Queryi clear yapınca bu kodlar çalışmıyor birde Querynin içerisindeki sql cümlesi kadar olmazsa bu da sorun veriyor.
yukarıda 10 satır sql kodu oluşuyor.

bir diğer sorun ise birtürlü çözmeyi tama başaramadığım Sum ile ilgili bu sorguda Sum (Tutar) die sonucu toplatmam gerekiyor ama bir türlü çalışmıyor.

Not:daha koda if bloklarını eklemedim sadece genel olrak çalışmasını deniyorum.

Saygılarımla
Teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba,
Buraya SQL kodunu yazıyorum programlama kısmına sql kodu yazıyorum özür dilerim. Konu buraya geldiği için.

Kod: Tümünü seç

SELECT * FROM FINSAT402.ACK 
Where Banka<>'ugur'
and EvrakNo           Between '  000001'        and  '010085'
and SonIslemTip     Between '0'                   and  '120'
and Veren              Between '120340'          and  '1203500200'
and VadeTarih        Between '3'                   and  '38497'
and AlimTarih         Between '3'                   and  '38488'
and CekNo             Between '0240559'        and  '7000298'
and Tutar               Between '11'                 and  '1177.9900000000'
and SonIslemCHK   Between '1020'             and  '1020100200'
and AlimTarih <='20102005'
Yukarıdaki sql cümlesi ile sonuca ulaşıyorum fakat Sum (Tutar) dediğim zaman çalışmıyor.

Saygılarımla teşekkür ederim :oops:
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

querynin sql özelliğine önceden ekleyeceğin satır kadar boş satır olacak. run-time de boş satır oluşturmak için
query1.sql.add('');
komutunu kullan.
clear kullanmana gerek yok çünkü direk satırlara erişip o satırı değiştiriorsun. diğer satırlar değişmiyor.
örneğin

Kod: Tümünü seç

select * from tablo 
order by ADI
Burada

Kod: Tümünü seç

string[0]:='select * from tablo where 1=1'
dersen querynin sql özelliği aşağıdaki değeri alır.

Kod: Tümünü seç

select * from tablo  where 1=1
order by ADI
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

bu arada

Kod: Tümünü seç

AckToplamQuery.SQL[2]:=
bu şekilde değil

Kod: Tümünü seç

AckToplamQuery.SQL.Strings[2]:=
olacak
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Teşekkür ederim hocam.
sorunu çözdüm sizin yolla normalde ben benzer kodları sayfalarca yazıyordum and kısmını değiştirip.

Böyle daha mantıklı.

Allah (cc) hepinizdan razı olsun.

Saygılarımla
Teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

cümlemizden.
Cevapla