Stok kodunu otomatik verme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Stok kodunu otomatik verme

Mesaj gönderen ertline »

S.A. arkadaşlar
Stok kodunu otomatik vermek istiyorum
Şöyleki
Stok Kodu:ST00001
burda ST kullanıcı tarafından belirlenen bir belirteç,00001 ise artan sayı şeklinde gitmesi gerekiyor.
Stok Tablosunda STOK_KODU alanım var(Varchar(10)) burada nasıl otomatik artış yaptırabilirim ve 00001 şeklinde bir formatlamayı nasıl yapacağım varchar old. için display format özelliğide yok.
Bu konuda yardımcı olursanız sevinirim.

Yardımlarınız için çok Teşekkürler...
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

tablonda bir tane otomatik atran bir alan oluştur..

örnek alan otomatik olsun ;

varsayılan karakter genişliğinde 8 olsun gibi..

daha sonra kayıt sırasında;


Kod: Tümünü seç


stokodu := stringofchar('0',8-length(inttostr(otomatik)))+inttostr(otomatik);

şeklinde yapabilirsin..
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

birde oromatik artması şu şekilde olacak eğer stok koduna kullanıcı bir kod girmezse otomatik gelecek, yani kullanıcı kendiside Stok kodu girebilmeli.

Selim bey Stok_kodu alanı Varchar buraya nasıl otomatik artan numara koyabiliriz.Stok tablosunda KNO diye bir artan numara var(generator).İkincisini nasıl açıp ta dephide yapacağım ve varckart alanda bu işlem olur mu?
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
skyking
Üye
Mesajlar: 136
Kayıt: 09 Kas 2005 12:52
Konum: Antalya

Mesaj gönderen skyking »

ben size bu kodu gonderiyorum

burda son iki haneye gore atış yapıyorum;

sifirver mantıgı gelen bilginin uzunlugu ölçüm basına 0 ekliyor..!

Kod: Tümünü seç

dm.genelsql.close;
dm.genelsql.sql.text:='select (max(substr(STK_KOD,3,5))+1) as kd from dbkart';
dm.genelsql.open;

stkkod.text:='ST'+sifirver(dm.genelsql.FieldByName('kd').asstring,6);

bu işini görür sanırım kolay gelsin..!
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

stok kodu girebileceği bir alan örnek editstk diye bir alanın var,..


bunu bir if veya benzeri bir olayla kontrol edebilirsin;
kaydet dediğinde eğer bu alan boş ise yukardaki işlemi yapar
doluysa verdiği stok kodunu kullanabilir..
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam kardeş sana basit bir yol olarak şunu söyliyim.
Sen tablonda Id diye bir Generators alan oluştur.Sonra.
Bu Id diye oluşturduğun alanın display formatına
S0000 yaz . Generatorsu 1 den başlattığınız varsaydım.
Siz eğer müdahe etmezseniz S0001,S0002.. şeklinde artıcaktır.Sonra
dedinizki ben bu stok kodu üzerinde gerekirse kendimde girebilmeliyim dediniz.Bu seferede kendiniz Arttırırsınız.
Nasılmı sana örnek bir kod

Kod: Tümünü seç


var
deger : integer ;
 begin
datamodule3.skart.last;
Deger := datamodule3.skart.Fieldbyname('Skod').Asinteger ;
datamodule3.skart.insert ;
datamodule3.skart.Fieldbyname('Skod').Asinteger := Deger + 1;
datamodule3.skart.Post;
tabiiki bu Skod alanınızın display formatını S000 yapmayı unutmayın
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
benzer bir yapı bende kullanıyorum.
Tnext bir autoincrement alanların tutulduğu dosya. bu dosyadan en son verilen değeriokuyorum sonra bir arttırıp afterpostta next tablosuna yeni değeri kaydediyorum.
dikkat edilmesi gerekn nokta bu tek kullanıcılı bir sisteme göre tasarlanmıştır. çok kullanıcı için biraz değişiklik yapmanız gerekecek ama kod işi yapan kodda var aradan çıkartırsın...

değişkenleride ayarlarsın.. :wink:

Kod: Tümünü seç

 
    TNext.Open;
    st := TNextNewKey.AsString;
    TNext.Close;
    if st = '' then st := 'C00000';
   ///arttırmak için burdan
    for a := length(st) downto 1 do
      if not (st[a] in ['0'..'9']) then
        begin
          b := a;
          break;
        end;
    s1 := copy(st, 1, b);
    delete(st, 1, b); b := length(st);
    val(st, l, i1); inc(l); str(l, st);
    while b > length(st) do st := '0' + st;
    st := s1 + st;
   //buraya st değişkeninde artık bir sonraki değer var....
    TCariCariNo.Value := st;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

Peki bi tabloda 2 tane artan numara tanımlayabiliyormuyuz?
Generator oluşturduk diyelim, delphide bunu datasetten nasıl yapacağım ben de bir tane KNO diye (Primary Key) bir generator var, ve datasette bu tanımlı, 2. generatörü aynı tabloda oluşturup nasıl datasette tanımlayacağım...
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

birkaç kez okumama rağmen birşey anlayamadım :roll:
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

siz firebird Veritabanımı kullanıyorsunuz.

Eğer Firebird veritabanı ise bir tabloda ancak bir tane generators tanımı yapabilirsiniz.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

selman yazdı:siz firebird Veritabanımı kullanıyorsunuz.

Eğer Firebird veritabanı ise bir tabloda ancak bir tane generators tanımı yapabilirsiniz.
Bu pek doğru olmamış. VT'de istediğiniz sayıda generator tanımlayıp kullanabilirsiniz.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Yıllar önce yazdığım bir fonksiyonu kullanabilirsin...
viewtopic.php?t=2060&highlight=fatura

Vt ede yapacağın gruplamaya göre max ını alıp arttırabilirsin.

mesala
select max(stok_kod) from stok where kategori = ST vb...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

coderlord demiş:
Bu pek doğru olmamış. VT'de istediğiniz sayıda generator tanımlayıp kullanabilirsiniz.
hocam elbetteki bir Vt de birden fazla generators tanımı yapılabilir.Ben bir tablodan bahsetmiştim.Yani mesela carikart diye bir tablo oluşturduk
ID
DID
kod
Adsoyad
şeklinde alanlarımız var
ID------------->generators autoincrement
DID------------>generators autoincrement
bu şekilde oluyor mu?..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

selman yazdı: hocam elbetteki bir Vt de birden fazla generators tanımı yapılabilir.Ben bir tablodan bahsetmiştim.Yani mesela carikart diye bir tablo oluşturduk
ID
DID
kod
Adsoyad
şeklinde alanlarımız var
ID------------->generators autoincrement
DID------------>generators autoincrement
bu şekilde oluyor mu?..
Evet oluyor. :) Hatta isterseniz bütün kolonlar'ı autoincrement yapın. :)
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

Ama ben 2.bir kez genarators tanımladığımda Roolback oluyo Commit olmuyor peki bu neden acaba hocam.
Cevapla