PDA

View Full Version : كد id بصورت خودكار باشد



sabair
سه شنبه 30 مهر 1387, 01:30 صبح
چگونه مي توانم در sql بگويم كه بصورت خودكار هر فيلد كد خودكار بدهد
مثلا 1و2 و3
در ضمن اگر در برنامه فيلد 2 را حذف كردم كد 3 جايگزين كد 2 شود
بصورت خودكار3 بشود 2
آيا اين امكان وجود دارد

با تشكر از تمامي دوستان

__H2__
چهارشنبه 01 آبان 1387, 00:10 صبح
سلام
اولاً که بهتر بود سوالتان را در بخش sqlserver میپرسیدید...


چگونه مي توانم در sql بگويم كه بصورت خودكار هر فيلد كد خودكار بدهد
مثلا 1و2 و3
به صورت خاصی که به autonumber معروف است در sqlserver فقط میتوانید در هر جدول یک فیلد با همچین خاصیتی داشته باشید.
در زمان طراحی جدول، فیلد مورد نظر را انتخاب کنید و در پنجره کوچک خواص که در زیر فیلدها قرار دارد مقدار IdentitySpecification را yes کنید.
این فیلدها تکرار نخواهند شد.

اگر فیلدهای دیگری هم دارید که میخواهید چنین باشند، دیگر باید خودتان کد نویسی کنید...
یا در برنامه تان، در در sp که وظیفه INSERT را بر عهده دارد، یا در یک تریگر و...


در ضمن اگر در برنامه فيلد 2 را حذف كردم كد 3 جايگزين كد 2 شود
بصورت خودكار3 بشود 2

sqlserver اصلاً همچین امکانی ندارد و باز باید خودتان کدنویسی کنید ولی نباید هم کد نویسی کنید!!!

اولین دلیلش بازدهی پایین و فشار زیاد و بیمورد به دیتابیس است.

اگر میخواهید این کار را روی primarykey جدول تان انجام دهید، این مورد مغایر با اصول طراحی دیتابیس است و نباید انجامش دهید، اصلاً!!! این یک فاجعه در برنامه شبکه ای خواهد بود.

اگر هم میخواهید چیزی مشابه یک "شماره ردیف" در فاکتور بسازید که همیشه به ترتیب و پشت سر هم باشد، باز هم نیاز نیست، اصولاً چیزی که هموراه روند و قانون مشخصی دارد نیاز به ذخیره ندارد.
مثل این است که من فیلید در جدولم داشته باشم که همیشه و در هر شرایط مقدارش ثابت باشد!!! (پس چه نیازی به ذخیره است؟)
با یک دستور rownumber ساده در زمان SELECT میتوانید اعداد مذکور را تولید کنید.

eli_joon
چهارشنبه 01 آبان 1387, 12:37 عصر
سلام دوست من
کد زیر رو توی فرم لود بنویس



Me.txt1.Text = auto_number("select max(numkar) from tkar")


numkar فیلدی است که اعداد در آن درج میشوند و tkar هم نام جدول میباشد .


و این کد رو در ماژول



Function auto_number(ByVal sql_s As String) As Integer
On Error GoTo payan
cnn.ConnectionString = bankacs()
cnn.Open()
cmd.Connection = cnn
cmd.CommandType = CommandType.Text
cmd.CommandText = sql_s
rst = cmd.ExecuteReader
If rst.Read Then
If rst.Item(0) Is DBNull.Value Then
auto_number = 1
Else
auto_number = Val(rst.Item(0)) + 1
End If
Else
auto_number = 1
End If

cnn.Close()
payan:
If Err.Number > 0 Then
MsgBox(Err.Description)
auto_number = 0
cnn.Close()
End If
End Function