Sayın hocalarım iyi akşamlar!!!
Uzun zamandır kayıt işlemi ile ilgili bir program üzerinde çalışıyordum. Şükür programı bitirdim. Bir server üzerinden ağdan paylaşıma açtım ayrı bilgisayarlardan farklı kullanıcılar kayıt işlemi yaptığında kayıt sayısını mükerrer verdi. Kayıt işlemi yapılan formdaki alanlar ilişkisiz. Kaydet butonu ile kayıt işlemi gerçekleştiriliyor. Şimdilik tek sorun farklı bilgisayarlardan işlem yapıldığında aynı kayıt sayısını veriyor. Bunun için yapılması gereken bir ayar veya veri tabanını kontrol eden kod var mı. Accedeki ayarlardan paylaşılan ve kayıt kilit ayarlarını yaptım. Bir örnek göndermek isterdim ama eğer örnek göndermeden bu konuda bilgi ve deneyimi olan varsa onlardan ricam deneyimlerini benimle paylaşsınlar. Program sorunsuz çalıştığında tüm arkadaşlarla programı sitenizde paylaşacağım. Ama illaki bir örnek ekleyin diyorsanız sorun değil eklerim ama istiyorum ki aynı sorun başkalarıda yaşamasın sorunsuz çalışan bir programdan faydalansınlar. Eminim pek çok arkadaşın aradığı kodlar programımda vardır. Şimdiden yardımlarınız için teşekkür ederim.
sorununuzu anlamak için mesajınızı defalarca başa dönerek okudum, ancak; örnek olmadan anlamak çok zor.
Sayın kmercan2005
Eğer sayı alanını otomatik sayı yaptıysanız ve veri tabanını da paylaşıp her bilgisayarın ağ üzerinden bu bilgisayara yazmasını sağladıysanız bu dediğiniz mümkün değil. Ama ben şahsen geçenlerde böyle bir durumla karşılaştım. Ancak sebebi konusunda yaptığım incelemede programı hazırlayan arkadaşın bir tabloya ekleme sorgusu ile veri girdiğini, bir başka tabloda oluşturulan sayıları bir şekilde başka bir tabloya aktarmasıyla bu durumun oluştuğunu gördüm. Hatta sevgili arkadaşım Seruz'a da gönderdiğimde o da küçük dilini yutacaktı az kalsın
Çünkü gönderdiğim tabloya yeni kayıt girdiğinde otomatik sayı alanında mükerrer nolar geldiğini gördü. Bunun, ekleme sorgusuyla veri aktarılmasıyla da olsa nasıl olduğunu çözemedik. Ben de tüm verinin aktarma sorgusu olmadan tek tabloya yazılmasını sağlayacak şekilde formları ana tabloya bağlayarak -yani ekleme sorgularını kullanmayarak- sorunu çözdüm.
Sizinki de böyle olmasın sakın? Normal şartlarda bir tabloya nerden veri girerseniz girin otomatik sayı tekrarlanmaz. Ama ekleme sorgusunda -inanın nasıl olduğunu bilmiyorum- ama bir şekilde otomatik sayılar da diğer tablodan aktarılıyor.
Umarım faydası olmuştur.
Ancak bu arada ortak bir tabloya yazdığınıza emin olun.
Saytın hocam kayıt kodlarını gönderiyorum bir inceleyin anormal bir kod var mı bir kullanıcı kayıt girdiğinde sorun yok belkide farklı bilgisayarlardan işlem yapıldığı için olabilir mi bilmiyorum. Sayı alanı otomatik değil, bu tablonun birincil anahtarı da yok.
Private Sub StbKaydet_Click()
Dim rakkam As Double
Dim numara As Double
Dim kactane As Integer
rakkam = Nz(DMax("STStatBelID", "TBST"))
'Kayıt İçin ONAY İsteniyor....
If MsgBox("KAYDETMEK İSTİYOR MUSUNUZ?", vbYesNo) = vbNo Then
Cancel = True
MsgBox "" & "KAYDEDİLMEDİ" & Chr(10), 48, " KAYITTAN VAZGEÇME BİLGİSİ"
Call Form_Load
Else
'////////////////////////////////////////
' tabloya kayıt başlıyor
If Left(rakkam, 4) = CStr(Year(Date)) Then
kactane = Len(Trim(rakkam)) - 4
numara = Right(rakkam, kactane)
numara = numara + 1
STStatBelID2 = (Year(Date) * 100000) + numara
MsgBox "" & [STStatBelID2] & " " & " NO İLE BELGE KAYDI YAPILDI. " & Chr(10), 48, " STATÜ BELGESİ KAYIT BİLGİSİ"
Else
STStatBelID2 = (Year(Date) * 100000) + 1
MsgBox "" & [STStatBelID2] & " " & " NO İLE BELGE KAYDI YAPILDI. " & Chr(10), 48, " STATÜ BELGESİ KAYIT BİLGİSİ"
End If
If STStatBelID = "" Then
Dim Stb As New ADODB.Recordset
On Error Resume Next
Stb.Open "TBST", CurrentProject.Connection, 1, 2
Stb.AddNew
Stb!STStatBelID = STStatBelID2
Stb!STFirmaID = Me.FrmStVergiNo
Stb!STBeySahID = Me.FrmStBeySahVerNo
Stb!STBelAdi = Me.FrmStBölGirEvBelAd
Stb!STTesNo = Me.FrmStBölGirEvTesNo
Stb!STTesTar = Me.FrmStBölGirEvTesTar
Stb!STGelUlID = Me.FrmStGelUlKod
Stb!STMenseUlID = Me.FrmStMenseUlKod
Stb!STKapAdet = Me.FrmStKapAdet
Stb!STKapBrID = Me.FrmStKapBr
Stb!STMiktar = Me.FrmStMiktar
Stb!STMiktarBrID = Me.FrmStMiktarBr
Stb!STTgtc = Me.FrmStGtip
Stb!STCinsi = Me.FrmStCinsi
Stb!STBelID = Me.FrmStAtrEur1BelAd
Stb!STAtrEur1BelNo = Me.FrmStAtrEur1BelNo
Stb!STAtrEur1BelTar = Me.STAtrEur1BelTar
Stb!STAciklama = Me.FrmStAciklama
Stb!STKullaniciID = Me.SToturum
Stb.Update
Stb.Close
Set Stb = Nothing
'tabloya kayıt bitti
'*****************************************
End If
End If
Call Form_Load
End Sub
Siz kayıt işlemini tamamen kodlarla yapıyorsunuz. O zaman mükerrer olabilir elbette. Ben otomatik sayı alanının mükerrer olduğunu düşünmüştüm.
Bu durumda her makine güncellenmemiş bir verinin üzerinden sayı atacaktır. Benim önerim 2 tane:
1- Kayıt sayısını verme işini en sona bırakın ve "kayıt yap" gibi bir tuş koyup (zaten koymuşsunuzdur) kaydetme işinden 2 saniye önce tekrar son sayıyı sorgulayıp yeni kayıt sayısı ona göre verilsin.
2- Her login olan kullanıcıya bir değer verin ve o kullanıcının yaptığı kaydın başında veya sonunda bu değer yer alsın. Mesela 00001 kayıt için 1 nolu makineye verdiğiniz ali01 id değeri başta şöyle yer alacaktır: ali0100001. Böylece kaydın mükerrer olması mümkün olmaz. Her kullanıcı kendi sıralamasını kullanacaktır böylece. Bu arada tüm kayıtların sırlanması konusunda otomatik sayı alanımutlaka olmalı. Sizin elle veya başka bir yolla verdiğiniz sayı değeri üzerinden sıralanmasın da, kayıtlarınız bu otomatik sayı değeri ile indexlensin.
Mehmet hocam önerileriniz için çok teşekkür ederim. Bunu hafta içinde deneyeceğim umarım sorun çözülür. Ama anlayamadığım bir şey var 2 nci önerinizde diyorsunuz ki her kullanıcı içi kullanıcı adı başa gelecek şekilde kayıt sayısı versin. O zamanda kullanıcı adı dikkate alınmadığında sayı olarak aynı sayıdan bir çok kayıt sayısı oluşacaktır. Kullanıcılar genelde alışkanlıklları nedeniyle sayıdan önceki karakter veya yılı dikkate almadan sadece sayıyı evrak üzerine yazıyorlar. Bu da birçok karışıklığa neden olur. Sayıları otomatik vermeye ayarlasam bu seferde yıl değiştiğinde sayılar 1 den başlamayacak. Halbuki kayıt sayısı yıl değiştiğinde 1 den başlaması gerekiyor. Kolay gelsin