Mükerrer Kayıt Sorunu

23/11/2017, 15:52

oosmaner

aşağıda verdiğim kod ile ben gelen giden evrak kayıt işlemi yapıyorum ancak aynı anda iki kullanıcı sıra no ver dediği zaman .. aynı sırayı alıyorum. tek kullanımda sorun yok ancak iki ve daha fazla kullanıcıda mükerrer kayıt oluşuyor. ( ÖRNEK 2017/17507 - 2017/17507) gibi


Private Sub Komut11_Click()
Dim b As Integer
b = (Nz(DMax("[FİŞNO]", "Siparişgiden", "[TİPİ]= Forms!frm_siparisgiden!MyTipi And [dizin] = Forms!frm_siparisgiden!Mydizin"), 0)) + 1

If b = 0 Then
If Me.MyTipi = "2013" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2014" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2015" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2016" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2017" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2018" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2019" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2020" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2021" Then
Me.Mynumara = 1
ElseIf Me.MyTipi = "2022" Then
Me.Mynumara = 1
End If
Else
Me.Mynumara = b
End If
'If Me.TİPİ = "2013" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2013'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2013'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2013" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2013'"), 0) + 1
'If Me.TİPİ = "2014" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2014'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2014'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2014" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2014'"), 0) + 1
'If Me.TİPİ = "2015" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2015'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2015'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2015" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2015'"), 0) + 1
'If Me.TİPİ = "2016" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2016'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2016'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2016" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2016'"), 0) + 1
'If Me.TİPİ = "2017" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2017'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2017'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2017" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2017'"), 0) + 1
'If Me.TİPİ = "2018" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2018'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2018'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2018" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2018'"), 0) + 1
'If Me.TİPİ = "2019" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2019'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2019'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2019" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2019'"), 0) + 1
'If Me.TİPİ = "2020" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2020'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2020'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2020" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2020'"), 0) + 1
'If Me.TİPİ = "2021" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2021'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2021'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2021" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2021'"), 0) + 1
'If Me.TİPİ = "2022" And (Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2022'"), 0)) = 0 Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2022'"), 0) + 00000000000: Exit Sub
'If Me.TİPİ = "2022" Then FİŞNO = Nz(DMax("FİŞNO", "Siparişgiden", "TİPİ = '" & "2022'"), 0) + 1
DoCmd.RunCommand acCmdSaveRecord
End Sub
Private Sub Komut6_Click()
On Error GoTo Err_Komut6_Click

   DoCmd.GoToRecord , , acNewRec
 
  'Call Kod_Ver
 
Exit_Komut6_Click:
   Exit Sub
Err_Komut6_Click:
   MsgBox Err.Description
   Resume Exit_Komut6_Click
   
End Sub
Sub Kod_Ver()
Dim ks, pryd As Integer, gd As String, bslgc As Boolean, SayiDegeri, trz As Long
SayiDegeri = Nz(DMax("id", "Siparişgiden"), 0) + 1
pryd = 10
trz = Fix(SayiDegeri / pryd)
If trz = 0 Then trz = 1
gd = ""
bslgc = False

For ks = 6 To 1 Step -1
If (trz > (26 ^ ks)) Or (bslgc = True) Then
bslgc = True
gd = gd & Chr(64 + Int(trz / (26 ^ ks)))
trz = trz - ((26 ^ ks) * (Int(trz / (26 ^ ks))))
End If
Next ks
gd = gd & Chr(64 + trz)

While InStr(1, gd, "@") > 0
gd = Trim(Left(gd, InStr(1, gd, "@") - 2) _
& Chr(Asc(Mid(gd, InStr(1, gd, "@") - 1, 1)) - 1) _
& "Z" & Mid(gd, InStr(1, gd, "@") + 1, 7))

While Left(gd, 1) = "@"
gd = Trim(Mid(gd, 2, 7))
Wend
Wend
FİŞNO = gd & "-" & Format(SayiDegeri, "00000000")
End Sub
23/11/2017, 16:32

ozanakkaya

Açılan iki konu birleştirildi.

Acilll Yardımmmmmm şeklinde açılan konu başlığı düzeltildi.

Bu şekilde konu açarsanız uyarı puanı alabilirsiniz.

Çözüm bulmak için örnek uygulamanızı ekleyiniz.
23/11/2017, 22:50

ozguryasin

örnek olmadığı için yazamadım. aşağıdaki kodu kendinize uyarlayabilirsiniz.

Dim rS As New ADODB.Recordset
SQL = "SELECT dbo_SFaturalar.FaturaNo, dbo_SFaturalar.Durumu FROM dbo_SFaturalar " & _
"WHERE dbo_SFaturalar.FaturaNo='" & Me.FaturaNo & "'" & " AND dbo_SFaturalar.Durumu <>'Silindi';"
rS.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If rS.EOF = False Then GoTo 100
GoTo 200
100
MsgBox "HOPS!!"
Me.FaturaNo = Null: Me.FaturaTarih.SetFocus: Me.FaturaNo.SetFocus
200
rS.Close: Set rS = Nothing
23/11/2017, 22:51

ozguryasin

yapmanız gereken sorguyu düzenlemek, sorguyu oluştuun ve istediğiniz kadar kriter ekleyin, son verilen numaraya 1 ekletin. veya kayıt et işleminde numara verdirin.
28/11/2017, 15:31

oosmaner

bu denemede programı ortakta kullandığımda.
2 kullanıcı aynı anda örneği gönderdiğim giden evrak kayıt formunda ." sıra no alınız tuşuna" bastığında aynı sıra numarasını veriyor. Bunun önüne nasıl geçebilirim ayrıca.. verilen numaranın öÖRnek 2017/17504 verdiğinde mesaj kutusu ile bilgilendirmesini nasıl yapabilirim şimdiden teşekkür ederim
28/11/2017, 16:23

C*e*l*o*y*c*e

sayın osmaner
Bu tür numara verme olaylarında yapılacak ve karışıklıgı önlemenin en idal yolu:Numarayı ilk önce almak değil,bilgiler girirlip kaydet tuşuna bastıktan sonra numarayı alarak kaydetmesi en dogru olanıdır. sizde bunu için Kaydet tuşuna basınca en son numarayı alarak kaydetmesini saglayın,otomatik numara alma veya 1 artırarak numara alma örnekleri  sitede  vardır.