Skip to main content

AccessTr.neT


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

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

Çözüldü #1
Çalışmamda yapılan çalışma ile ilgili olarak sistematik bir sıra numarası vermek istiyorum.

SQL Code
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,

Visual Basic Code
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.

Cevapla
#2
Ç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.
Cevapla
#3
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

@benbendedeilem
Cevapla
#4
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
.zip deneme.zip (Dosya Boyutu: 33,58 KB | İndirme Sayısı: 2)
Cevapla
#5
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)));"

Son Düzenleme: 24/04/2020, 12:23, Düzenleyen: alicimri.
Cevapla
#6
(24/04/2020 12:03)alicimri Adlı Kullanıcıdan Alıntı: 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
@benbendedeilem
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da