Sıra Numarası Verme İşlemi Nasıl Yapılmadı

1 2
24/04/2020, 00:25

SeferŞANLI

Çalışmamda yapılan çalışma ile ilgili olarak sistematik bir sıra numarası vermek istiyorum.

SELECT TOP 1 tbl_disiplinolayi.olay_no, Format(Mid([olay_no],7,11)+1,"00000") AS yeniolay, Left([olay_no],6) AS tarih
FROM tbl_disiplinolayi
WHERE (((Left([olay_no],6))=Format(Date(),"yymmdd")))
ORDER BY Format(Mid([olay_no],7,11)+1,"00000") DESC;

tabloya dayalı sorgu oluşturup,

Dim yil, ay, gn As Integer
Dim d1 As Variant

d1 = Nz(DLookup("yeniolay", "Srg_Olay_Sayisi"), 0)
If d1 = 0 Then

Me.txtolay_sıra_no = Format(Date, "yymmdd") & "00001"
Else
Me.txtolay_sıra_no = Format(Date, "yymmdd") & Dlookup ("yeniolay", "Srg_Olay_Sayisi")

koduyla da sayıyı oluşturuyorum. Lakin şöyle bir durum var, İlişkili olan kısımlar otomatik sayı türünden formlar açılıyor. Herhangi bir veri silinme işleminde sıra numarası arasında kopukluklar oluşuyor. Olay numarasında ise söyle bir hususla karşılaşıyorum. Diyelim olay numarası
200418001
200418002
200418003
bir numaradaki olaı silince yeni olaya tekrar 200418003 kaydını veriyor. Bu olayı nasıl çözebilirim.
24/04/2020, 01:22

berduş

Çalışmanız olmadığından söylemesi zor ama eger tablolar arsında ilişki kurmuşsanız üst kaydı silmeden önce -artık alt kayıtlara ihtiyaç duyulmayacaği icin- alt kayıtların silinmesi sağlanabilir.
24/04/2020, 04:45

accessman

Demekki.yeni olay otomatik sayı almıyor
200418003 sayısı yerine hangisi olması gerek sizce

201418003

200419003

200418004
Benzersiz sayı üretimini takip eden Otomatik sayı alanı değil mi
Alan veri türü o olmadığına göre siz takip edeceksiniz  sorular şunlar
*Yeni numara kaç olmalı ?
*Hali hazırda bu numara var mı ?
*Bu yok ama başka tablolarda bunun ile ilişkili kayıt var mı

Bu üç sorudan hangisine cevap buladıysanız onun üzerine odaklanmak lazım
Kod:
Me.txtolay_sıra_no = Format(Date, "yymmdd") & DLookup("yeniolay", "Srg_Olay_Sayisi")
bu kod satırı ile Access yeni numaranın 
200418004
Olması gerektiğini nasıl anlayabilir

Siz ona 
tablodaki kaydı tarihin sonuna ekle
Gibi birşeyler diyorsunuz (+1) bile demezseniz o ne yapsın
Kod:
Msgbox DLookup("yeniolay", "Srg_Olay_Sayisi")
bu satır ile 004 sayısını alabiliyor musunuz
Kod:
Mid([olay_no],7,11)
ile 7 rakamdan itibaren 11 hane al demek
Eğer 00000 böyle olacak ise
Kod:
Mid([olay_no],7, 5)
olmalı değil mi
Kod:
Format(Mid([olay_no],7,11)+1,"00000")
satırını kullanarak
Kod:
004
Elde edeceksiniz. 
Kod:
Format(Mid([olay_no],7,3)+1,"000")
olması gerekmiyor mu

Kod:
Mid([olay_no],7,3)
bunun sayı olduğu kesin mi
Kod:
İf(isNumeric(Mid([olay_no],7,3))) Then

Kod:
Dim arti_bir as Integer
arti_bir = Cint(Mid([olay_no],7,3))+1

Falan filan gibi şeyler ile 
Kod:
004
Elde edebiliyorsanız tarih ile birleştirebilirsiniz
Kod:
SELECT TOP 1 tbl_disiplinolayi.olay_no, Format(Mid([olay_no],7,11)+1,"00000") AS yeniolay, Left([olay_no],6) AS tarih
FROM tbl_disiplinolayi
WHERE (((Left([olay_no],6))=Format(Date(),"yymmdd")))
ORDER BY Format(Mid([olay_no],7,11)+1,"00000") DESC;
bu kod bloğu ile 003 sayısını bulup bir ekleyip 004 elde edip tarihin sonuna ekleyeceksiniz kriteriniz 
Kod:
(((Left([olay_no],6))=Format(Date(),"yymmdd")))
değil mi Bunu Dmax ile kullansanız
Kod:
DMax("UnitPrice", "Order Details", "OrderID = 10248")
o zaman
Kod:
DLookup("yeniolay", "Srg_Olay_Sayisi")
bunu kullanmanızada gerek kalmaz

Kod:
dim eski_sayi,yeni_sayi
eski_sayi = iff(isnumeric(dmax(......)),  .....  ,  .....
yeni_sayi = eski_sayi + 1
Me.txtolay_sıra_no = Format(Date, "yymmdd") & yeni_sayi
gibi bir şeyler yazsanız daha kolay olabiilir
ama bana soracak olursanız sen nasıl yapardın diye eğer
200418001
değerini bir yerlerde kanunen zoraki kullanmam gerekmiyorsa
tarihi zaman ile birlikte kullanırdım sadece


Kod:
Me.txtolay_sıra_no = Now

yazardım kafamda rahat olurdu
24/04/2020, 10:30

alicimri

Tablonuzda Veri Türü Otomatik Sayı olan "Kimlik" alanı ve Veri türü Metin Olan olay_no alanı bulunsun.
İlk önce olay sıra_no alanını içermeyen bir kayıt ekleyin. 
Bu ekleme olayından hemen sonra çalışan aşağıdaki güncelleme kodlarını çalıştırın
Kod:
UPDATE Tablo1 SET Tablo1.sıra_no = Format(Date(),"yymmdd") & Format([Kimlik],"000")
WHERE (((Tablo1.Kimlik)=(SELECT Max(Tablo1.[Kimlik]) AS EnÇokKimlik FROM Tablo1)));

örnek dosya ekte
24/04/2020, 12:03

alicimri

Onaylama sorusu sormasını istemiyorsanız aşağıdaki kodu kullanın
Kod:
CurrentDb.Execute "UPDATE Tablo1 SET Tablo1.sırano = Format(Date(),'yymmdd') & Format([Kimlik],'000') WHERE (((Tablo1.Kimlik)=(SELECT Max(Tablo1.[Kimlik]) AS EnçokKimlik FROM Tablo1)));"
24/04/2020, 12:19

accessman

(24/04/2020, 12:03)alicimri yazdı: Onaylama sorusu sormasını istemiyorsanız aşağıdaki kodu kullanın
Kod:
CurrentDb.Execute "UPDATE Tablo1 SET Tablo1.s?rano = Format(Date(),'yymmdd') & Format([Kimlik],'000') WHERE (((Tablo1.Kimlik)=(SELECT Max(Tablo1.[Kimlik]) AS En?okKimlik FROM Tablo1)));"
"?" işaretleri hata veriyor
1 2