Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

kurallı kayıt no oluşturma

Konu, 'Visual Basic' kısmında unixcem tarafından paylaşıldı.

  1. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    arkadaşlar şuan 500 kişi kayıtlı bir tablom var bu kayıtlara hergün yenisi ekleniyor. tablomda birde kayıt oldukları tarih var. benim yapmak istediğim bu kayıtlarına hepsine 11 haneli bir numara vermek istiyorum.
    bu numarada kayıt tarihi (YYYYMM)+000001 şeklinde artacak fakat MM değiştiğinde son 6 sayı tekrardan 1 'den başlayacak yani
    20150800001
    20150800002
    20150800003
    .
    .
    .
    .
    20150900001
    şeklinde
    nasıl yapabilirim bir fikri olan varmı
     
    Son düzenleme: 10 Şubat 2017
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Alan alfanumeric olacak herhalde 11 hane dediğine göre.?
    normalde tablonun key alanları nedir.?

    tablonun yeni halinde key bumu olacak.? tek başına.?

    gereksiz gibi bile görünse detay verirsen, doğru cevap alman daha kadar kolay olur.
     
  3. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    hayır tabloda key alanı otomatik sayı ama key alanı olarak kullanılmayacak olmayacak çok uzun vade barkode için kullanılması planlanıyor arşiv için
     
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    tek sql komut ile Yapılabilir bir uğraşayım. alfanumeric olunca 1 artırmak biraz dolambaçlı ve okunaksız olacak. Numeric olsaydı daha kolay çalışması hıslı ve okunaklı olurdu. 5 yıl sonra programcı kodu görünce bu ne ya demezdi.?

    hoş durmadan yeni özellikler ilave ediyorlar sql komutlara basit yoluda vardır.
    ben uzun yolu yazacağım, kısası varsa ortaya çıkar.
     
    Son düzenleme: 10 Şubat 2017
  5. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    tamamen numerik olacak sadece buda
    kayıt tarihi 2015-08- 01 ise 20150800001
    kayıt tarihi 2015-08- 01 ise 20150800002
    kayıt tarihi 2015-08- 02 ise 20150800003
    kayıt tarihi 2015-08- 05 ise 20150800004
    kayıt tarihi 2015-08- 06 ise 20150800005
    kayıt tarihi 2015-09- 01 ise 20150900001
    kayıt tarihi 2015-09- 01 ise 20150900002
    kayıt tarihi 2015-09- 01 ise 20150900003
     
  6. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Anlaşılır olsun diye sıra ile gideyim.
    Bu sorgu, bu aya ait 201702 formatında kayıt varmı onu buluyor.
    Tablo adın myTest1, tarih formatlı tutacağın yeni alan adın alan2 olsun.
    Komut mssql de hazırlandı.

    PHP:
    IF EXISTS (SELECT 1 FROM myTest1
                WHERE LEFT
    (CONVERT(varcharGetDate(),112),6) = (SELECT (SUBSTRING(CONVERT(VARCHARMAX(alan2)), 16)) FROM myTest1))
    BEGIN
        insert 1 artır
    END
    ELSE
    BEGIN
        insert 1 den başlat
    .
    END
     
  7. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    işlemi vb6 içinde nasıl yapılacağını sormuştum :( günlük kayıtlarda yapabiliyorum ben geriye dönük kayıtları yapmaya çalışıyoruum .
     
  8. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Buda komutun tamamı. Komut VB syntaxı değil sql syntaxı.
    VB içine sql komut nasıl kullanıyorsan oraya koyacaksın.
    Tabi yeni kayıtlar için. Eski kayıtları conversion işlemi yapacaksanda bu komutlardan yardım almalısın.

    PHP:
    IF EXISTS (SELECT 1 FROM myTest1
                WHERE LEFT
    (CONVERT(varcharGetDate(),112),6) = (SELECT (SUBSTRING(CONVERT(VARCHARMAX(alan2)), 16)) FROM myTest1))
    BEGIN
        INSERT INTO myTest1 
    (alan1alan2)
            
    VALUES ('vardı', (SELECT MAX(alan2)+1 FROM myTest1 WHERE (SUBSTRING(CONVERT(VARCHARalan2), 16)) = LEFT(CONVERT(varcharGetDate(),112),6)))
    END
    ELSE
    BEGIN
        INSERT INTO myTest1 
    (alan1alan2)
            
    VALUES ('yoktu'LEFT(CONVERT(varcharGetDate(),112),6) + '00001')
    END
     
  9. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    çok vakit harcadım, başkasıda conversion konusunda yardımcı olabilir belki.

    Bu arada bu yapı yüksek veride, veri tabanını yorar. alan2 ye göre indeks de gerekli.
    belki bilgileri taze olanlar, sql komutunun hızlısını bulur.?
     
  10. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    benim için önemli olan eski kayıtlar ama teşekkürler
     
  11. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    eski kayıt dönüşümü için tablonun tamamının yapısını koymalısın.
    tablo yapısını bilmeyen kişi hangi veriye ne koyacağını bilemez.
    hem yapıyı hem verilerdeki farklılığı görmeli.

    aslında sırf tarihe göre ise kolay olabilir. o zaman key alanları ve örnek veri koymalısın.?

    yahu tablo yapısını ve mevcut veri örneğini baştan koysan, bu kadar vakit harcamazdım.
    conversion işlemi yukarda yaptığımdan çok daha kısa zaman alırdı.???

    bak kızdım şimdi...
     
    Son düzenleme: 10 Şubat 2017
  12. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    tablo1'den sadece kayıt id'si(otomatik sayı) ve kayıt tarihini alacak ikinci bir tabloya (tablo2) ye sacede kayıtid ve yapmaya çalıştığım numarayı ekliyecem
     
  13. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Soruyu öne alayım, sql değil VB.NET işi.
    Başta soru açık net ve basit olmadığı için ben yanlış yoldan gittim. Çünki benim kafa dağınık, soruda net olmayınca.!

    VB.NET lede kolay iş. mevcut kaydı tarihe göre sıralanmış okuyup Data readere koy

    Sonra tek tek okuyup. Yıl ay değişmişmi diye bak. Değişmişse ekleyeceğin rakamı birden başlat. YYYYMM + String "00001" ekleyip, numerice dönüştürülebilir.
    VB nete hakim olmadığımdan benim için çok vakit kaybı olur. Hakim biri kolayca yazabilir.

    bol şans. :)

    foruma soru nasıl sorulur şablonu konsa iyi olurdu. Çünki cevaplayacak insanların kendi uğraştıkları ağır konular var, ve foruma girdiklerinde kafa %90 dumanlı oluyor.
    Soru açık net basit kısa ve hedefe yönelik değilse, cevaplayabileceği konuları bile pas geçiyoruz veya benim durumumda yanlış yönde cevap vermek için saatler harcayabiliyoruz.
     
    ali guner ve AspDev bunu beğendi.
  14. ali guner

    ali guner Üye

    Kayıt:
    1 Şubat 2017
    Mesajlar:
    189
    Beğenilen Mesajlar:
    31
    Şehir:
    istanbul
    sonuna kadar katılıyorum.
     
    sedirAğacı bunu beğendi.
  15. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    daha ne kadar açık olabilir bilmiyorum vb.net bilmiyorum benim için vb6 yeterli ve biliyorumki olayın mantığı çok basit aynen sizin gibi benimde kendi işlerim var ve benimde kafam dumanlı basmadı sizden rica ettiğim şey bunun döngü mantığını çözemedim bu konuda yardım vaktinizi çaldığıma üzüldüm.
     
  16. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Sorun sana özel değil. @unixcem
    Biri soru sorduğunda her kes kendi tecrübelerine göre algılıyor.
    Soru soran ise o an elindeki işe konsantre, sanki dünyadaki herkes o işe konsantreymiş, kendi kullandığı herşeyi biliyormuş gibi algılıyor.

    Misal, biri "battım" dese. Bunu duyan 3 kişi olsa.
    1. kişi o esnada bataklıktan yeni çıkmış olsa, bataklıktan nasıl kurtulacağını anlatır.
    2.kişi 90 yaşında altını tutamayan biri olsa, ilk aklına gelen tuvalete yetişemeden nasıl ortalığı batırdığı olur.
    3. kişi deniz yolculuğundan yeni geldi ise denizde batarken ne yapmalı onu anlatır.
    halbuki soran sınıfta tüm derslerden kalmıştır, evde vereceği hesabı düşünüyordur, battım demiştir, o konuda yardım istiyordur.

    anlatabiliyormuyum.

    Geçende biri js ile ajax sordu .net forum bölümünde, ama ajax demedi ben 2 saat update panel anlattım ama update panel kelimeleri kullanmadan. Çünki o hafta tüm gün update panellerle uğraşmıştım.

    Senin yaptığın işe conversion deniyor.

    2 büyük banka ve ülke çapına yayılmış bir devlet kuruluşunun 2,5 yıl süren conversion'unu yapan ekiplerde çalıştım. farklı diller ve farklı sistemlerde, farklı ekipler ve farklı dillerde.

    Biri hergün kullandığı bir kelimeyi burda söylese, benim aklıma bin tane şey geliyor. Söyleyen kişi ise, her gün o kelimeyi kullandığı için, onun anladığı şekilde nasıl anlamamışım hayret ediyor.

    Bu kadar laftan sonrada hala bu kadar açık anlattım nasıl anlamadın diyorsan pes diyorum.!!!
     
  17. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    @unixcem özür dilerim. gençsin herhalde, sana kızmadım.

    yaşlılık işte, dilimin ayarı kaçıyor bazen.
    Ben daha konsantre okumalıydım, anlamayınca hiç cevap vermemeliydim.

    Hem sana cevap araken getDate() fonksiyonunu öğrenmiş oldum. :) işime yarayacaktır.
     
  18. unixcem

    unixcem Yeni Üye

    Kayıt:
    8 Temmuz 2004
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    sorumun cevabını yine kendim yazdım. muhtemelen çok uzun oldu gereksiz. kod parçaları vardır. belki ihtiyacı olan çıkar diye koyuyorum
    ------------------------------------------------------------------------
    Private Sub Command_Click()
    Set CON = New ADODB.Connection
    CON.Open "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & _
    "\data\ESWL.mdb"
    Dim takipno As String
    Dim i As Long, j As Long, k As Integer, L As Long, m As Long
    For m = 2015 To Year(Date)
    For j = 1 To 12

    If (j = 1 Or j = 3 Or j = 5 Or j = 7 Or j = 8 Or j = 10 Or j = 12) Then
    L = 31
    lo = 1
    ElseIf (j = 4 Or j = 6 Or j = 9 Or j = 11) Then
    L = 30
    lo = 1
    ElseIf (j = 2 And m Mod 4 = 0) Then
    L = 29
    lo = 1
    Else
    L = 28
    lo = 1
    End If

    tarih0 = j & "/" & lo & "/" & m
    tarih1 = j & "/" & L & "/" & m


    RS.Open "SELECT takip.* From takip WHERE kayit_tarihi >= #" & tarih0 & " # And kayit_tarihi <=#" & tarih1 & " #", CON, _
    adOpenKeyset, adLockOptimistic

    tarih = Format(m & "." & j, "yyyymm")
    If RS.RecordCount > 0 Then
    For k = 1 To RS.RecordCount
    If k >= 1 And k <= 9 Then
    takipno = tarih & "0000" & k
    ElseIf k >= 10 And k <= 99 Then
    takipno = tarih & "000" & k
    ElseIf k >= 100 And k <= 999 Then
    takipno = tarih & "00" & k
    ElseIf k >= 1000 And k <= 9999 Then
    takipno = tarih & "0" & k
    ElseIf k >= 10000 Then
    takipno = tarih & k
    End If

    List1.AddItem takipno
    RS.MoveNext
    Next k
    RS.Close
    Else
    RS.Close
    End If

    Next j
    Next m

    End Sub