Öneri bekliyorum.. En büyük kayıt numarası verdirme...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Öneri bekliyorum.. En büyük kayıt numarası verdirme...

Mesaj gönderen ikut »

Şimdi sorun şöyle başladı.

7 haneli bir no var. önce dedilerki 3. hanedeki harfe göre sondaki üç rakam kaldığı yerden yeni no verecek. bende basit kaçtım bir tabloda verdim.. o harfe göre bir üstünü verdirdim oldu bitti. 3 gün geçti dedilerki. 2. hanede ayraç. oda 6 değer alabilir. dolayısı ile 6*8 =40 tane değişik umara grubunu takip etmem gerekti. oda tamam dedik ve tabloya field açtım oldu. şimdi son gol geldi. 1. hanede ayraçtır dediler. oda 8 ayrı değer alabildiğine göre takip edilecek numara türünü tutmak için yaklaşık (8*8)*6 fielde ihtiyacım var.

Şimdi dödün olması gereken çözüme. Bunu select MAX ile yapabilmek istiyorum. Aklıma gelen şu. ilk üç haneyi ayrı tutsam sonraki üç haneyi ise integer yapsam.

İlk üç hane "ABC" field ayrac olsun... Select MAX from tabloadi where ayrac='ABC' diye versem olurmu.

Siz olsanız ne yapardınız. Alternatif önerileriniz nelerdir.

Bu aslında basit gibi görünen ama önemli bir konu bence.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Forum kuralları pek okunmamış anladığım kadarıyla, okunduysa çok da dikkate alınmamış bir havası var yazdıklarınızın.

Lütfen sorunuzu sorarken, herkesin sizin bildiklerinizi bilmediğini düşünün ve örneklerle tek tek açıklayarak sorun. Bu şekilde sorarsanız, insanlar girer sorunuzu okur ve çıkarlar (yanıt vermezler).

Yanıt almak için lütfen önce soru sormasını bilelim. Aksi halde yanıtsız kalacaktır.

Bence sorunuzu bir daha düşünün, örnekler oluşturun ve öyle adım adım sorun.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
ikut

forum Kuralları

Mesaj gönderen ikut »

Kuri_YJ yazdı:Selamlar,

Forum kuralları pek okunmamış anladığım kadarıyla, okunduysa çok da dikkate alınmamış bir havası var yazdıklarınızın.

Lütfen sorunuzu sorarken, herkesin sizin bildiklerinizi bilmediğini düşünün ve örneklerle tek tek açıklayarak sorun. Bu şekilde sorarsanız, insanlar girer sorunuzu okur ve çıkarlar (yanıt vermezler).

Yanıt almak için lütfen önce soru sormasını bilelim. Aksi halde yanıtsız kalacaktır.

Bence sorunuzu bir daha düşünün, örnekler oluşturun ve öyle adım adım sorun.

Kolay Gelsin
Selamlar...

1. Mesajım da warez paylaşım var mı ?
2. Mesajım yanlış grubamı sorulmuş ?
3. Büyük harflemi yazılmış ?
4. Birden fazla grubamı sorulmuş ?
5. Soru yeterince açıkmı değil.

Şahsi fikrim ;

Sorum yeterince açık hangi aşamalardan geçtikten sonra bu noktaya geldiğimi yazmışım. Düşündüğüm örnek koda threadda var. Ve bu konuda daha önce kod yazmış kişilerin fikrini merak ediyorum.

Tekrar cevabınıza dönecek olursam size göre hangi sebep yada sebeplerden kuraldışılık sezdiniz beni aydınlatırsanız sevinirim...
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Tekrar selamlar,
* Soru sorarken konuyu mümkün olduğu kadar açık anlatın. Kullandığınız veritabanını, kullandığınız componentleri, hata alıyorsanız hata mesajını ve numarasını, delphi sürümünü yazmak iyi olacaktır. Bu bilgiler sorunu ve de çözümünü bulmakta son derece faydalı olmaktadır.
Ukalalık olarak algılamayın sadece bir Moderatör olarak uyarıda bulundum. İşte yukarıda yazılı olana uyum göstermemişsiniz.

Genel olarak bir yere girerken veya bir markete bile girdiğinizde kibarca bir Selamlama yaparsınız, öyle değil mi?

Çıkarken de yardımları veya yapılabilecekler hususunda Teşekkür edersiniz değil mi? Genel adab kurallarını da Forum kurallarına eklememizi isterseniz onu da ekleriz ancak sanırım herkesin ve sizin de (en azından buraya soru sormayı başarabilecek kadar) eğitim almış olması, bu tür hususları da bildiğine delalet eder.

Neyse kişiselleştirmeden olayı özetleyelim, sorunuzu baştan özetleyerek örnekleyerek sorarsanız, yanıtlayacağız. Konu kaymasın lütfen.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Böyle şahsi şeyleri özel mesajdan atılsa kanımca iyi olacaktır. Yani arkadaşa söylemek istediğiniz sorduğu soruda yapılması gereken değişikliği ö.m. ile gönderseniz daha iyi olacağına inanıyorum.

Yani sorunuzu 1-2 saat içinde değiştirmezsniz simek zorundayız gibilerinden bir ö.m. atabilirdiniz. Çokta ifşa etmenin doğru olduğunu düşünmüyorum. şimşekleri üzerinize çeker antipati doğurur.

Maksat kalpler kırılmasın.

Saygılar...
ikut

Ben sorumu yanlış anlattım galiba

Mesaj gönderen ikut »

