Merhabalar,
Ms-Sql server 2000 de veritabanimdaki tum tablolarda kayit no isimli alanim var bu kayit no alanimi surekli kendim kontrol ediyorum, bunun icin asagidaki fonksiyonu yazdim bu islemi Stored procedure ile yapabilimiyim, veya baska sekilde nasil yapabilirim, Ms-Sql server kendiside surekli olarak otomatik artirabiliyor istenilen alani ama ben bu alanin kendi kontrolumde artmasini istiyorum, yardimlarinizdan oturu tesekkur ederim,
function TFrm_Ana_form.Kayit_no_ataAdo(TableN: TAdoQuery; Tablo_adi, Alan, Alan_formati : String): String;
Begin
// Alan_formati parametresi ileriye yonelik olarak birakilmis bir parametredir
Tbl_KayitNoAdo.Connection := TableN.Connection;
Tbl_KayitNoAdo.SQL.Clear;
Tbl_KayitNoAdo.SQL.Add('Set DateFormat '+Frm_ana_form.Sql_Tarih_formati);
Tbl_KayitNoAdo.SQL.Add('Select Max('+Alan+') as '+Alan);
Tbl_KayitNoAdo.SQL.Add('From '+Tablo_adi);
Tbl_KayitNoAdo.ExecSql;
Tbl_KayitNoAdo.Open;
IF Tbl_KayitNoAdo.Fieldbyname(Alan).asinteger<>0 then Result:=floattostr(Tbl_KayitNoAdo.Fieldbyname(Alan).asInteger+1) else
Result:=floattostr(1);
Tbl_KayitNoAdo.Close;
end;
Son kayit numarasinin elde edilmesinin daha hizli yolu ?
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Sybase'de bir alana default deger olarak sabit bir deger verebileceginiz gibi, otomatik artan bir deger de verebilirsiniz. ki b zaten her yerde boyle. Fakat bir ilave olarak da su var. Default deger olarak hesaplanmıs bir deger verebiliyorsunuz. (Computed value diye geciyor...) Bu alana istediginiz bir hesabı yapabildiginiz gibi bir fonksiyonu da yani SP de cagirabiliyorsunuz. Yani primary key'inizi arttiran ve yeni bir deger donen bir fonksiyon yazip bunu da compujted vaule olarak default degere tanımlanamız isinizi gorur. Bu veritabanının kendisinin otomatik deger vermesi ile hemen hemen aynı hızda gerceklesecek bir yontem olur ki daha hızlısı da olmaz herhalde....
TAbi bu durum dedigim gibi Sybase icin boyle olmakla birlikte siz MSSQL de benzeri bir yontemi bulabilirsiniz sanıyorum.
TAbi bu durum dedigim gibi Sybase icin boyle olmakla birlikte siz MSSQL de benzeri bir yontemi bulabilirsiniz sanıyorum.
Selamlar,
Kodu incelediğimde şunu farkettim, (çok kullanıcılı işlemler sırasında Max numarada sorun çıkar.)
Zira son numarayı alırken aynı anlarda herhangi bir kullanıcı da tutup aynı işlemi yapar ise her iki kullanıcıya da aynı numara gelebilir.
Bu tarz olaylarda Fahrettin beyin söylediği gibi bir yöntem izlemek daha doğru olur. Yani Identity veya Autoincremental field kullanımı olması daha sağlıklı olur.
Kolay gelsin.
Kodu incelediğimde şunu farkettim, (çok kullanıcılı işlemler sırasında Max numarada sorun çıkar.)
Zira son numarayı alırken aynı anlarda herhangi bir kullanıcı da tutup aynı işlemi yapar ise her iki kullanıcıya da aynı numara gelebilir.
Bu tarz olaylarda Fahrettin beyin söylediği gibi bir yöntem izlemek daha doğru olur. Yani Identity veya Autoincremental field kullanımı olması daha sağlıklı olur.
Kolay gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Tsk,
Sonuc su,
Galiba kendinden artan sekilde kullanmam gerekecek ama 50000 kadar donen bir for ile 5 makinada bu kodu deneyecegim eger problem yasamaz isem o zaman benim kodu aksi taktirde otomatik artan kullanacagim,
Yorumlarinizdan dolayi tsk
Burhan Cakmak
Galiba kendinden artan sekilde kullanmam gerekecek ama 50000 kadar donen bir for ile 5 makinada bu kodu deneyecegim eger problem yasamaz isem o zaman benim kodu aksi taktirde otomatik artan kullanacagim,
Yorumlarinizdan dolayi tsk
Burhan Cakmak
Bir hatırlatma da benden
Eğer master/Detail yapı kullanmıyorsanız, yada kayit no ya kayıt girişi esnasında ihtiyaç yoksa, post etmeden önce son kayıt numarasını alıp bir artırıp kayıt numarası olarak atayın. Böylece birden fazla kullanıcı durumunda da çakışma olmaz. Bu arada kayıtın post işleminden sonra cache lerde veya transection da kalmaması lazım ki diğer bir kullanıcı aynı numarayı almasın!
