PDA

View Full Version : مشکل در پیدا کردن آخرین شماره دانشجویی ذخیره شده در بانک



sorena2000
سه شنبه 30 آذر 1389, 16:04 عصر
سلام به دوستان و مهندسان عزیز .
من در حال نوشتن یه برنامه بانک اطلاعاتی (ثبت دانشجو ) هستم که برای ثبت دانشجوا نیاز به شماره منحصر هست . که دو رقم اول مربوط به سال ورود و دو رقم بعد مربوط می شه به ماه بقیه هم که یکی یکی جمع می شه .
تاریخ و روز رو بدست میارم بعد یکی یکی برنامه در وقت ذخیره اطلاعات به sql شمارنده یه عدد به اون اضاف می کنه اما اگر برنامه بسته بشه و باز اجرا کنیم از اول شروع به کار می کنه و اعداد تکراری می ده که برای ذخیره اطلاعات دچار مشکل می شم کسی می دونه چطور می شه کاری کرد که بعد از ورود به برنامه آخرین شماره رو از بانک پیدا کنه .
ممنون می شم از دوستان .

Rezahak
سه شنبه 30 آذر 1389, 16:26 عصر
بهترین راه اینه که شما آخرین شماره را در یک جایی نگهداری کنید!!!!
حالا کجا؟؟؟!!!
آهان.....
چون ما با یک عدد طرف هستیم دو نوع استراتژی برای برنامه تک کاربره و دو استراتژی برای برنامه چند کاربره داریم :
1- اگر برنامه شما تک کاربره و بر روی یک دستگاه اجرا می شود بهترین جا برای نگهداری عدد داخل Registery است . اما این نوع ذخیره سازی در نوع خود اشکالاتی دارد مثلا اگر ما ویندوز دستگاه را عوض کنیم بالتبع محتویات Registery هم پاک می شود!!!
2- بهترین راه برای نگهداری عدد در حالت تک کاربره نگهداری داخل یک فایل در مسیر اجرای برنامه است که این فایل در زمان تهییه پشتیبان ، Backup گرفته شود .
3 - حالا برای حالت برنامه چند کاربره یک راه قراردادن یک دستگاه به عنوان server و ذخیره عدد برروی آن است و تمام client ها هر وقت به این عدد احتیاج داشتند آنرا از این دستگاه می خوانند و تغییرات را برای ذخیره به آن می فرستند .
4 - یک راه دیگر ذخیره آن عدد و تغییرات آن در بانک اطلاعاتی است که بقیه اطلاعات ذخیره می شود
البته ممکن است دوستان دیگر راههای دیگری را پیشنهاد کنند....

mansourii
چهارشنبه 01 دی 1389, 12:56 عصر
هترین راه اینه که شما آخرین شماره را در یک جایی نگهداری کنید!!!!
حالا کجا؟؟؟!!!
آهان.....
چون ما با یک عدد طرف هستیم دو نوع استراتژی برای برنامه تک کاربره و دو استراتژی برای برنامه چند کاربره داریم :
1- اگر برنامه شما تک کاربره و بر روی یک دستگاه اجرا می شود بهترین جا برای نگهداری عدد داخل Registery است . اما این نوع ذخیره سازی در نوع خود اشکالاتی دارد مثلا اگر ما ویندوز دستگاه را عوض کنیم بالتبع محتویات Registery هم پاک می شود!!!
2- بهترین راه برای نگهداری عدد در حالت تک کاربره نگهداری داخل یک فایل در مسیر اجرای برنامه است که این فایل در زمان تهییه پشتیبان ، Backup گرفته شود .
3 - حالا برای حالت برنامه چند کاربره یک راه قراردادن یک دستگاه به عنوان server و ذخیره عدد برروی آن است و تمام client ها هر وقت به این عدد احتیاج داشتند آنرا از این دستگاه می خوانند و تغییرات را برای ذخیره به آن می فرستند .
4 - یک راه دیگر ذخیره آن عدد و تغییرات آن در بانک اطلاعاتی است که بقیه اطلاعات ذخیره می شود
البته ممکن است دوستان دیگر راههای دیگری را پیشنهاد کنند....
:متفکر::متفکر::متفکر::متفکر:

