do while loop kullanılışı

22/03/2009, 16:15

accessman

iyi günler arkadaşlar
do while loop döngüsü ile ilgili ders anlatımı veya örnek varmı acaba
mesala şöylemi olmalı
-----------------------
onay1.value=false
Do while onay1.value=true
metin1= rnd()
onay1.value=true
loop
-----------------------
teşekkürler
22/03/2009, 16:29

okileturc

Selamlar

Örnekte görüldüğü gibi
Koşul gerçekleştiği sürece bir eylemin
tekrar etmesi

3 bölümden oluşur
___________________________________
1.
Do While öncesi bildirimler
Do While + Koşulunuz ( bu koşul sağlandığı sürece eylem tekrar edilir )

2.
Tekrar edilecek eylemlerin bütünü

3.
Loop
Koşul sağlanmadığı duruma gelince yapılacak bildirimler

_____________________________________
Örnek :

Dim SAYAC AS Integer
SAYAC = 20

Do While SAYAC > 0
MsgBox " Sayaç henüz sıfırlanmadı"
SAYAC=SAYAC-1

Loop
MsgBox " Sayaç sıfırlandı"

Selamlar
23/03/2009, 00:29

accessman

teşekkürler
23/03/2009, 09:40

Nurullah_Serdar

yaptığım veritabanında yıl sonunda izin birleştirmesi için kullandım bu kodları.
Kod:
'Kayıt Aktarılacak Personel Sicillerini Alacağız

Dim dbsizinaktar As DAO.Database
Dim rstizinaktar As DAO.Recordset
Dim dbpathizinaktar As String

dbpathizinaktar = DLookup("yol", "yol")
Set dbsizinaktar = DBEngine.OpenDatabase(dbpathizinaktar)
Set rstizinaktar = dbsizinaktar.OpenRecordset("SELECT * FROM anatablo WHERE ((anatablo.GörevDurumu)='" & "GÖREVE BAŞLADI')")

With rstizinaktar
.MoveLast
.MoveFirst

Do While Not .EOF
'siciller sıralanıyor

Dim rstizinaktar1 As DAO.Recordset
Dim izin As Integer
izin = 0

' Kullandığı İzinler Hesaplanıyor
Set rstizinaktar1 = dbsizinaktar.OpenRecordset("SELECT * FROM Izin WHERE (Izin.Sicili)=" & !Sicili)

If rstizinaktar1.RecordCount <> 0 Then
    With rstizinaktar1
    .MoveLast
    .MoveFirst
    Do While Not .EOF
    izin = izin + !KullandigiIzin
    
    
    .MoveNext
    Loop
    .Close
    End With
End If

'Hakettiği İzinler Hesaplanıyor

Dim rstizinaktar2 As DAO.Recordset

Dim izinhak As Integer
izinhak = 0

Set rstizinaktar2 = dbsizinaktar.OpenRecordset("SELECT * FROM Izin WHERE (Izin.Sicili)=" & !Sicili)

If rstizinaktar2.RecordCount <> 0 Then
    With rstizinaktar2
    .MoveLast
    .MoveFirst
    Do While Not .EOF
    izinhak = izinhak + !HakettigiIzin
      
    
    .MoveNext
    Loop
    .Close
    End With
End If

'Yıllık İzin Girişi Yapılıyor

Dim rstizinaktar3 As DAO.Recordset
Set rstizinaktar3 = dbsizinaktar.OpenRecordset("SELECT * FROM Izin ")

    rstizinaktar3.AddNew
    rstizinaktar3!Sicili = !Sicili
    rstizinaktar3!Adi = !Adi
    rstizinaktar3!Soyadi = !Soyadi
    rstizinaktar3!GörevYeri = !GörevYeri
    rstizinaktar3!SubeBüro = !SubeBüro
    rstizinaktar3!IzinYili = Year(Date)
    rstizinaktar3!IzinTürü = "YILLIK İZİN GİRİŞİ"
    rstizinaktar3!BaslamaTarihi = Date
    'Toplam İzin hakkı - kullandığı izin hakkı yıllık izin hakkından büyükse
    If (izinhak - izin) > !YillikIzinGunu Then
    'yıllık izin hakkı olarak kalan izninden yıllık izin hakkını çıkarıyoruz
    rstizinaktar3!HakettigiIzin = (!YillikIzinGunu * 2) - (izinhak - izin)
    rstizinaktar3!Açiklama = "Yıllık İzin Hakkından Geçen Yılın Fazlalık İzni Düşülmüştür"
  
    Else
    'değilse normal izin hakkını giriyoruz
    rstizinaktar3!HakettigiIzin = !YillikIzinGunu
    End If
     rstizinaktar3!Onay = -1
    rstizinaktar3.Update
    rstizinaktar3.Close
    
.MoveNext
Next I
Loop

.Close
End With
dbsizinaktar.Close
23/03/2009, 09:53

Krizantem

Ben daha sitede yeniyim fakat bir şey yazmak istiyorum.
Mod olan bir arkadaşı uyarmak gibi algılamazsanız sevinirim. Sonuçta burası bir paylaşım platformu. Herkes paylaşacak ki gelişeceğiz.
Alıntı:With rstizinaktar
.MoveLast
.MoveFirst

Do While Not .EOF
'siciller sıralanıyor

Dim rstizinaktar1 As DAO.Recordset
Dim izin As Integer
izin = 0

' Kullandığı İzinler Hesaplanıyor
Set rstizinaktar1 = dbsizinaktar.OpenRecordset("SELECT * FROM Izin WHERE (Izin.Sicili)=" & !Sicili)

If rstizinaktar1.RecordCount <> 0 Then
With rstizinaktar1
.MoveLast
.MoveFirst
Do While Not .EOF
izin = izin + !KullandigiIzin


.MoveNext
Loop
.Close
End With

Hata olarak gördüklerim
1. While döngüsü içinde bir dim yapılıyor. Her döngüde tekrar tekrar tanımlanıyor. Tanımlananı da sonuna kadar giderek tarıyor. Sanki orada bir Dsum kurtarıcakmış gibi.
2. Hatta veri tabanını görsem büyük ihtimalle tek bir Sql ile çözülebilir sanırım. Ben olmasam da değerli arkadaşlar yapabilirler.

Nacizane fikrime göre bu kod inanılmaz yavaş çalışlan bir kod gibi geldi bana.
23/03/2009, 10:41

Nurullah_Serdar

dsum etki alanı topluluğu . bir tablo veya sorgudan kullanabilirsin. benim veritabanım kodlarımın bulunduğu veritabanında değil. dao ile bağlantı kullanıyorum. dim için dediğin belki doğru olabilir ama kodlardaki tanımlamarı kullanacağım yere yakın yazıyorum. bir sorun çıktığı zaman gözümün önünde olsun diye. farklı birsürü fikir çıkabilir. ama herkesin bir çalışma prensibi var. yavaş demişsin hiçte öyle bir problemi yok. altı üstü bir tanımlama.