if

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

if

Mesaj gönderen husonet »

Merhaba

Arkadaşlar programımda şu şekilde bir kod kullanıyorum aklıma takılan bir konu var acaba yanlış mı düşünüyorum .


if (str <> '') And (str <> '') then
begin
Koşullara uyuyorsa gerçekleşecek kod.
end;

Yukarıda yazdığım gibi bir kodda her iki koşulun gerçekleşmesi esnasında begin end bloğu içindeki kodlar gerçekleşmesi lazım çünkü and operatörü kullandım. Benim programımda ikisinden biri gerçekleştimi begin end bloğu çalışıyor. Ben bu kodu exelden database veri yüklerken kullanıyorum. Programım düzgün çalışıyor sadece aklıma takıldığı için soruyorum kodun tamamıda aşağıda. Benim mantığıma göre doğrusu OR operatörü olması lazım ama niye And operatöründe verim yakalıyorum.

Kod: Tümünü seç


var
    book:variant;
    excel,sheet:variant;
    satir, sutun:integer;
    str:string;
begin

    excel := createOleObject('Excel.application');
    OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
    if opendialog1.Execute then
    begin
        book:= Excel.WorkBooks.Open(OpenDialog1.FileName);
        try
            Screen.Cursor := crHourGlass;
            ProgressBar1.Visible := True;
            label1.Visible := True;
            sheet := book.worksheets[1];
            for satir:=2 to 2500 do
            begin
                str := sheet.cells[satir, 1];
               // iF (str <> '') then
                if (str <> '') And (str <> '') then
                begin
                    Update;
                    Label1.Caption := str;
                    ProgressBar1.Position  := satir;
                    AdoDataset1.Append;
                    for sutun:=1 to 11 do
                        AdoDataset1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
                    AdoDataset1.Post;
                end;
            end;
            Excel.quit;
            excel:=Unassigned;
        finally
            Screen.Cursor := crDefault;
            ProgressBar1.Visible := False;
            Label1.Visible := False;
        end;
    end;

End;
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

belki if döngüsünü mantığında bir problem olabilir. Burda boş (arada boşlu yok ama ben var diye düşündüm) değilse ve o garip karakter değilse çalış demişsiniz. Yani bunlar değilse kod çalışır.

En güzeli bu if satırından önceki satıra bir breakpoint koyup adım adım çalıştırın ve Str ne değerler alıyor bakın. Eğer değerler doğruysa şart ifadesini değiştirin.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba,

Hocam arada boş kayıt var. 1 satır dolu 1 satır boş o garip işarette dosya sonu çünkü ben bu excel dosyasını LKS'nin otomatik dökümünden alıyorum işte o işaretide LKS programı veriyor bu sebepten dolayı kontrol yaptırıyorum.

Normalde iki koşulun aynı anda gerçekleşmesini istemiyorum çünkü bu kontrol satır satır ve sadece bir hücre kontrol ediliyor bu işlemi OR ile yaptığım zaman kontrollerimin hiç bir faydası olmuyor çok garip bir durum inanın 24 saat tir bu konuyu düşünüyorum.

Hocam breakpoint nasıl konulur biraz açıklarmısınız.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

En kolay, kod penceresinin solundaki gri sutuna klikleyerek ilgili satira break point koyabilirsiniz. Ya da Run menuzun altindaki breakpoint seceneginden...

Program calışırken breakpoint olan satıra geldiğinde durur ve sizin komutlarınızla (F7, F8) satır satır devam eder. Eger F7'e basarsaniz o satirda cagirilan bir fonksiyon vs. varsa o fonksiyonun kodlarına dalalnılır. F8 ise o fonksiyonu tek satır olarak işleyip geçmenizi sağlar. Değişkenlerin üstüne mouse ile gelince veya watch ekleyince de değişkenlerin o anki içeriklerini görebilirsiniz..
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam Teşekkür Ederim birde watch eklemek nasıl oluyor cahilliğim için kusura bakmayın.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

watch eklemene gerek yok. fareyi değerini görmek istediğin değişkenin üzerine getir, o gösterir.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

evet mouse ile üstüne gelince görünüyor zaten. Ama yine de Run menusus altinda Add Watch var. Bir componentin kodda olmayan bir özelliğinin degerine bakmak isterseniz mesela o zaman eklemeniz gerekebilir.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Add Watch in kısayol tuşu ctrl+F5

Şöyle bir örnek vereyim:

Mesela satırda Query1.Open var. Bunun üzerindeyken ctrl+F5 yaptın. Gelen satıra Query1.Text yazap enter yaparsan querynin sorgulayacağı sql cümlesini görürsün..
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Bu tür ifadelerde and operatorleri or operatorleri gibi çalışacaktır. Gayet normal. Kurduğunuz mantığa dikkat ederseniz str değişkeni boş olmadığında ve EOF olmadığında çalış demişsiniz. İki ifadenin birisi gerçekleştiğinde kod mutlaka çalışacaktır. Bu sorunu ya peşpeşe iki tane if kullanarak çözmeye çalışın yada endif kullanın.Veya içiçe if kullanın.
Sorun aynı değişkenin iki ayrı değeri aynı anda kontrol etmesinden kaynaklanıyor.
Yani şöyle olsaydı if str<>'' and str1<>'' then gibi bir ifade olsaydı hiç bir sorun yaşamayacaktınız. İki farklı değişkeni and operatorü ile kontrol edebilirsiniz ancak aynı değişkeni and operatoru ile kontrol etmeye kalkıştığınızda and operatoru sanki or operatoru gibi çalışacaktır. Bi kaç kez bende aynı sorunu yaşadım da ordan biliyorum. :D
Sevgiler...
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Arkadaşlar hepinize çok teşekkür ederim.

Şair Hocam beni and operatörü konusunda aydınlattığınız için ayrıca teşekkür ederim.

İyi Akşamlar.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

and or ifadeleri binary sayı sisteminde ki mantıkla çalışırlar. Okul hayatım boyunca matemetiğin gördüğüm 2. faydasıdır benim için :lol: ilk 4 işlemolmuştur. zaten geriside boştur :lol: :P

and operatorunde tüm koşullar doğruysa sonuç doğru döner diğer şartlarda false tır.
aşağıda 1 True 0 False ı temsil ediyor

Kod: Tümünü seç

1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0
or operatörü tüm olasılıklar yanlışsa sonuç YANLIŞ döner diğer şartlarda True dur

Kod: Tümünü seç

1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

Arada konu biraz dağılmış ama

if (str <> '') And (str <> '') then begin .....

burada OR kullandığınında str'de herhangi bir karakter var ise ('' de dahil) sürekli begin'den sonraki işlemi yapacaktır. Yani ikinci koşula hiç bakılmayacaktır.

Kod: Tümünü seç

If  (str <> '') Then 
   begin
   If  (str='') Then 
       begin
       // satır sonunu buldu.
       end
   //Herhangi bir karakter var..
   .
  end

Cevapla