Kuri_YJ yazdı:Tekrar selamlar,
* Soru sorarken konuyu mümkün olduğu kadar açık anlatın. Kullandığınız veritabanını, kullandığınız componentleri, hata alıyorsanız hata mesajını ve numarasını, delphi sürümünü yazmak iyi olacaktır. Bu bilgiler sorunu ve de çözümünü bulmakta son derece faydalı olmaktadır.
Ukalalık olarak algılamayın sadece bir Moderatör olarak uyarıda bulundum. İşte yukarıda yazılı olana uyum göstermemişsiniz.

Genel olarak bir yere girerken veya bir markete bile girdiğinizde kibarca bir Selamlama yaparsınız, öyle değil mi?

Çıkarken de yardımları veya yapılabilecekler hususunda Teşekkür edersiniz değil mi? Genel adab kurallarını da Forum kurallarına eklememizi isterseniz onu da ekleriz ancak sanırım herkesin ve sizin de (en azından buraya soru sormayı başarabilecek kadar) eğitim almış olması, bu tür hususları da bildiğine delalet eder.

Neyse kişiselleştirmeden olayı özetleyelim, sorunuzu baştan özetleyerek örnekleyerek sorarsanız, yanıtlayacağız. Konu kaymasın lütfen.

Kolay Gelsin
Üstadım ;

Selamlama konusu vs ise sadece ona eyvallah ederiz; çünkü insan beşerdir şaşar... Ama Musonya üstadımızın dediği gibi bunun PM ile yapılması daha uygun olurdu diğer konuya gelince.

Bakınız;

Ben bir hata mesajından bahsetmiyorum. "undeclared identifier mesajı alıyorum ne yapmalıyım"... yada jvcl 3.20 kuruyordum insatller şu haa ile yarıda kesildi ne yapmam gibi bir şey değil konu.

Konu şu...

7 haneli bir no alanı var. Bunun ilk üç alanı ayraç, son 4 hanesi ise bu ayraçtaki bilgilere göre verilen otomatik artışlı numaralar... tek hane olsa table yapmak kolay ki yapmıştım. ama üç hane olunca varyasyon nerdeyse 400 adet field gerektiriyor.

O yüzden hiç ayrı bir tabloda son kalınan numaraları tutmadan select MAX ile bunu yapmak daha mantıklı demiş ve düşündüğümüzü yazmışız.

Soru ise basit O kodla olurmu. Yada siz olsanız ne yaparsınız.

Kişiselleştirmiyorum ama tekrarlıyorum soru gayet açık bence. Çünkü ortada bir bug yokki istediğiniz detayları vermek gereksin.

Saygılar
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Özel mesaj atmamaktaki maksadım, (takdir ederseniz ki, binlerce insanı Ö.M. ile uyarmak bizler için baya bir zaman alır) Örnek teşkil etmesi içindi, yoksa kişisel bir şey yok, arkadaşı tanımıyorum ve tanımadığım bir kişi hakkında kişisel bir yargıya da varamam.

Yanıta gelince,

Siz Yatay Düşünmüşsünüz, peki dikey düşünmeye ne dersiniz?

Yani bir başka tablo oluşturun,

Parametre, KalinanSayi alanları olan bir tablo.

Bu tabloya son no'yu işlersiniz.

Kaç kırlımlı kod lazım ise o kadar field açarsınız,

Örnek ;

2 Kırılım olsun

Yani XXX-YY-NNNN

XXX kodlar sinsilesi
YY'ler, XXX'lere bağlı kodlar sinsilesi,
NNNN ise XXX-YY'ye bağlı Kalınan numara.

Kod: Tümünü seç

  PRM1 Char(3)
  PRM2 Char(2)
  SAYAC INTEGER 

  Tablodaki değerler

  PRM1  PRM2  SAYAC
  ----  ----  -----
  ABC   A1  00201
  ABC   A2  00045
  ABC   B1  00120
  ABF   A1  02002
  ABF   B2  00175
  ABF   D4  02568
  BGD   B2  00124
  BGD   B3  00087
  BGD   C4  00006
  .     .   .
  .     .   .
  .     .   .


Yani, Sayaçlarınızı kolonlara yıkmadan, tersine satırlara aktarırsanız ve numara alcağınız zaman oradan alırsanız işinizi rahatlıkla görebilirsiniz.

Bunların dışında MAX() fonksiyonu da kullanılabilir, WHERE Koşulunda LIKE aramalar yapmanız ve kurgulamanız gerekir, ama her seferinde MAX almaktansa (ve bu da bir problem daha çıkarırı) aşağı yukarı aynı anda MAX() çeken kullanıcılara aynı numarayı verme durumunuz olur. Ama bu Sayaç tablosunda (Kaydı LOCK edip Arttırıp, rakamı okursanız) böyle bir çakışma ihtimali de olmaz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

LIKE komutu ile yapabilirsin..

(ezbere yazıyorum hata olabilir. maksat fikir verebilmek)
select * from tablo where "ABC*' LIKE field order by field

diyerek ABC ayracı ile başlayan kayıtları listeler ve son gelen kayıt nosundan bir arttıraraka yeni bir no verebilirisiniz. Yani burda verdiğim select sadece fikir olsun diyeydi. Her ayrac için ayrı bir tablo falan yapmaya gerek olduğunu sanmıyorum..

Saygılar...
ikut

Öneri güzelden öte.

Mesaj gönderen ikut »

Evet olay budur.

Ama program tek kullanıcılı olduğundan şu an için lck vs bir dert yok. Bunu ipucu köşesine alayım ama ; şu an için iki fielde bölüm MAX ile yapmak daha uygun... hem ilave tablodanda kurtuluruz.

Ama dikey çözüm baya iyi fikir. Bunu notlara alalım :)
Cevapla