mansourii
چهارشنبه 01 دی 1389, 13:04 عصر
سلام به دوستان و مهندسان عزیز .
من در حال نوشتن یه برنامه بانک اطلاعاتی (ثبت دانشجو ) هستم که برای ثبت دانشجوا نیاز به شماره منحصر هست . که دو رقم اول مربوط به سال ورود و دو رقم بعد مربوط می شه به ماه بقیه هم که یکی یکی جمع می شه .
تاریخ و روز رو بدست میارم بعد یکی یکی برنامه در وقت ذخیره اطلاعات به sql شمارنده یه عدد به اون اضاف می کنه اما اگر برنامه بسته بشه و باز اجرا کنیم از اول شروع به کار می کنه و اعداد تکراری می ده که برای ذخیره اطلاعات دچار مشکل می شم کسی می دونه چطور می شه کاری کرد که بعد از ورود به برنامه آخرین شماره رو از بانک پیدا کنه .
ممنون می شم از دوستان .
مگه شماره دانشجویی ها یکی یکی زیاد نمیشن؟
مثلا:
890701154
قرمز رنگ : سال ورود
مشکی : رشته (بعضی ها شناسه دارن)
آبی : شناسایی دانشجو
برای همچین معماری اصولا از اولویت بندی استفاده میشه. هر کی جود تر بیاد زود تر ثبت نام میشه.درسته.
پس بنابراین ثبت نام آخرین نفر شماره بیشتر از قبلیست
مثلا:
890552333
نفر بعدی
890552334
این کار یک دستور Select ساده و کوچولو نیاز داره که ببینه توی دیتا بیس کدوم عدد از همه اعدا (شماره دانشجویی ها)بزرگتره رو توی یک فیلد خصوصی نگه داره بعد عدد بزرگتر از اون رو در دیتابیس ذخیره کنه.

mansourii
چهارشنبه 01 دی 1389, 13:05 عصر
متوجه نشدید بگید تا یک مثال شبیه به سوال شما بذارم.:لبخندساده:

kebriya
چهارشنبه 01 دی 1389, 14:15 عصر
SELECT MAX(id) AS id
FROM tbllevel

sorena2000
چهارشنبه 01 دی 1389, 21:02 عصر
مگه شماره دانشجویی ها یکی یکی زیاد نمیشن؟
مثلا:
890701154
قرمز رنگ : سال ورود
مشکی : رشته (بعضی ها شناسه دارن)
آبی : شناسایی دانشجو
برای همچین معماری اصولا از اولویت بندی استفاده میشه. هر کی جود تر بیاد زود تر ثبت نام میشه.درسته.
پس بنابراین ثبت نام آخرین نفر شماره بیشتر از قبلیست
مثلا:
890552333
نفر بعدی
890552334
این کار یک دستور Select ساده و کوچولو نیاز داره که ببینه توی دیتا بیس کدوم عدد از همه اعدا (شماره دانشجویی ها)بزرگتره رو توی یک فیلد خصوصی نگه داره بعد عدد بزرگتر از اون رو در دیتابیس ذخیره کنه.

سلام
ممنون از جوابتون
اگر بتونید با یه مثال بیشتر توضیح بدید ممنون می شم

pedram_ns
پنج شنبه 02 دی 1389, 08:22 صبح
همونطور که دوستمون گفتن اصلا نیاز نیست اطلاعات شما در جای دیگه ایی ثبت بشه. شما اطلاعات رو در دیتابیس می ریزید و با کد زیر آخرین رکورد رو بر می گردونید:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\database.accdb")
Dim cmd As OleDbCommand = New OleDbCommand("select Top 1 * from student ORDER BY [number] DESC", con)
Dim reader As OleDbDataReader
con.Open()
reader = cmd.ExecuteReader()
reader.Read()
Dim number As String = reader("number").ToString()
Label1.Text = number
reader.Close()
con.Close()

