Skip to main content

AccessTr.neT


Vardiyeyi Random Atama

Vardiyeyi Random Atama

#7
Kodu aşağıdaki ile değiştir

Dim EnBuyukKimlik As Integer

EnBuyukKimlik = DMax("Kimlik", "Calisanlar")


Do Until Len(Vardiya_1_Adi) > 1 And Len(Vardiya_2_Adi) > 1 And Len(Bakim_1_isim) > 1 And Len(isci_isim_1) > 1 And Len(isci_isim_2) > 1 And Len(yaz_isim) > 1 And Len(ciz_isim) > 1


   Do Until Len(Vardiya_1_Adi) > 1
       GRandom1 = Int((EnBuyukKimlik - 1 + 1) * Rnd + 1)
       Vardiya_1_Adi = Dlookup ("Calisan_Adi", "Calisanlar", "[Kimlik] = " & GRandom1 & " And [Teknik]= -1")
   Loop
   
   Do Until Len(Vardiya_2_Adi) > 1
       Vardiya_2_Adi = Nz(DLookup("Calisan_Adi", "Calisanlar", "[Teknik]= -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "'))"), "1")
       If Vardiya_2_Adi = "1" Then Exit Do
   Loop
   
   Do Until Len(Bakim_1_isim) > 1
       Bakim_1_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[Bakim] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "'))"), "1")
       If Bakim_1_isim = "1" Then Exit Do
   Loop
   
   Do Until Len(isci_isim_1) > 1
       isci_isim_1 = Nz(DLookup("Calisan_Adi", "Calisanlar", "[isci] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "'))"), "1")
       If isci_isim_1 = "1" Then Exit Do
   Loop
   
   Do Until Len(isci_isim_2) > 1
       isci_isim_2 = Nz(DLookup("Calisan_Adi", "Calisanlar", "[isci] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "'))"), "1")
       If isci_isim_2 = "1" Then Exit Do
   Loop
   
   Do Until Len(yaz_isim) > 1
       yaz_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[yazici] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "', '" & isci_isim_2 & "'))"), "1")
       If yaz_isim = "1" Then Exit Do
   Loop
   
   Do Until Len(ciz_isim) > 1
       ciz_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[cizici] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "', '" & isci_isim_2 & "', '" & yaz_isim & "'))"), "1")
       If ciz_isim = "1" Then Exit Do
   Loop

Loop
Cevapla
#8
(18/05/2017, 19:54)blue_wall yazdı: Hocam çok teşekkür ederim fakar sanırım bu örnekte raporlama için yol gösterilmiş.bu yol her bilgisayara uygun olmayabilir.Kodların sonucu Excel olarak çıkıyor ama exceli göremedim.Bu yüzden zahmet etmişsiniz ama benim verdiğim örenkteki olay rnd komutu kullanımı sanırım ama rnd komutu için tam bir açıklayıcı örenk bulamadım.Rnd'yi sürekli rakam ile oyun türü şeyler yazarken kullanmışlar.

Aslında, VT nizi indirip inceledim ve bende Random komutunu sorguda kullanıp verileri rastgele seçmeye çalıştım ancak bir yere kadar gelebildim. Bu aralar biraz yoğun çalıştığımdan pek girip bakamıyorum. Söz vermeyeyim ama müsait olduğumda tekrar bir uğraşayım. Bu arada umarım üstatlardan biri el atar. Kolay gelsin.
Cevapla
#9
(19/05/2017, 03:26)ozanakkaya yazdı: Kodu aşağıdaki ile değiştir

Dim EnBuyukKimlik As Integer

EnBuyukKimlik = DMax("Kimlik", "Calisanlar")


Do Until Len(Vardiya_1_Adi) > 1 And Len(Vardiya_2_Adi) > 1 And Len(Bakim_1_isim) > 1 And Len(isci_isim_1) > 1 And Len(isci_isim_2) > 1 And Len(yaz_isim) > 1 And Len(ciz_isim) > 1


   Do Until Len(Vardiya_1_Adi) > 1
       GRandom1 = Int((EnBuyukKimlik - 1 + 1) * Rnd + 1)
       Vardiya_1_Adi = Dlookup ("Calisan_Adi", "Calisanlar", "[Kimlik] = " & GRandom1 & " And [Teknik]= -1")
   Loop
   
   Do Until Len(Vardiya_2_Adi) > 1
       Vardiya_2_Adi = Nz(DLookup("Calisan_Adi", "Calisanlar", "[Teknik]= -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "'))"), "1")
       If Vardiya_2_Adi = "1" Then Exit Do
   Loop
   
   Do Until Len(Bakim_1_isim) > 1
       Bakim_1_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[Bakim] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "'))"), "1")
       If Bakim_1_isim = "1" Then Exit Do
   Loop
   
   Do Until Len(isci_isim_1) > 1
       isci_isim_1 = Nz(DLookup("Calisan_Adi", "Calisanlar", "[isci] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "'))"), "1")
       If isci_isim_1 = "1" Then Exit Do
   Loop
   
   Do Until Len(isci_isim_2) > 1
       isci_isim_2 = Nz(DLookup("Calisan_Adi", "Calisanlar", "[isci] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "'))"), "1")
       If isci_isim_2 = "1" Then Exit Do
   Loop
   
   Do Until Len(yaz_isim) > 1
       yaz_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[yazici] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "', '" & isci_isim_2 & "'))"), "1")
       If yaz_isim = "1" Then Exit Do
   Loop
   
   Do Until Len(ciz_isim) > 1
       ciz_isim = Nz(DLookup("Calisan_Adi", "Calisanlar", "[cizici] = -1 And ([Calisan_Adi] not in('" & Vardiya_1_Adi & "','" & Vardiya_2_Adi & "', '" & Bakim_1_isim & "', '" & isci_isim_1 & "', '" & isci_isim_2 & "', '" & yaz_isim & "'))"), "1")
       If ciz_isim = "1" Then Exit Do
   Loop

Loop

Hocam öncelikle süper bir iş çıkarmışsın çok teşekkür ederim.Yalnız ben bu örenk üzerinden çalıştırdım ama başka bir örnekte anca "nz" fonksiyonunu kullanmadan yapabildim.Diğer örneğimde 33 masa var.

Ama hallettim.

Çok teşekkür ederim.Eline sağlık.

Öğrenğim tamamlandığında boş halini siteye atacağım.Hem başkalarınada faydası olur çünkü hiçbir sitede buna benzer bir örnek veya açıklama yok.

tekrar çok teşekkür ederim.
Not: NZ değişkeni hakkında bilgi verebilirsen sevinirim.

Giren arkadaşların anlaması için kodun kelime anlamını yazıyorum.Eğer hatalı anladıysam düzeltirsen sevinirim.

Enbüyükkimlik tamsayıdır.
Enbüyükkimlik formülü = en büyük çalışanların en büyük kimliği ile başlar.

Vardiya_1 - vardiya_2 ..... tümü 1 den büyüktür.

vardiya_1 1 den büyük olabilmesi için 

grandom1 tam sayısı enbüyükkimlik +1 eklenerek random bir rakam üretilmesi ile oluşur.

vardiya_1_adi kısmına calisan_adi nı calisanlar tablosundaki kimlik numaralarından grandom1 uygulayarak çıkan sonuçlardan teknik kısmı evet olanlardan birini getir.

........

diğerleride aynı..

sanırım dimi?
Cevapla
#10
Alıntı:Enbüyükkimlik tamsayıdır.

Enbüyükkimlik formülü = en büyük çalışanların en büyük kimliği ile başlar.

Bunun dışındaki açıklamanın tamamı yanlış.
Cevapla
#11
(20/05/2017, 02:55)ozanakkaya yazdı:
Alıntı:Enbüyükkimlik tamsayıdır.

Enbüyükkimlik formülü = en büyük çalışanların en büyük kimliği ile başlar.

Bunun dışındaki açıklamanın tamamı yanlış.

Hocam son verdiğin iki koddan bir kod çıkararak bişeyler yaptım.

Fakat aşağıdaki ihtimaller kısmında if kısmı (Eğer ikisi aynıysa değiştir) bölümünde her ihtimali yazmam gerekiyor 33 tane masaya yazacağım ihtimal sayısı yaklaşık 999 tane olacak.bu yüzden daha kolay yolu varmı yardımcı olabilirmisin.

sorgu ilede olur.diğerler bölümlerle eşleşmeyen bir rnd istiyorum.
Cevapla
#12
Son halini gönderiyorum
.rar Son hali.rar (Dosya Boyutu: 296,49 KB | İndirme Sayısı: 12)
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task