در این کد از جدول student اخرین رکورد رو که دارای بزرگترین شماره هست رو می خونه و شماره رو بدست میاره(البته از روش max که دوستان گفتن هم می تونید استفاده کنید)
حالا باید چند تا نکته رو توجه کنید این روش شماره دهی تا ده سال دیگه مشکل ایجاد می کنه شما دو رقم سال رو می دید که در سال 1400 می شه 00 (مشکل سال 2000)
احتمالا هر سال شماره ها از نو شروع به اضافه شدن می کنن که باید این رو هم در نظر بگیرید

sorena2000
پنج شنبه 02 دی 1389, 09:59 صبح
همونطور که دوستمون گفتن اصلا نیاز نیست اطلاعات شما در جای دیگه ایی ثبت بشه. شما اطلاعات رو در دیتابیس می ریزید و با کد زیر آخرین رکورد رو بر می گردونید:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\database.accdb")
Dim cmd As OleDbCommand = New OleDbCommand("select Top 1 * from student ORDER BY [number] DESC", con)
Dim reader As OleDbDataReader
con.Open()
reader = cmd.ExecuteReader()
reader.Read()
Dim number As String = reader("number").ToString()
Label1.Text = number
reader.Close()
con.Close()

در این کد از جدول student اخرین رکورد رو که دارای بزرگترین شماره هست رو می خونه و شماره رو بدست میاره(البته از روش max که دوستان گفتن هم می تونید استفاده کنید)
حالا باید چند تا نکته رو توجه کنید این روش شماره دهی تا ده سال دیگه مشکل ایجاد می کنه شما دو رقم سال رو می دید که در سال 1400 می شه 00 (مشکل سال 2000)
احتمالا هر سال شماره ها از نو شروع به اضافه شدن می کنن که باید این رو هم در نظر بگیرید

ممنون از راهنمای خوبتون
درست شد .
به نظر شما برای اینکه به این مشکل بر نخورم چکار کنم بهتره .
روش دیگه ای به نظرتون میاد که برای شماره دانشجویی یا هر شماره عضویت دیگه ای که بخوایم بدیم

pedram_ns
پنج شنبه 02 دی 1389, 15:17 عصر
:متفکر: این کار رو به عنوان تمرین خودتون دارید انجام می دیدی یا برای جایی کار می کنید.
اگر برای جایی کار می کنید که باید با متد خودشون شماره دهی کنید من خودم دقیقا نمی دونم از چه روشی استفاده می شه ولی می تونید یک کد به عنوان کد دانشگاه در اول بیارید بعد کد رشته بعد سال ورود و بعد هم شماره دانشجو 125 89 33 25 .

اگر کسی از دوستان قبلا کار کرده کمک کنه ما هم استفاده کنیم.

sorena2000
یک شنبه 12 دی 1389, 18:10 عصر
نه برای خودم دارم کار می کنم .
در حد یاد گیری هست . البته بعد از اینکه شما مشکل سال 400 رو گفتید برام جالب شد .
ببینم بهترین راه برای قرار دادن شماره پرسنلی به چه صورت باشه خوبه
کسی اگر بلده ممنون می شم اعلام کنه

غلامرضا شریفی
دوشنبه 13 دی 1389, 15:39 عصر
من چند سالي است با شركتهاي تعاوني كار ميكنم اين شركتهاي تعاوني از شماره عضويت استفاده ميكنند كه ميشود گفت همانند شماره دانشجويي است در سالهاي قبل حسابداران دقت بيشتري بكار ميبردن و در هنگام وارد كردن عضويت اشتباه نميكردند ولي حالا جوانها امده اند و سرعت كار را بالا برده اند و بجاي آن اشتباه هم در وارد كردن عضويت افزايش يافته است تنها راه براي جلوگيري از اين عمل استفاده از روش بانك سپه بود كه از چندين سال پيش اعمال ميشد كه بعد از شماره حساب دو رقم ديگر اضافه بود كه صحت شماره وارده را چك ميكرد كه اين عمل در شماره ملي هم آخرين عدد ميباشد
دوست عزيز براي جلوگيري از وارد كردن شماره دانشجويي بهتر است از اين روش استفاده كنيد در همين سايت در مورد شماره ملي و روش تست ان توضيح داده شده است